Mailinglisten-Archive |
--=====================_969296014==_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable At 13:50 18.09.2000 +0200, Dominik Brumm wrote: >In der Template-Datei sieht die Title Zeile so aus: ><title>{%PAGE.TITLE%}</title> >Die Template Klasse hat ein Array $this->VARS welches alle Variabeln >enth=E4lt. >Der "Interpreter" sollte anhand von PAGE.TITLE auf den Wert von >$this->VARS[page][title] zugreifen. Danach wird der Wert mit einem >str_replace >eingef=FCgt. >Ich denke mit variablen Variabeln k=F6nnte ich eine einfache L=F6sung= finden f=FCr >die >die Umwandlung von PAGE.TITLE nach $this->VARS[page][title]. >Das ganze sollte dynamisch sein, keine Begrenzung der Dimensionen. Hi Dominik, OK... war mal wieder ne sch=F6ne Lernaufgabe f=FCr mich, hat ne halbe Stunde gebraucht, bis ich das Ziel erreicht hatte ;) Die Klasse in der angeh=E4ngten Datei, schafft genau das was du willst, und das im Grunde durch EINE einzige Zeile: preg_replace('/{%([^%]*)%}/e', 'eval("return \$this->VARS[\"".implode("\"][\"", explode(".", "\\1"))."\"];");', $string); ... sch=F6n ... ;) Die Variable $string, die du der Funktion parse_string($string) =FCbergibst, muss einfach den Kompletten Inhalt der Template-Datei enthalten, incl. Zeilenumbr=FCchen... (ausser du hast mehrere Templates innerhalb einer= Datei) L=E4uft wunderbar unter PHP4/Win98 Wenn ich es erkl=E4ren soll, sagt es. Freiwillig mach ich das jetzt im Moment nicht... W=E4r mehr arbeit als das coden ;) PS: Ich muss zugeben, ich war mal bei Perl... da schafft man ja bekanntlich alles innerhalb einer Zeile... Ich versuche das in PHP auch immer so zu machen ;) PPS: Waren die Guru's hier auf der Liste zu faul, diese Problem= auszut=FCfteln? Bye & Thanks f=FCr die sch=F6ne Aufgabe Dante --=====================_969296014==_ Content-Type: text/plain; charset="us-ascii" Content-Disposition: attachment; filename="temp.php" <? class FooBar { var $VARS; function FooBar($vars) { $this->VARS = $VARS; } function parse_string($string) { return preg_replace( '/{%([^%]*)%}/e', 'eval("return \$this->VARS[\"".implode("\"][\"", explode(".", "\\1"))."\"];");', $string ); } } $a = new FooBar( array( 'PAGE' => array( 'TITLE' => array( 'TOPTITLE' => 'FooBar', 'SUBTITLE' => 'BarFoo' ), 'MENU' => array( 'POINT1' => 'Punkt 1', 'POINT2' => 'Punkt 2' ) ), 'TEST' => 'Short test' ) ); echo $a->parse_string( "Toptitle: {%PAGE.TITLE.TOPTITLE%} Subtitle: {%PAGE.TITLE.SUBTITLE%} Point1: {%PAGE.MENU.POINT1%} Point2: {%PAGE.MENU.POINT1%} Test: {%TEST%}"); ?> --=====================_969296014==_ Content-Type: text/plain; charset="us-ascii" --=====================_969296014==_--
php::bar PHP Wiki - Listenarchive