Template Klasse (kein phpbb)

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Template Klasse (kein phpbb)

Beitrag von Ambience »

Hallo,

kann mir jemand vllt. erklären, wieso meine ersetzung der Platzhalter nicht funktioniert?

Folgender Code:

Code: Alles auswählen

public function display($template)
  {
        $code = file_get_contents($template);   
        $code = str_replace('\\', '\\\\', $code);
        $code = str_replace('\'', '\\\'', $code);
        $code = preg_replace('#\{([a-z0-9\-_]*?)\}#is', 'isset($this->assigns[\'\1\']) ? $this->assigns[\'\1\'] : \'\';', $code);
        eval('echo "$code";');
        print_r($code);
        return true;
  }

Das template wird ausgegeben aber nix geparst. Die folgende ausgabe erscheint in meinem template. im template ist folgender platzhalter: {test} der auch zugewiesen ist in: $assigns als $assigns['test'] = 'test' aber er ersetzt mir das iim template nicht sondern gibt mir die komische fehlerausgabe. Hoffe ihr versteht mich und könnt mir weiterhelfen.

Code: Alles auswählen

isset($this->assigns['test']) ? $this->assigns['test'] : ''; isset($this->assigns['test']) ? $this->assigns['test'] : ''; 
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Template Klasse (kein phpbb)

Beitrag von gn#36 »

Du machst einen Denkfehler. In $code steht doch schon der zu evaluierende Code drin, hier kannst du nicht einfach ein Echo davorklemmen. Wenn überhaupt so ähnlich, dann

Code: Alles auswählen

echo eval($code);
meinetwegen auch

Code: Alles auswählen

eval("echo $code");
Aber auch das wird nicht mehr funktionieren sobald HTML noch mit drin ist in der Variablen (da das der eigentliche Sinn und Zweck einer Templateklasse ist ist der Ansatz also eher schlecht).

Besser ist es, du packst innerhalb des HTML Codes die Ersetzungen in <?php und ?> und baust den echo Befehl auch gleich mit ein. Dann kannst du HTML und PHP mischen. Wenn du nun

Code: Alles auswählen

eval("?>$code");
ausführst sollte alles so klappen wie du dir das vorstellst.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“