Zum Inhalt springen

„Smarty“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
belege fehlen; aktuelle version per http://www.smarty.net/
Zeile 1: Zeile 1:
{{Belege}}
{{Infobox Software
{{Infobox Software
| Screenshot =
| Screenshot =
| Beschreibung =
| Beschreibung =
| Hersteller = Monte Ohrt, Messju Mohr
| Hersteller = Monte Ohrt, Messju Mohr
| AktuelleVersion = 3.1.21
| AktuelleVersion = 3.1.27
| AktuelleVersionFreigabeDatum = 18. Oktober 2014
| AktuelleVersionFreigabeDatum = 19. Juni 2015
<!-- | AktuelleVorabVersion = 3.1 RC1
| AktuelleVorabVersionFreigabeDatum = 27. Juni 2011 -->
| Betriebssystem = [[plattformunabhängig]]
| Betriebssystem = [[plattformunabhängig]]
| Programmiersprache = [[PHP]]
| Programmiersprache = [[PHP]]

Version vom 2. Juli 2015, 12:37 Uhr

Smarty
Basisdaten

Entwickler Monte Ohrt, Messju Mohr
Erscheinungsjahr 2001[1], 2002
Aktuelle Version 3.1.27
(19. Juni 2015)
Betriebssystem plattformunabhängig
Programmier­sprache PHP
Lizenz LGPL (Freie Software)
deutschsprachig ja
www.smarty.net

Smarty ist eine freie (unter der LGPL veröffentlichte) Template Engine, die als 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 aber jedes textbasierte Dateiformat, zum Beispiel auch XML.

Konzept

Der Hersteller bezeichnet Smarty als „Template/Presentation Framework“. Es soll umfangreiche Hilfsmittel zum Lösen vieler Probleme im Umfeld der „Präsentationsschicht“ (XHTML-Ausgabe) von Web-Applikationen zur Verfügung stellen. Mit diesem Konzept erweiterte Smarty wie viele andere Hersteller auch die Funktionen eines regulären Template-Engine-Systems.

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 sinnvoll, diese beiden Komponenten bereits im Entwicklungsprozess zu trennen. Zu diesem Zweck wird die Entwicklung aufgeteilt in Anwendungslogik verarbeitende PHP-Dateien, sowie in Templates, die das Grundgerüst der Ausgabe beinhalten und 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.

Um in den Templates eine gewisse Steuerbarkeit zu ermöglichen, erkennt Smarty neben den Templatevariablen einige einfache Steuerbefehle, die 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 beschleunigt.

Als quelloffene Programmbibliothek kann Smarty beliebig erweitert und angepasst werden.

Leistung

Technische Leistung

Smarty verarbeitet die Daten und Templates in zwei Schritten. Dadurch wird die Verarbeitung stark beschleunigt.

  • Zunächst wird aus PHP- und XHTML-Code automatisch eine neue PHP-Datei generiert, die sowohl XHTML als auch PHP enthalten kann. 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. Das bedeutet, dass der Webserver praktisch bei einem Zugriff eine statische XHTML-Seite liefert, was besonders bei Datenbankzugriffen in PHP eine beträchtliche Entlastung des Servers und der Datenbank zur Folge haben kann. Nach einer Aktualisierung der Datenbank muss der Cache gelöscht werden. Da Datenbanken in vielen Fällen sehr viel öfter abgefragt als verändert werden, ist dies ein Vorteil.

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).

Entwicklungsgeschwindigkeit

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 Entwicklungsgeschwindigkeit gegenüber anderen Lösungen sogar sinken.

Smarty in der Praxis

Smarty lässt sich in PHP folgendermaßen 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 Standardbegrenzer für Smarty sind { und }. Es hat sich jedoch in der Praxis als empfehlenswert herausgestellt, andere Begrenzer 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.

Geschichte

Mit der Intention, eine vereinfachte Form von PHP für Designer zu erschaffen, erstellten die Entwickler Monte Orth und Andrei Zmievski 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. Das Projekt wurde jedoch aus verschiedenen Gründen nicht in den PHP Kern integriert. Grund dafür waren technische Schwierigkeiten, eine unklare Spezifikation über den Leistungsumfang sowie die Tatsache, dass im PHP-Kern selbst eine alternative Syntax für Templates integriert wurde.

Durch die Ablehnung des Projekts 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 werden musste, 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.

Viele bekannte Projekte setzen heute auf Smarty, etwa das Framework Zikula, das Weblog Serendipity oder die Forensoftware WoltLab Burning Board, welche auf eine eigene, Smarty-ähnliche Template Engine setzt.

Vorteile einer eigenen Template-Syntax

Vom Hersteller werden folgende Vorteile durch eine eigene Template-Engine angegeben:

  • 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.

Nachteile und Kritik

PHP wurde bereits selbst als Template-Engine entworfen: Es ist ohne erweiternde Softwarebibliotheken möglich, Textausgabe mit Variablen („Platzhaltern“) effizient und übersichtlich durchzuführen. Die Einführung einer eigenen Sprachsyntax wie bei Smarty ist deshalb nicht zwingend notwendig.

Nachteile der Syntax sind:

  • Erhöhte Einarbeitungszeit für den Entwickler
  • Verringerte Performance gegenüber einer PHP-nativen Ausgabe
  • Allein durch die neue Sprachsyntax wird noch kein MVC-Prinzip umgesetzt, dafür ist zusätzlicher Aufwand erforderlich.
  • Eine Webseite kann trotz Smarty-Einbindung fehlerhaft ausgegeben werden
  • IDE-eigene Syntaxhervorhebungen greifen bei der Smarty-Syntax nicht – hier müssten Erweiterungen installiert werden
  • Smarty bot bis zur Version 3[2] keine Möglichkeit, eine Ausgabe rekursiv zu veranlassen[3]

Literatur

  • Joao Prado Maia, Hasin Hayder, Lucian Gheorghe: Smarty PHP Template Programming and Applications. Packt Publishing, April 2006, ISBN 1-904811-40-X (englisch)
  • Thomas Frietsch: Realisierung einer PHP-Anwendung mit der Template-Engine Smarty. GRIN Verlag, März 2010, ISBN 3-640-57035-9 (deutsch)

Einzelnachweise

  1. web.archive.org.
  2. Example 7.43. Recursive menu {function} example Beispiel zur Rekursion (englisch)
  3. Kritik an Template-Engines in PHP