Du öffnest die Header-Datei und kopierst den Inhalt in eine Variable (übrigens sehr umständlich; ein file_get_contents() würde reichen). Jetzt erstezt du in dieser Variable ein paar Werte und bindest die Datei, der die Daten entspringen ein und erwartest, dass die Änderungen an deinem Variablen-Wert nun die Datei geändert haben (bzw. auch nicht, denn du gehst ja davon aus, dass du diesen Schritt jedes mal wiederholen musst).
Also entweder, du schreibst die geänderten Daten in eine temp. Datei (siehe das Cache-System von Smarty) oder du benutzt eval(), um das Template-Skript aus der Variable heraus ablaufen zu lassen.
Andere Ansätze wären z.B., die Ausgabe der einzubettenden Elemente vorab zu generieren und dann eben deine Tags (__NAV__ etc.) direkt durch die Ausgabe zu ersetzen. Oder du benutzt preg_replace_callback(), um die Tags weder durch PHP-Code, noch durch fertige HTML-Komponenten zu ersetzen, sondern quasi durch Methodenaufrufe, die dir die Ausgabe machen.
Den PHP-Code, der in deinem Template steht, der lässt sich auch auslagern, denn entweder kannst geht es dort darum, die im Template benötigten Werte zusammenzustellen. Dann solltest du diesen Mechanismus vereinheitlichen, so dass alle Templates auf das gleiche Interface zugreifen. Oder er enthält Business-Logik und dann hat er dort eh nichts verloren, denn dort würde ja u.A. entschieden, welches Template eingebunden werden soll. Es wäre also unsinnig, diesen direkt an das Template zu knüpfen, wenn noch nichtmal klar ist, dass dieses überhaupt eingebunden werden soll.
Zurück zu den Ersetzungen:
Wenn du eh schon nur so rudimentäre Funktionen benutzt (letztlich nur ein Include aus dem Template heraus), dann kannst du doch auch gleich PHP in dein Template reinschreiben. Andernfalls, wenn das komplexer werden soll und du Platzhalter, Bedingungen, Schleifenkonstrukte etc. einbauen willst, dann nimm doch lieber gleich Smarty. Diese Template-Engine funktioniert ja genau nach dem Prinzip, Smarty-Tags durch PHP-Code zu ersetzen und dies Template mit PHP-Code dann einzubinden.
Basti
PS:
Setze mal dein error_reporting hoch! Es ist für deine Arbeit sicher nicht förderlich, die Ausgabe von Parser-Meldungen zu unterdrücken. |