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