![]() |
Anzeige:
|
|
|||||||
| a.) Die eigene Homepage Tipps zur Gestaltung, kostenloser Webspace uvm. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Moderator
Registriert seit: 27.10.2008
Beiträge: 4.434
|
Autor: Eckard41
PHP: Template-Engines Was ist eine Template-Engine? Um diese Frage zu beantworten, muss man zunächst die Methoden kennen, die es ermöglichen, eine Website mit PHP dynamisch zu gestalten. "Dynamische Website" bedeutet ja nichts anderes als HTML-Code, der sich selbstständig bestimmten Umständen anpasst. Allerdings gibt es bei Websites immer auch Abschnitte die statisch bleiben. Betrachtet man beispielsweise ein einfaches Gästebuch, fällt auf, dass nur Daten wie Name und Email-Adresse des Autors und die eigentliche Nachricht, sowie evtl. Datum und die Gesamtzahl der Einträge "dynamisch" sein müssen. Das Design drumherum bleibt wohl in den meisten Fällen gleich. Stark vereinfacht könnte das so aussehen: Code:
<html>
<head><title>Gästebuch</title></head>
<body>
<div>Gästebuch<hr></div>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<php>
<tr>
<td>Eintrag Nr. <php><br>
Geschrieben am <php> um <php> Uhr <br>
von <php>.
</td>
</tr>
<tr>
<td>Nachricht:<br><php></td>
</tr>
<php>
</table>
<br /><div style="z-index:3" class="smallfont" align="center">Search Engine Optimization by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.2.0</div></body>
</html>
Code:
<html> <head><title>Gästebuch</title></head> <body> Worauf ich aber hinaus will ist, dass hier PHP in HTML eingebunden wird. Dagegen spricht auch nichts. PHP und HTML befinden sich in der selben Datei. Für dieses Script ist das sicher sinnvoll und der Code ist noch überschaubar. Doch bei mittleren und größeren Projekten ist es manchmal besser die Applikationslogik von der Präsentationslogik zu trennen. Vereinfacht: PHP-Code in einer Datei, zugehöriger HTML-Code (oder genauer Formatierungsvorlage) in einer anderen. Das macht ein Projekt übersichtlich und leicht zu warten. Arbeiten PHP-Programmierer und Designer daran, kann sich jeder auf seinen Teil konzentrieren. Das ist die Hauptaufgabe einer Template-Engine. Funktionsweise einer Template-Engine Wie funktioniert das nun genau, PHP von HTML loszureisen (..oder eher umgekehrt???) ? Zuerst braucht man 2 Dateien: Die reine PHP-Datei und ein Template-File. Letzteres enthält den gesamten HTML-Aufbau der Seite. Man kann wie gewohnt mit dem HTML-Grundgerüst beginnen. Für alle Stellen, die später dynamisch sein müssen setzt man Platzhalter, Template-Variablen, ein. Ein Beispiel: Code:
<html>
<head><title>{SEITENNAME}</title></head>
<body>
Sie sind der {BESUCHERZAHL}. Besucher!
</body>
</html>
Nun zur PHP-Seite: PHP muss nun das Template-File nach Template-Variablen durchsuchen und sie durch entsprechende Variablen oder Werte in PHP ersetzen. Diese könnten z.B. aus einer Datenbank kommen, oder einfach Benutzereingaben darstellen. Dazu kann man natürlich eine Template-Klasse erstellen und diese in jeder PHP-Datei verwenden. Nochmal zusammengefasst: Beim Aufruf einer PHP-Datei werden wie gewöhnlich Daten aus der DB geholt und eingetragen. Statt die Daten direkt mit echo auszugeben werden sie in eine Formatvorlage gepresst, die zunächst Platzhalter enthält und später, gefüllt mit Werten, genau wie eine normale HTML-Datei an den Browser geschickt wird. Platzhalter, die durch richtige Werte ersetzt werden müssen? Das ist ja alles schrecklich umständlich! So gesehen ist PHP doch schon eine Template-Engine! Um Applikationslogik von Präsentationslogik zu trennen genügt doch etwas in dieser Art: PHP-Datei: Code:
<php> Code:
<html> <head><title><php></title></head> <body> Heute ist der <php> </body> </html> Das stimmt natürlich. Für den Zweck der Trennung reicht das völlig aus und ist sogar schneller. Auch das wäre ein Beispiel für eine -wenn auch sehr einfache- Template-Engine. Aber: Einige Template-Engines mit dem Platzhalterverfahren, wie z.B. Smarty, können noch viel mehr leisten, nämlich Caching... Caching Smarty bietet die Möglichkeit Dateien zu cachen, d.h. eine statische Kopie einer bereits aufgerufenen Seite zu erstellen und in einem Cache-Verzeichnis abzulegen. Wird diese Seite nochmals aufgerufen, liefert der Server einfach die Kopie an den Browser und der gesamte Code, der Daten aus der DB holt, diese verarbeitet und ausgibt wird eingespart. Das ist ein enormer Performancegewinn, der den möglichen Verlust beim Einlesen und Ersetzen der Variablen im Temlate-File (Parsen) mehr als wettmacht. ![]() Die in der Grafik rot dargestellten Schritte werden beim Caching eingespart. Da bleibt aber noch ein gewaltiger Nachteil: Gecachte Dateien sind nicht aktuell. In vielen Fällen müssen sie das auch gar nicht sein. Jedenfalls nicht auf die Sekunde aktuell. Beispiel: Newssystem. Oft reicht es wenn der Inhalt nur jede Stunde oder sogar jeden Tag aktualisiert wird. Smarty stellt eine Funktion zur Verfügung, die einen Zeitraum angibt, nachdem eine Datei erneut generiert werden soll. Man kann außerdem für jede Datei einen Caching-Status angeben (is_cached true oder false). Gibt ein Benutzer über den Administrationsbereich News ein, wird der Status is_cached auf false gesetzt. Beim nächsten Aufruf wird deshalb die Seite neu generiert, ist aktuell und wird erneut im Cache abgelegt. Wann ist welche Template-Engine sinnvoll? Sinnvoll ist eine Template-Engine erst bei mittleren bis großen Projekten. Geht es nur um die Trennung von Applikations- und Präsentationslogik (z.B. aus Gründen der Übersichtlichkeit oder aus panischer Angst vor Designern, die sich am PHP-Code versuchen), reicht eine simple Template-Engine wie die oben beschriebene. Nützlich auch, wenn des öfteren das Design einer Website wechselt oder mehrere Designs (Skins) zur Auswahl gestellt werden sollen. Auch "mehrsprachige" Seiten lassen sich mit einer Template-Engine relativ leicht realisieren. Bei einem Content Management System ist eine Caching-Funktion auf jeden Fall nützlich. Für ein reines Forensystem kommt Caching dagegen nicht in Frage. Umfangreiche Systeme wie Smarty bieten Funktionen wie Iterationen, if-Abfragen und auch zahlreiche Formatierungen für einzelne Template-Variablen. Das ist sehr komfortabel und wirklich alles was annähernd mit der Präsentationslogik zu tun hat wird ins Template ausgelagert. Bevor man aber mit Smarty loslegen kann müssen erst einige Seiten Smarty-Referenz überstanden werden. Wie die meisten größeren Systeme hat es eine eigene Syntax. Einige interessante Links: Template-Engines im Vergleich Smarty-Referenz smarty.php.net Smarty - die kompilierende Template-Engine Weitere Template-Engines |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Wordpress-Template gesucht | register | Homepagegestaltung | 1 | 26.07.2008 21:48 |
| Joomla Template erstellen | K. R. Eyden | Sonstige Programmiersprachen | 0 | 20.04.2007 17:50 |
| Wie frames in Template einbringen ??? | Shakisi | Homepagegestaltung | 5 | 11.03.2007 21:37 |
| Template | Darkboy250 | Homepagegestaltung | 0 | 04.07.2006 11:40 |
| Suche Template | powerweb | Homepagegestaltung | 5 | 04.03.2006 14:53 |