Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Infothek - die große Wissensdatenbank > Die Infothek > 5. Internet & Kommunikation > a.) Die eigene Homepage

a.) Die eigene Homepage Tipps zur Gestaltung, kostenloser Webspace uvm.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26644, Antworten: 4195
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 71, Antworten: 6
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7537, Antworten: 175
Gehe zum ersten neuen Beitrag Gibts denn nichts neues?
Aufrufe: 863, Antworten: 46
Gehe zum ersten neuen Beitrag Rechner fährt herunter,...
Aufrufe: 99, Antworten: 5
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50864, Antworten: 1390
Gehe zum ersten neuen Beitrag Windows Oberfläche (Schrift,...
Aufrufe: 180, Antworten: 10
Gehe zum ersten neuen Beitrag TabCtrl
Aufrufe: 125, Antworten: 12
Gehe zum ersten neuen Beitrag Dateien lassen sich nicht...
Aufrufe: 25, Antworten: 2
Gehe zum ersten neuen Beitrag Suche Programm um Werbung zu...
Aufrufe: 55, Antworten: 2
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14.11.2008, 13:36   #1 (Direktlink)
Moderator
 
Benutzerbild von Paule
 
Registriert seit: 27.10.2008
Beiträge: 4.434
Standard PHP: Template-Engines

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&auml;stebuch</title></head>
<body>
<div>G&auml;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>
Natürlich hätte man hier auch alles sammt HTML-Code mit echo innerhalb der While-Schleife ausgeben können. Sicher hätte man den php-Abschnitt erst nach
Code:
 <html>
<head><title>G&auml;stebuch</title></head>
<body>
begonnen.
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>
Die Schreibweise {VARIABLE} hat sich vor allem durch die Systeme phpBB (System, auf dem dieses Forum basiert) und Smarty, eine umfangreiche Template-Engine, die ich später noch ausführlicher erwähnen werde, durchgesetzt. Man könnte auch eine beliebige andere Schreibweise vereinbaren, beispielsweise $Variable, wie in PHP. Wichtig ist nur, dass die PHP-Datei, zu der das Template-File gehört, später erkennt welche Platzhalter sie durch richtige Werte ersetzen muss.
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>
Template-File:
Code:
<html>
<head><title><php></title></head>
<body>
Heute ist der <php>
</body>
</html>
PHP und HTML sind dann auch getrennt. Die Variablen werden direkt eingelesen und PHP muss nicht erst umständlich das ganze Template-File nach Platzhaltern durchsuchen und die jeweiligen Werte zuordnen, was auch Zeit kostet. Das bisschen <php> stört nicht wirklich!

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
Paule ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Infothek - die große Wissensdatenbank > Die Infothek > 5. Internet & Kommunikation > a.) Die eigene Homepage

Lesezeichen
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ä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



Alle Zeitangaben in WEZ +2. Es ist jetzt 08:57 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2