B
Bgag
Abend!
Ich habe eine kleine Template Engine geschrieben und habe nun aber ein Problem. Ich möchte in mein Template eine Subnavigation einfügen, die je nach Pageid, die per URL übergeben wird, eingefügt wird. Die Template Engine ersetzt den Platzhalter { include file="subnav.php"} mit Hilfe dieses Methoden Teils:
Problem: subnav.php enthält PHP. Da die Methode das Einbinden der Seite mit file_get_contents() macht, wird das ganze nicht richtig angezeigt, da der enthaltene PHP-Code vorher nicht geparst wird. Mit include() geht das ganze leider nicht, da dann alles an falscher Stelle steht. Also möchte ich eine Methode in meine Template Engine einbauen, die die Seiten vor dem Einbinden parst.
In meiner alten Template Engine sah das ganze so aus:
Sehr primitiv, wurde mir gesagt und daher suche ich nun eine neue Möglichkeit das umzusetzen. Gibt es da noch etwas anderes auch ohne eval().Denn es ginge ja auch so:
Doch ich habe gelernt eval is evil! Erhalte bei dieser Möglichkeit nämlich auch gleich mehrere Fehler:
Wäre euch sehr dankbar für eure Hilfe.
MfG, Andy
Ich habe eine kleine Template Engine geschrieben und habe nun aber ein Problem. Ich möchte in mein Template eine Subnavigation einfügen, die je nach Pageid, die per URL übergeben wird, eingefügt wird. Die Template Engine ersetzt den Platzhalter { include file="subnav.php"} mit Hilfe dieses Methoden Teils:
PHP:
// replace includes ( {include file="theinclude.php"} )
while(preg_match("/".$this->leftDelimiterF."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF."/isUe", $this->template)) {
$this->template = preg_replace("/".$this->leftDelimiterF."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF."/isUe", "file_get_contents('\\1'.'.'.'\\2')", $this->template);
}
In meiner alten Template Engine sah das ganze so aus:
PHP:
/* Daten laden, die PHP enthalten und somit erst gepuffert werden müssen */
public function load($stuff) {
ob_start();
include $stuff;
$newstuff = ob_get_contents();
ob_end_clean();
return $newstuff;
}
PHP:
while(preg_match("/".$this->leftDelimiterF."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF."/isUe", $this->template)) {
$this->template = preg_replace("/".$this->leftDelimiterF."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF."/isUe", "file_get_contents(eval('\\1'.'.'.'\\2'))", $this->template);
Code:
Parse error: syntax error, unexpected $end in /home/redway/www/CMS/includes/TemplateEngine.php(65) : regexp code(1) : eval()'d code on line 1
Parse error: syntax error, unexpected $end in /home/redway/www/CMS/includes/TemplateEngine.php(65) : regexp code(1) : eval()'d code on line 1
MfG, Andy
Zuletzt bearbeitet von einem Moderator: