![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
So, in diesem Tutorial werde ich eine Möglichkeit vorstellen, wie man eine kleine, aber doch recht komplexe Template-Engine selber programmieren kann. Hierbei steht im Vordergrund den Code so kurz - und somit übersichtlich - wie möglich zu halten. Später soll es einem dann möglich sein, diese Klasse nach seinen Wünschen und Bedürfnissen umzuprogrammieren.
Als Grundlage nutze ich das Tutorial [php] OOP - eine Einführung. Was soll uns diese Klasse bieten? Wir wollen eine kleine, aber doch schön erweiterbare Template-Engine programmieren. Wir benötigen also einen Speicherort für unsere Templates. Für die Lösung dieses Problems nutze ich ein Array in der Klasse, in der die Inhalte eines Templates gespeichert werden und bei einem erneuten Aufruf des selben Templates im weiteren Verlauf des Scriptes zu beschleunigen. Ich will nicht für jeden Kleinkram eine extra Datei anlegen, in der dann nur 2 Bytes enthalten sind, sondern ich möchte sie in bestimmte Kategorien zusammenfassen, die als eine Art Container fungieren. Schließlich haben wir z.B. Templates, die wir nur fürs Gästebuch benötigen und welche, die nur für News zuständig sind, warum also nicht alle, die nur dafür verwendet werden in einer Template-Datei zusammenfassen? Variablen sollen in den Templates selbstverständlich ersetzt werden durch die Inhalte der Variablen und es sollte möglich sein direkt in einem Template ein anderes Template ausgeben zu lassen. Machen wir uns also an die Grundstruktur: PHP-Code:
Als Konfigurationsvariablen nutzen wir vorerst nur 'folder', das mit dem Wert FALSE gefüllt wird. Hier steht später der Ordner drin, in dem die Templates gesucht werden. Die Variable $data wird zur Laufzeit die Inhalte der Templates enthalten. Um sofort beim Instanziieren einen Ordner zuzuweisen müssen wir einen Konstruktor (http://de2.php.net/manual/de/languag...onstructor.php) definieren: PHP-Code:
PHP-Code:
tmpl_load () - Lädt einen Template-Container (eine Template-Datei); Einzelne Templates werden rausgefiltert und separat in der Klasse gespeichert tmpl_get () - Lädt ein Template aus dem angegebenen Container; Zum Laden des Containers wird vorab tmpl_load () ausgeführt tmpl_parse () - Wandelt Platzhalter im Template um Gehen wir von Oben nach Unten vor und fangen mit dem Sinnigsten selbst an: Dem Laden eines Containers. PHP-Code:
PHP-Code:
Code:
<!-- BEGIN test_template1 --> Dies ist das erste Template in diesem Container <!-- END --> <!-- BEGIN test_template2 --> Und dies ist das 2. Template. <!-- END --> Es kann also auch im Gästebuch durchaus noch auf die Templates des Containers 'news' zugegriffen werden, sollte dies notwendig sein. Aber die Hierarchie und Aufteilung der Templates bleibt ja jedem selbst überlassen Wir können nun also Template-Container direkt in die Klasse laden lassen. Der manuelle Funktionsaufruf macht jedoch wenig Sinn, da diese Funktion bei jeder Anwendung von tmpl_get ohnehin gestartet wird. Kommen wir nun zur Funktion tmpl_get (), welche beim Erfolg den Inhalt des Templates zurückgeben soll (ohne vorher die Platzhalter ersetzt zu haben) oder im Fehlerfall FALSE zurückgibt: PHP-Code:
Etwas komplizierter ist da schon die Funktion tmpl_parse (), die mit Abstand am Meisten zu tun haben wird, da hier die Platzhalter ersetzt werden. PHP-Code:
Mittels eines preg_match_all () werden alle möglichen Template-Codes rausgesucht. Möglich sind hierbei Codes in der Form {TMPL:container:template} um ein weiteres Template oder {VAR:variable} um den Wert von $variable an dieser Stelle einzufügen. Die RegEx sind extra etwas einfachr gehalten, um die Funktionsweise ansich zu erklären, hierbei wird ein zugriff auf Instanzvariablen unter Anderem nicht berücksichtigt. Die Änderungen, die vorgenommen wreden sollen, werden in einem Array $replace gespeichert und nach Abarbeitung der gefundenen Template-Codes auf das Template ausgeführt. Dies wiederholt sich so lange, bis keine Änderung des Inhaltes von $templates mehr erfolgt. PHP-Code:
Wir schließen also die Klasse nun ab und fügen noch die Initialisierung in der Variablen $tmpl durch. PHP-Code:
PHP-Code:
Code:
<!-- BEGIN hello_world -->
{TMPL:example:hello} {TMPL:example:world}
<!-- END -->
<!-- BEGIN hello -->
{VAR:hello}
<!-- END -->
<!-- BEGIN world -->
{VAR:world}
<!-- END -->
Ich hoffe, dass trotz der Länge des Tutorials und der Schreibweise gut rübergekommen ist, wie man Templates recht einfach nutzen kann. Vielleicht fällt dem Einen oder Anderen ja eine Möglichkeit ein, effizient mit dieser Klasse zu arbeiten, indem er sie seinen Wünschen und Belangen entsprechend Anpasst. Zu wünsche wäre es jedenfalls MfG MrNiceGuy Geändert von Jann Hendrik (28.05.2008 um 19:58 Uhr). Grund: link aktualisiert |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| indireckte Frage zu Template system | kampfgnom | PHP-Programmierung | 4 | 04.06.2007 04:12 |
| eigenes Template System mit Sprachunterstützung | jjelliss | PHP-Programmierung | 61 | 15.09.2006 10:00 |
| Template System | Jan | Gesuche | 8 | 01.07.2006 23:27 |
| Kleines Prob mit phpBB Template System | Garnele | PEAR, PECL und Frameworks | 6 | 22.10.2005 00:31 |