Template-Engine mit PHP

Immer wieder brauche ich für das Erstellen von komplexeren Webanwendungen eine kleine Template-Engine. Ich könnte dann zwar auf bestehende Syteme wie z.B. Smarty oder PatTemplate. Ich habe mir schon vor langer Zeit ein kleines Script zusammengeschrieben und möchte es heute hier mit euch teilen. Es ist ja Weihnachten.


Zuerst einmal die grundlegende Vorgehensweise. Die sich auf meiner Sicht heraus als sehr einfach erweist.

Klar das ich als erstes die Template-Klasse instazieren muss. Dies tue ich mit der gleichzeitigen Übergabe der Template-Ordners. Als nächstes lade ich dann die eigentliche Template-Datei. Und dann gebe ich allen Keywords, also Schlüsselworten, die ich im Template gebrauche einen Wert. Zum Schluss schicke ich das Template zum Browser.

Bestimmt gibt es jetzt noch viele Einwände was man noch einbauen könnte oder sollte, was noch alles fehlt und nicht berücksichtige wird, aber ich glaube gerade diese Einfachheit macht die Klasse so schnell nutzbar.

Das Template, welches geladen wird und später dann an den Browser geschickt wird, ist eine reine HTML-Datei. Ich brauche also keine spezielle Konfiguration meines Editors um die Template-Dateien zu öffnen. Ich nutze einfach normale HTML-Dateien und dort wo der dynamische Text hinkommen soll definiere ich ein Schlüsselwort, welches folgende Syntax hat: ##UPPERCASE_WORD##.

Nun zu meiner eigentlichen Template-Klasse. Sie besitzt mehr als die oben gezeigten Funktionalitäten.

Folgendes kann in dieser Klasse genutzt werden:

RED_Template($path=null)
Dies ist der Konstruktor der einen Pfad zum Template-Ordner erwartet. Falls die Parameter leer bleibt wird auf Root-Ebene ein Default-Ordner als Stammverzeichnis für die Templates genutzt.
load($file)
Diese Methode lädt die Template-Datei in die Klassen-Eigenschaft $source falls sie vorhanden ist. Falls sie nicht existiert wird in die Klassen-Eigenschaft $error eine Fehlermeldung geschrieben und der Wert false zurück gegeben.
reload()
Es kommt immer wieder vor, dass die geladene Template-Datei erneut geladen werden muss. Dabei habe ich mir aber überlegt, dass es überflüssig und Ressourcen verschwendend ist, wenn sie tatsächlich erneut geladen werden müsste. Deshalb wird beim ersten Laden der Datei eine Kopie in eine weitere Klassen-Eigenschaft $cache abgelegt. So muss hier nur noch ein Überschrieben die $source-Eigenschaft stattfinden.
setSource($src='')
Diese Methode benutze ich kaum. Ich habe sie nur eingebaut, um die Möglichkeit zu haben nach dem laden der Template-Datei eine andere Datei zu laden. Das ist aber bis jetzt noch nie vorgekommen.
set($key, $value)
Hier nun die wichtigste Methode. Hier werden die Schlüsselbegriff und ihre Werte in einen Array gesammelt um später eingesetzt zu werden.
replace()
Mit der relace-Methode werden die gesammelten Schlüsselbegriffe in das geladene Templat eingesetz, bzw. die Schüsselbegriffe durch ihre Werte ersetzt. Diese Methode sollte eigentlich niemals direkt aufgerufen werden, aber da es in PHP 4 noch keine Zugriffsrechte für Variablen gab habe ich sie einfach so geschrieben.
get($source=false)
Um mit der ersetzten Template-Datei in PHP weiterarbeiten zu können, habe ich eine get-Methode eingefügt, die nicht direkt das Template an den Browser gibt. Mit dem Parameter $source kann ich bestimmen ob ich den lesbaren Quellcode haben möchte oder lieber doch die benutzbaren Quellcode.
write($source=false)
In vielen Fällen möchte ich aber dass das Template direkt an den Browser gesendet wird. Die write()-Methode ruft eigentlich nur die get()-Methode auf und reicht der Parameter weiter.
error($msg)
Alle Fehlermeldungen werde mit dieser Methode in einem Array gesammelt um ihn später abrufen zu können. es wäre z.B. auch denkbar, dass diese Fehler dann in eine Logdatei umgeleitet werden.
getError()
Meine letzte Funktion gibt immer die letzte Fehlermeldung aus dem Array zurück.

Mit diesem System wäre es z.B. sehr einfach einzelne HTML-Blöcke in Template-Dateien auszulagen und sie dann nacheinander in sich zu laden um so eine komplette Ausgabe zu kommen.

 

Hier der Download meiner PHP Template Klasse

2 Kommentare

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.