Probleme mit preg_replace()

Hallo,

ich habe eine "index.php" im Stammverzeichnis und eine "index.tpl" im Ordner templates/default/

Nun möchte ich {menu} (steht in der index.tpl) durch die Variable $menu ersetzen (die Variable kommt aus der index.php)

Ich weiß, dass es sich wahrscheinlich am besten mit preg_replace() macht, aber wie genau?



Ich hatte die Suche benutzt, nur hat sich dort alles auf Arrays bezogen, oder es war alles ein wenig zu kompliziert.
 
Probier mal Folgendes:
PHP:
<?php

	function foobar($varName)
	{
		if( isset($GLOBALS[$varName]) ) {
			return $GLOBALS[$varName];
		} else {
			return '{'.$varName.'}';
		}
	}

	preg_replace('/{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)}/es', 'foobar("\1")', $string);

?>
 
Das hilft mir leider nicht wirklich weiter, oder ich weiß einfach nur nicht genau, wie ich mit der Funktion umzugehen habe.

Aber danke erstmal.

Mal eine reine Verständnisfrage zum preg_replace() - Befehl:

als erstes gebe ich an, was ich ersetzen möchte;
dann gebe ich an durch was ich es ersetzen möchte;
aber wofür ist der letzte Wert da? (ich konnte mit der Erklärung auf php.net nichts anfangen)

Vieleicht komme ich dann ja selber drauf...

Oder fällt vieleicht jemandem von euch eine andere Möglichkeit ein?
 
Über den dritten Parameter der preg_replace()-Funktion wird die zu verarbeitende Zeichenkette übergeben. Hier ein einfaches Beispiel:
PHP:
<?php

	function foobar($varName)
	{
		if( isset($GLOBALS[$varName]) ) {
			return $GLOBALS[$varName];
		} else {
			return '{'.$varName.'}';
		}
	}

	$foo = 'Wert der Variable $foo';
	$bar = 'Wert der Variable $bar';
	$string = 'bla "{foo}" "{bar}" bla';

	echo preg_replace('/{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)}/es', 'foobar("\1")', $string);

?>
 
Vielleicht um es ganz einfach darzustellen:

Code:
preg_replace( suche nach... als RegExpression, ersetze durch dies, in dieser zeichenkette);

ganz leicht *g
Aber wie schon erwähnt wurde, sollte dir die Funktion str_replace() genügen. In deinem Fall also wie folgt:

Die Variable $file enthält nun dein Template..
Code:
str_replace( "{menu}", $menu, $file);


Gruß Manuel
 
Einwenig hintergestiegen bin ich jetzt schon, aber nun ist ja das Problem, dass der Wert nicht aus einer Variable, sondern aus einer Datei kommt...

Ich habe es so versucht; so klappt es aber leider nicht... Zumal der Wert des {menu}, ja auch dann erst ausgegeben werden soll, wenn {menu} in der Datei erscheint...


PHP:
    function foobar($varName)
    {
        if( isset($GLOBALS[$varName]) ) {
            return $GLOBALS[$varName];
        } else {
            return '{'.$varName.'}';
        }
    }

    $foo = 'Wert der Variable $foo';
    $bar = 'Wert der Variable $bar';
    $string =  fopen ("templates/default/index.tpl","r");

echo preg_replace('/{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)}/es', 'foobar("\1")', $string);



Tut mir leid, ist schon sehr spät... Ich hoffe Ihr versteht, was ich versuche zu sagen.


Danke für Eure Hilfe.
 
fopen() liefert keinen String, sondern einen Dateihandle.... wenn du den Inhalt einer Datei willst, benutze [phpf]file_get_contents[/phpf] .
 
Zurück