Smarty

Aus php bar
Wechseln zu: Navigation, Suche

Smarty ist eine Open-Source Template-Engine für PHP.

Einer der einzigartigen Aspekte von Smarty ist seine hohe Geschwindigkeit. Diese wird erreicht indem die Vorlagen-Dateien eingelesen und daraus neue PHP-Scripte generiert werden. Diese temporären PHP-Scripte werden bei einem Seitenaufruf direkt von PHP geparst und dann an den Client geschickt. Dadurch entfällt das Rechen-intensive Neuparsen der Vorlagen bei jedem Seitenaufruf. Durch die temporären PHP-Scripte kann man bei Smarty auch von Compiler-Cache Lösungen profitieren.

Bei Bedarf kann Smarty auch den endgültigen HTML-Output zwischenspeichern. Das bedeutet, das der Webserver praktisch bei einem Zugriff eine statische HTML-Seite liefert, was besonders bei Datenbankzugriffen in PHP eine massive Entlastung des Servers bedeutet.

Mechanismus

Wie funktionieren Vorlagen?

Angenommen wir möchten in PHP Daten ausgeben. Ohne Trennung von PHP- und HTML-Code könnte das beispielsweise so aussehen:

1 


Mit Smarty lassen sich PHP und HTML trennen, indem in HTML-Code Platzhalter vorgesehen sind, in die PHP dann per Smarty die Daten einfügt.

Das obige Beispiel würde mit Smarty dann so aussehen:

PHP-Code:

1 // Smarty-Objekt erzeugen
2 // Wert in Platzhalter einfügen
3 'vorname', $vorname);
4 // HTML-Output
5 $template->display('vorlage.tpl');


vorlage.tpl:

1 <table>
2   <tr>
3     <td>Vorname: {$vorname|escape:'html'}</td>
4   </tr>
5 </table>


Schon bei diesem Beispiel sieht man, dass die Übersichtlichkeit enorm verbessert wird, da man sich in der PHP-Applikation auf den eigentlichen Code konzentrieren kann, und dieser nicht im HTML-Code verstreut liegt. Umgekehrt tut sich ein Webdesigner leichter, der mit dem PHP-Code eigentlich nichts zu tun haben will, sondern guten HTML-Code schreiben will.

Weitere Funktionalität

In der Praxis benötigt man jedoch weitere Möglichkeiten, wenn man PHP und HTML wirklich trennen will. Deshalb bietet Smarty zahlreiche Funktionen, mit denen auch komplexere Daten (Arrays, etc.) auf beliebige Art dargestellt werden können. Eine PlugIn-Schnittstelle bietet dem Programmierer die Möglichkeit, die Funktionalität von Smarty zu erweitern.

Beispiel: Vorlagen-Code zur formatierten Ausgabe eines Arrays $list:

1 span class="st0">'html'

(die Funktion nl2br fügt vor jeden Zeilenumbruch ein <br /> ein)

Geschwindigkeit

Smarty verarbeitet die Daten und Vorlagen in zwei Schritten, was die Geschwindigkeit massiv steigert:

  • zunächst wird aus PHP- und HTML-Code automatisch und für den Programmierer transparent eine neue PHP-Datei generiert, die sowohl HTML als auch PHP enthält - also das, was ein Programmierer ohne Vorlagen sonst selbst machen würde. Nur wenn sich eine Datei ändert, wird diese temporäre PHP-Datei aktualisiert. Dadurch braucht die Vorlage nicht bei jedem Seitenaufruf neu erstellt zu werden.
  • Bei Bedarf kann Smarty auch den endgültigen HTML-Output zwischenspeichern. Das bedeutet, dass der Webserver praktisch bei einem Zugriff eine statische HTML-Seite liefert, was besonders bei Datenbankzugriffen in PHP eine massive Entlastung des Servers bedeutet. Der Programmierer hat in dem Fall nur zu beachten, dass nach Aktualisierung der Datenbank der Cache gelöscht wird, gerade bei Webanwendungen kommen Datenbankaktualisierungen in der Regel meist viel seltener vor als Datenbankabfragen.

Vorteile

Die Vorteile von Smarty liegen darin, dass statische und dynamische Inhalte einfach gemischt werden können wobei der Code nur die benötigten Daten an die Template-Engine weitergeben muss.

Es erfolgt eine komplette Trennung zwischen dem Code welcher die Daten bereitstellt und der Darstellung welche über Smarty erzeugt wird. Dadurch kann die Darstellung komplett verändert werden ohne, dass der Code angepasst werden muss.

Smarty ist sehr einfach durch eigene Plugins zu erweitern welche spezielle Funktionalitäten bereitstellen.

Viele Standardaufgaben, wie z. B. das Erstellen von Select-Boxen oder Filtern von Zeichenketten, können einfacher erledigt werden.

Kritik

Kritisiert wird u.a. das Smarty nur geringe Vorteile bietet dafür, dass PHP bereits eine Template-Engine ist und durch die Nutzung von Smarty die Lernkurve steigt, die Komplexität zunimmt und die Geschwindigkeit leidet.

Smarty bietet keine Trennung von Logik zur Darstellung wie dies oft dargestellt worden ist, sondern nur ein effizientes Mischen von statischen und dynamischen Inhalten.

Ein weiterer Kritikpunkt ist die mangelhafte Unterstützung der OOP-Features von PHP 5 wie z.B. Method chaining

Weblinks