![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Erfahrener Benutzer
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 443
|
Ein eigenes Templatesystem schreiben
In diesem Tutorial beschreibe ich Schritt für Schritt den Aufbau eines eigenen Templatesystems. Ich setze vorraus, dass du die Grundlagen von PHP beherrschst, Klassen in PHP sowie die phpDoc-Tags sollten für dich auch nichts Neues sein. Links dazu: 1. Wozu ein eigenes Templatesystem schreiben? Auch wenn es schon fertige Lösungen wie Smarty&Co gibt, lohnt es sich extrem, ein eigenes Templatesystem zuschreiben:
2. Funktionen des Templatesystems Das fertige Templatesystem wird folgende Funktionen umfassen:
3. Der Aufbau des Templatesystems Das ganze Templatesystem wird mittels einer Klasse realisiert. Hier erstmal der Aufbau der Klasse: PHP-Code:
4. template() - Der Konstruktor Beim Konstruktor-Aufruf kannst du den Template- und Sprachdateiordner ändern, das ist aber nicht zwingend, wenn du die schon in der Klasse festgelegten Ordner verwenden willst, gibst du einfach keine Parameter an: PHP-Code:
PHP-Code:
Die Methode load() versucht das Template (dessen Dateiname übergeben wurde) zu öffnen. Bei einem erfolgreichem Öffnen wird der Templateinhalt in die Eigenschaft template eingelesen: PHP-Code:
PHP-Code:
assign() dient dazu, um normale Platzhalter im Template zu ersetzen. Im PHP-Code muss dann stehen: PHP-Code:
Code:
{$platzhalter}
PHP-Code:
Geändert von Corvin (09.03.2006 um 20:58 Uhr). |
|
|
|
|
|
Nach oben #2 |
|
Erfahrener Benutzer
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 443
|
7. loadLanguage() - Sprachdateien laden
Die Methode loadLanguage() ist ein wenig komplexer: PHP-Code:
PHP-Code:
Um im Template nun zum Beispiel auf die Sprachvariable START ($lang['start']) zuzugreifen musst du folgendes schreiben: Code:
{L_START}
Um die Sprachvariablen im Template mit dem richtigem Text zu ersetzen, ruft loadLanguage() die Methode replaceLanguage() auf. PHP-Code:
Die Methode replaceFuntions() dient dazu, die Template-Includes und speziellen Template-Kommentare zu ersetzen. Ein Template Include sieht wiefolgt aus: Code:
{include file="othertemplate.tpl"}
Ein Template-Kommentar sieht so aus: Code:
{* Hier steht der Kommentar *}
Die Methode: PHP-Code:
10. out() - Das fertige Template ausgeben Und als letztes wird die Methode out() aufgerufen, um das fertige Template (in dem alles ersetzt wurde etc.) auszugeben: PHP-Code:
PHP-Code:
Geändert von Corvin (09.03.2006 um 20:58 Uhr). |
|
|
|
|
|
Nach oben #3 |
|
Erfahrener Benutzer
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 443
|
11. Die komplette Template-Klasse
Und hier nochmal das komplette Templatesystem: PHP-Code:
13. Beispiel Und hier noch mal ein Beispiel. Lege folgende Verzeichnisse an: templates für die Templates, language für die Sprachdateien und language/de für die deutschen Sprachdateien. In dem Ordner templates legst du nun eine Datei namens index.tpl mit folgendem Inhalt an: HTML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"> <head> <title>Mein Templatesystem:: {$title}</title> <meta http-equiv="Content-Type" content="text/xhtml; charset=ISO-8859-1" /> </head> <body> <h1>{L_START}</h1> Hallo {$name}. Der Aktuelle Timestamp lautet: {$time} {* Ein Template einbinden *} {include file="othertemplate.tpl"} </body> </html> HTML-Code:
<p>Das ist der Inhalt des eingebundenen Templates... </p> Im Ordner language/de legst du nun eine Datei namens lang_main.php an. Sieht soll folgenden Inhalt haben: PHP-Code:
Und jetzt noch die PHP-Datei: PHP-Code:
12. Abschließende Überlegungen Das hier "zusammengebaute" Templatesystem ist schon sehr komfortabel und umfasst einige hilfreiche Funktionen. Doch trotzdem sind für einige Zwecke weitere Funktionen nötig, zum Beispiel das Ausgeben von Arrays (welches Daten aus einer Datenbank enthalten könnte) oder das Cachen von bestimmten Seiten. Ich bin hier bewusst nicht weiter auf solche speziellen Funktionalitäten eingegangen, weil dies nicht Sinn eines Tutorials ist. Der Lerneffekt ist viel größer, wenn du dich nun ransetzt und versuchst, selbst einige Funktionen zu implementieren. Wenn du mal an einer Stelle nicht weiter kommst, sind wir dir hier im Forum gerne behilflich. Und noch kurz eine Anmerkung: Ich hoffe der Vergleich am Anfang mit Smarty ist nicht falsch rübergekommen, Smarty ist ein super Templatesystem, das will ich nicht bestreiten, doch meistens hat der Einsatz von Smarty einfach zu viel Overhead. So... das wars erstmal, jetzt wünsche ich dir viel Spaß beim Arbeiten mit dem (hoffentlich von dir weiterentwickelten) Templatesystem. MfG Corvin Gröning Geändert von Corvin (09.03.2006 um 20:58 Uhr). |
|
|
|