class Something
{
public static function compile(&$subject, $replace, $with) {
$placeholders = array_combine($replace, $with);
$condition = "{[a-z0-9_- ]+:[a-z_]+}";
$inner = "((?:(?!{/?if).)*?)";
$pattern = "#{ifs?(".$condition.")}".$inner."{/if}#is";
while (preg_match($pattern, $subject, $match)) {
$placeholder = $match[1];
$content = $match[2];
// if empty value remove whole line
// else show line but remove pseudo-code
$subject = preg_replace($pattern,
empty($placeholders[$placeholder]) ? "" : addcslashes($content, "$"),
$subject,
1);
}
}
}
Ich habe einen HTML-Code-Bereich zum Spielen. Dompdf erledigt den Rest, um mein Formular in pdf zu konvertieren. Dieser Klassencode war fast schon vorgefertigt. Es gibt mir die Freiheit zu benutzen;
{if {dil:value}} <div class="english">ENGLISH</div> {/if}
so etwas im HTML-Bereich. Aber es hat nur überprüft, ob der Radioknopf leer ist oder nicht. Aber ich möchte lernen, welche Option ausgewählt ist. Also ich möchte einen Code wie verwenden;
{if {dil:value}=="ENGLISH"} <div class="english">ENGLISH</div> {/if}
Ich habe leere Check-Zeile mit manueller Gleichheitsprüfung umgewandelt, um zu sehen, ob es funktioniert;
// if empty value remove whole line
// else show line but remove pseudo-code
$subject = preg_replace($pattern,
$placeholders[$placeholder]=="english" ? "" : addcslashes($content, "$"),
$subject,
1);
Und es hat funktioniert, aber ohne eine Freiheit vonNatürlich (nur wenn Radio gleich Englisch ist). Ich bin so neu im Regex, also konnte ich es nicht herausfinden. Ich habe versucht, $ Gleichheitsvariable hinzuzufügen, also würde ich meinen Code viele Male mit verschiedenen Überprüfungen verwenden;
class Something
{
public static function compile(&$subject, $replace, $with) {
$placeholders = array_combine($replace, $with);
$condition = "{[a-z0-9_- ]+:[a-z_]+}";
$inner = "((?:(?!{/?if).)*?)";
$equality = "(?<=~)[^}]*(?=~)";
$pattern = "#{ifs?(".$condition.")".$equality."}".$inner."{/if}#is";
while (preg_match($pattern, $subject, $match)) {
$placeholder = $match[1];
$content = $match[2];
// if empty value remove whole line
// else show line but remove pseudo-code
$subject = preg_replace($pattern,
$placeholders[$placeholder]==$equality ? "" : addcslashes($content, "$"),
$subject,
1);
}
}
}
mit diesem Code im HTML-Bereich;
{if {dil:value}~"ENGLISH"~} <div class="english">ENGLISH</div> {/if}
Ich glaubte wirklich, dass es funktionieren würde, aber es tat nicht :) Sogar Muster löschte nicht, nachdem es in pdf umgewandelt wurde, also kann ich meinen Code unter der pdf-Akte lesen.
Vielleicht fehlt mir auch etwas an $ match. Mit der Gleichheitsvariable eingeschlossen, also $ match könnte drittes Array erhalten, denke ich. Also habe ich auch versucht, dies hinzuzufügen, aber das hat nicht funktioniert;
while (preg_match($pattern, $subject, $match)) {
$placeholder = $match[1];
$equality = $match[2];
$content = $match[3];
Nun, mein Ziel ist es, Check-Icons auf bestimmte Box-Bereiche auf vorgefertigten Design-Bild zu setzen. Ich habe alle Textfelder mit absoluten Positionen gehandhabt, außer dass der Radio Button aktiviert wurde.
Danke für all deine Hilfe.
Antworten:
0 für die Antwort № 1Ich habe es so gelöst;
class Something
{
public static function compile(&$subject, $replace, $with) {
$placeholders = array_combine($replace, $with);
$condition = "{[a-z0-9_- ]+:[a-z_]+}";
$inner = "((?:(?!{/?if).)*?)";
$equality = "(~[A-ZÇŞĞÜÖİçşğüöı]+~)";
$pattern = "#{ifs?(".$condition.")}".$equality."".$inner."{/if}#is";
while (preg_match($pattern, $subject, $match)) {
$placeholder = $match[1];
$equality = $match[2];
$content = $match[3];
$equality = substr($equality, 1, -1);
// if empty value remove whole line
// else show line but remove pseudo-code
$subject = preg_replace($pattern,
$placeholders[$placeholder] == $equality ? "" : addcslashes($content, "$"),
$subject,
1);
}
}
}
Ich änderte meine Gleichheitsregex, um Utf-8 Zeichen zu unterstützen, und änderte andere Regexen etwas. Es gab nicht excaped Schrägstriche. Und schließlich kann ich es bei html so verwenden;
{if {language:value}}~FRENCH~<div class="english">ENGLISH</div>{/if}
Die erste Übereinstimmung erhält den Radio Button-Wert, zweiteÜbereinstimmung ist meine Gleichheitsüberprüfung, und dritte Übereinstimmung wird geschrieben, wenn Gleichheit falsch ist. Ja, ich weiß, es klingt ein wenig umgekehrten Modus :) So funktioniert es wahrscheinlich nicht mit Radio-Tasten, die mehr als 2 Optionen haben. Aber in meinen Situationen haben meine alle Radio-Tasten 2 Optionen.
So weit, so gut, ich habe heute Regex gelernt :)