Smarty Template Engine

Smarty Template Engine
Smarty
Entwickler: Monte Ohrt, Andrei Zmievski
Aktuelle Version: 2.6.22
(17. Dezember 2008)
Betriebssystem: plattformunabhängig
Programmiersprache: PHP
Lizenz: LGPL
Deutschsprachig: ja
www.smarty.net

Smarty ist eine quelloffene Template Engine, die als (LGPL) PHP-Bibliothek vorliegt. Sie wurde mit dem Ziel entworfen, bei der Entwicklung von Webapplikationen die Trennung von Code und Ausgabe zu ermöglichen. Die Ausgabe erfolgt meist in HTML, möglich ist jedes textbasierte Dateiformat, zum Beispiel auch XML.

Inhaltsverzeichnis

Geschichte

Mit der Intention, eine Art „Basic-PHP“ für Designer zu erschaffen, erstellten die Entwickler Monte Orth und Andrei Zmievski gegen Ende des Jahres 1999 die Spezifikation für eine Template-Engine, welche anschließend in der Hoffnung, dass sie Eingang in PHP finden würde, in C programmiert wurde.

Nachdem jedoch verschiedene technische Schwierigkeiten und eine hitzige Diskussion über die Frage, was eine Template-Engine können sollte und was nicht, eine Implementierung von Smarty in PHP verhinderten, entschlossen sich die Programmierer, das Template-System als eine Klasse für PHP zu veröffentlichen und dessen Funktionalität auf diesem Weg zur Verfügung zu stellen. Es entstand die Klasse SmartTemplate, bei der zum Parsen reguläre Ausdrücke verwendet wurden. Diese wurde jedoch nie veröffentlicht.

Da der Inhalt einer Seite jedoch bei jedem Aufruf geparst wurde, entstand ein großer Overhead. Um diesen Effekt zu vermindern, wurde Smarty mit der Erstveröffentlichung am 18. Januar 2001 um eine Vorkompilierung der Dateien (Caching) ergänzt.

Was ist Smarty?

Der Hersteller bezeichnet Smarty als „Template/Presentation Framework“. Es soll umfangreiche Hilfsmittel zum Lösen vieler Probleme im Umfeld der „Präsentation“ (XHTML-Ausgabe) von Web-Applikation zur Verfügung stellen. Ursprünglich entworfen wurde es jedoch als reine Template Engine, also ein System, das innerhalb von Texten (Text-Dateien) bestimmte Platzhalter durch dynamische Inhalte ersetzt.

Die Entwickler von Smarty gehen im Grundsatz davon aus, dass das reine Layout einer Webapplikation von einem „Template-Designer“ entworfen und in HTML (als Template) umgesetzt wird, während die eigentlichen Prozesse und Datenverarbeitungsroutinen von einem Programmierer in PHP entwickelt werden. Es erscheint deshalb logisch, diese beiden Komponenten bereits im Entwicklungsprozess zu trennen.

Zu diesem Zweck wird die Entwicklung aufgeteilt in PHP-Dateien, die Verarbeitungsprozesse ausführen, und in Templates, die als eigene Dateien in einem eigenen Format vorliegen. Bei diesen Template-Dateien handelt es sich im wesentlichen um HTML-Dateien mit mehr- oder weniger komplexen Platzhaltern, die später durch dynamische Inhalte ersetzt werden.

Vom Hersteller werden folgende Vorteile durch diese Art der Trennung genannt:

  • die Designer können im Programmcode keine Fehler oder Sicherheitsprobleme verursachen, da sie mit dem Programmcode nicht in Berührung kommen. Fehler innerhalb der Smarty-Syntax werden von Smarty abgefangen.
  • die Designer können das Layout verändern, ohne einen Programmierer dafür zu benötigen.
  • die Programmierer müssen sich nicht um die Präsentation ihrer Daten kümmern.
  • die Templates sind sehr nahe an der tatsächlichen Ausgabe, das heißt sie enthalten in vielen Fällen bereits große Teile der letztendlichen XHTML-Seite.

Um in den Templates eine gewisse Steuerbarkeit zu ermöglichen, erkennt Smarty neben den Templatevariablen einige einfache Steuerbefehle, die stark an die PHP-Syntax angelehnt wurden und die Formulierung von Bedingungen (if) oder Schleifen (foreach) erlauben.

Smarty wurde für den professionellen Einsatz optimiert und enthält eine Art Compiler, der die Ausgabe der Smarty-Templates vorbereitet und in einem Cache speichert. Dadurch wird die Ausgabe stark beschleunigt.

Als quelloffene Programmbibliothek kann Smarty beliebig erweitert und angepasst werden.

Performance

Technische Performance

Smarty verarbeitet die Daten und Templates in zwei Schritten, was die Verarbeitung stark beschleunigt:

  • Zunächst wird aus PHP- und XHTML-Code automatisch und für den Programmierer transparent eine neue PHP-Datei generiert, die sowohl XHTML als auch PHP enthält – also das, was ein Programmierer ohne Templates sonst selbst machen würde. Nur dann, wenn sich eine PHP-Datei ändert, wird die temporäre PHP-Datei aktualisiert. Dadurch muss das Template nicht bei jedem Seitenaufruf neu geparst werden.
  • Bei Bedarf kann Smarty die endgültige XHTML-Ausgabe zwischenspeichern (englisch cachen). Das bedeutet, dass der Webserver praktisch bei einem Zugriff eine statische XHTML-Seite liefert, was besonders bei Datenbankzugriffen in PHP eine massive Entlastung des Servers und der Datenbank zur Folge hat. Der Programmierer muss nur darauf achten, dass nach einer Aktualisierung der Datenbank der Cache gelöscht wird. Da Datenbanken in vielen Fällen sehr viel öfter abgefragt als verändert werden, ist dies als besonderer Vorteil zu betrachten.

Aus dem ersten Punkt ergibt sich jedoch, dass eine Smarty-basierte Ausgabe niemals schneller sein kann als eine reine PHP-Ausgabe, selbst im optimalen Fall (ohne Schleifen und im Cache-Modus).

Entwicklungs-Performance

Die Entwicklungsgeschwindigkeit von Projekten, die Smarty (oder allgemein Templatesysteme) verwenden, kann deutlich über der reiner PHP-Lösungen liegen. Dies ist insbesondere dann der Fall, wenn sich Programmierer und Designer bei großen Projekten in die Quere kommen, was Bearbeitungsengpässe zur Folge haben kann. Dann ermöglicht eine saubere Trennung von Code und Templates eine Arbeitsteilung, die sich in der Regel produktivitätssteigernd auf das Gesamtprojekt auswirkt.

Ob mit Smarty gegenüber anerkannten Entwicklungsmethoden zur Modularisierung von Software bessere Ergebnisse erzielt werden können, erscheint fraglich. Durch die zusätzliche Einarbeitungszeit in die Smarty-eigene Sprachsyntax kann die Entwicklungs-Performance gegenüber anderen Lösungen sogar sinken.

Smarty in der Praxis

Smarty lässt sich in PHP sehr einfach einbinden:

<?php
require_once('/smarty/libs/Smarty.class.php');
$my_smarty = new Smarty();
$my_smarty->security        = true;
$my_smarty->secure_dir      = '/templates';
$my_smarty->compile_dir     = '/smarty_cache';
$my_smarty->left_delimiter  = '{..';
$my_smarty->right_delimiter = '..}';
$my_smarty->debugging       = false;
?>

Nachdem ein Objekt angelegt wurde, müssen die Verzeichnisse für die Templates und den Cache angegeben werden. Der Code, der an die Templates übergeben werden soll, muss zuvor registriert werden:

<?php
$my_smarty->assign('name', $name);
$my_smarty->assign('first_name', $first_name);
?>

Die Smarty-Templates selbst sind einfache XHTML-Dateien, die an den gewünschten Stellen die Smarty-Variablen und ggfs. Smarty-Steuerungscode (insbesondere Schleifenlogik) enthalten können.

Das folgende Beispiel demonstriert ein Smarty-Template ohne Steuerungslogik. Die Standardbezeichner für Smarty sind { und }. Es hat sich jedoch in der Praxis als empfehlenswert herausgestellt, andere Bezeichner zu verwenden (siehe erstes PHP-Beispiel), da die geschweiften Klammern mit evtl. eingebettetem JavaScript kollidieren könnten.

Name: {.. $name ..}
Vorname: {.. $first_name ..}

Dieses Problem lässt sich jedoch umgehen, indem das JavaScript mit {literal}-Tags maskiert wird.

Zusätzliche Komplexität durch eigene Sprachsyntax

PHP wurde bereits als „Template-Engine“ entworfen. Die Einführung einer eigenen Sprachsyntax bringt Vor- und Nachteile mit sich.

Vorteile dieser eigenen Syntax können sein:

  • Leichtere Syntax für den Bearbeiter der Templates
  • Weniger erfahrene beziehungsweise vertrauenswürdige Personen können mit der Gestaltung des Layouts betraut werden, ohne die Sicherheit des Systems zu gefährden (etwa in Online-Communities)

Der letzte Punkt allerdings trifft bei Smarty insofern nicht zu, als dass auch nativer PHP-Code in die Templates eingebunden werden kann.

Nachteile dieser eigenen Syntax sind:

  • Erhöhte Einarbeitungszeit (Lernkurve) für den Entwickler
  • Schlechtere Performance als eine Ausgabe, die nur über PHP gemacht wird

Anwendungsbeispiele

Folgende Projekte nutzen Smarty:

Literatur

Obwohl Smarty bereits in vielen Projekten eingesetzt wird, gibt es dazu bislang nur wenig Literatur:

  • Joao Prado Maia, Hasin Hayder, Lucian Gheorghe: Smarty PHP Template Programming and Applications. Packt Publishing, April 2006, ISBN 1-904-81140-X (englisch)

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Template engine (web) — A (web) template engine is software that is designed to process web templates and content information to produce output web documents. It runs in the context of a template system.pecific types of template engines Template engine is ordinarily… …   Wikipedia

  • Template Engine — Dieser Artikel wurde aufgrund von inhaltlichen Mängeln auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf… …   Deutsch Wikipedia

  • Chip Template Engine — Infobox Software name = Chip Template Engine developer = Mike A. Leonetti latest release version = 0.31 latest release date = 16th August 2006 genre = Template engine license = LGPL website = [http://code.divineaspirations.net/chip… …   Wikipedia

  • Jinja (Template engine) — Jinja is a template engine for the Python programming language. It s similar to the Django template engine but provides python like expressions while ensuring that the templates are evaluated in a sandbox. It s a text based template language thus …   Wikipedia

  • Smarty — Entwickler Monte Ohrt, Messju Mohr Aktuelle Version 3.1.4 (19. Oktober 2011) Betriebssystem plattformunabhängig Programmier­sprache PHP …   Deutsch Wikipedia

  • Smarty — Infobox Software name = Smarty Templates developer = Monte Ohrt, Messju Mohr latest release version = 2.6.20 latest release date = 15th Aug 2008 genre = Template Engine license = LGPL website = [http://www.smarty.net/ www.smarty.net] Smarty is a… …   Wikipedia

  • Template processor — A template processor (also known as a template engine or a template parser )is software or a software component that is designed to combine one or more templates with a data model to produceone or more result documents.cite book last = Niemeyer… …   Wikipedia

  • Open Power Template — (OPT) Developer(s) Invenzzia Group Stable release 2.0.6 / September 3, 2010; 13 months ago (2010 09 03) Preview release 2.1 beta1 / September 3, 2010; 13 months ago …   Wikipedia

  • Serendipity (weblog software) — Infobox Software name = Serendipity caption = Serendipity s official blog developer = Serendipity Developer Team latest release version = 1.3 latest release date = 18 March 2008 operating system = genre = content management system license = BSD… …   Wikipedia

  • Xt-Commerce — xt:Commerce ist ein auf osCommerce aufbauendes und unter der GNU General Public License stehendes Onlineshop System. xt:Commerce Entwickler: xt:Commerce GmbH Aktuelle Version: v3.0.4 SP 2.1; Veyton 4.0 (nicht mehr unter GPL Lizenz) Betriebssystem …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”