PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kleiner Parser



phoku
12-10-2003, 21:42
Hallo,

ich brauche eine Funktion, die mir alle Vorkommen des Strings "{$variable}" in einem String duch den aktuellen Wert der $variable ersetzt.

Kann mir da jemand weiterhelfen?

sagi
12-10-2003, 23:06
http://devmag.net/webprog/php_fast_template.htm

Es gibt uebrigens eine suchen Funktion im Forum. Template war das Stichwort ;)

mfg

c.

mehlvogel
13-10-2003, 11:44
$string = str_replace("{\$variable}", $variable, $string);


Vielleicht will er es ja selber schreiben und nicht so ein vergefertigten kram nehmen.

phoku
13-10-2003, 14:05
genau, selber machen

das Problem ist jetzt noch, dass der Variablenname im String, also "{$variablenname}" noch nicht bekannt ist. Da müsste ich erstmal nach suchen um dann alle {$variablennamen} durch ihren aktuellen Wert zu ersetzen.

elrond
13-10-2003, 14:27
da kannst du nur versuchen die variabelnamen in ein array zu lesen und dieses dann durchzugehen um das str_replace auszuführen...

frage ist einfach, woran erkennt man die variabeln??

diesen code kannst benutzen um die variabeln auf ein array zu lesen...


$str="lhnrtnh@HH@rknhrlkh @H@ kergnegnjkeirg @VAR2@ kergngieg @XX@ klwrjnrekbgn";
$arr=split("\@",$str);
for($i=0;$i<count($arr);$i++) {
if($i%2==1) {echo $arr[$i]."<br>";}
}


ich habe die vars einfach mit "@" am anfang und am enge gekennzeichnet...

mehlvogel
13-10-2003, 23:24
Denk dran das du bei str_replace auch mit Arrays arbeiten kannst



$keys = array("{var1}", "{var2}", "{var3}");
$replace = array($var1, $var2, $var3);
$string = str_replace($keys, $replace, $string);


Das natürlich nur nen Beispiel ;) Aber wäre ja auch langweilig wenn man sofort alles vorkaut :D (ich kenne diese "bastelitis" nur zu gut - traue keinem Code den du nicht selber verbuggt hast ;) [der Grund warum ich mich so gegen PEAR sträube])

Christian_2
14-10-2003, 07:05
HI

ich habe auch mal ein kleines Template System geschrieben.
Meine "Variablen" sahen so aus: {[var]} -> um Mißverständnise mit reinem Text zu vermeiden.

Ich habe einfache meinen String mit explode() nach {[ aufgesplittet. Dann den Ursprungstext nochmals nach ]} aufgesplittet. Die Größe beider Arrays verglichen. Falls sie gleichgroß sind ist die Syntax der Variablen okay und es handelt sich wirkich um eine Template Variable. Dann habe ich angefangen jedes Element meines ersten Arrays zu durchlaufen bis ich auf die Zeichenfolge ]} gestoßen bin. Dann wusste ich - "hier endet der Variablenname". Dann habe ich alle Variablenname in ein Array geladen und mit strreplace und eval den entsprechenden code reingeladen. eval() brauchst du, um auch php code in die templates schreiben zu können, der dann auch ausgeführt wird (was nicht sinn und zweck der sache ist aber ich habe es benötigt)


vielleicht war da ja der ein oder andere tipp dabei...

gruss

mehlvogel
14-10-2003, 10:30
Generell war das aber ganz schön umständlich - Ein str_replace der alles in einem Schritt macht, ist da meiner Meinung nach schneller (aber das habe ich auch erst beim schreiben meines zweiten oder dritten Templatesystem rausgekriegt - und nein ich war mit den andenren einfahcnet zufrieden - und ja ich hab zuviel Freizeit :p)