phpbar.de logo

Mailinglisten-Archive

[php] Variable Variabeln

[php] Variable Variabeln

Thomas Feyrer Dante_(at)_altmuehlnet.de
Mon, 18 Sep 2000 20:53:34 +0200


--=====================_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