Zum Inhalt springen

„Smarty“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[ungesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
unsinniger Wikilink auf einen Teilbegriff
Markierung: Manuelle Zurücksetzung
 
(258 dazwischenliegende Versionen von mehr als 100 Benutzern, die nicht angezeigt werden)
Zeile 1: Zeile 1:
{{Belege}}
'''Smarty''' ist eine [[OpenSource]] [[PHP]]-Bibliothek, die bei der Entwicklung von Webapplikationen die Trennung von Code und Ausgabe ermöglicht. Die Ausgabe ist dabei in der Regel [[HTML]], kann aber jedes textbasierte Dateiformat sein, also z.B. auch [[XML]].
{{Infobox Software
|Screenshot =
|Beschreibung =
|Hersteller = Monte Ohrt, Messju Mohr, Simon Wisselink
|AktuelleVersion = <!-- Wikidata -->
|AktuelleVersionFreigabeDatum =
|Betriebssystem = [[plattformunabhängig]]
|Programmiersprache = [[PHP]]
|Lizenz = [[GNU Lesser General Public License|LGPL]] ([[Freie Software]])
|Deutsch = ja
|Website = [https://smarty-php.github.io/smarty/stable/ https://smarty-php.github.io/smarty/stable/]
}}


'''Smarty''' ist eine [[Freie Software|freie]] (unter der [[GNU Lesser General Public License|LGPL]] veröffentlichte) [[Template-Engine]], die als [[PHP]]-[[Programmbibliothek|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 [[Hypertext Markup Language|HTML]], möglich ist aber jedes textbasierte Dateiformat, zum Beispiel auch [[Extensible Markup Language|XML]].
== Was ist Smarty? ==
Besonders PHP-Anfänger gewöhnen sich schnell an, Programmcode und Ausgabe in den PHP-Skripten zu vereinen. Daraus resultieren lange PHP-Dateien, welche viele Ausgabebefehle (echo oder printf) enthalten. Die Dateien werden unübersichtlich und schwer wartbar. Bei der Entwicklung von Webapplikationen empfiehlt es sich jedoch dringend, Code und Ausgabe (im weiteren Text nur noch als [[XHTML]] bezeichnet) strikt zu trennen. Insbesondere bei größeren Applikationen bietet diese Maßnahme viele Vorteile:


== Konzept ==
* Code und Layout können getrennt (d.h. auch von verschiedenen Personen) parallel entwickelt werden.
* Sowohl PHP- als auch XHTML-Code bleiben übersichtlich
* Einfache Wiederverwendbarkeit des Codes (z.B. braucht man für dieselbe Applikation mit einem anderen Layout oder Context nur den XHTML-Code zu ändern).


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.
Smarty ist eine OpenSource PHP-Bibliothek, die es ermöglicht, genau das einfach in PHP zu erreichen. Um auch in den Templates eine gewisse Dynamik zu realisieren, enthält Smarty selber eine kleine Skriptsprache, welche das Einbinden von Bedingungen ({if}) oder Schleifen ({foreach}) erlaubt.


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.
== Historisches ==


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 ([[Bedingte Anweisung und Verzweigung|<code>if</code>]]) oder Schleifen ([[Schleife (Programmierung)|<code>foreach</code>]]) erlauben.
Die Entwicklung an Smarty begann nach einiger Vorarbeit 2001. Die Entwickler sind Monte Ohrt und Andrei Zmievski.


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.
== Performance ==
Smarty verarbeitet die Daten und Templates in zwei Schritten, was die Performance massiv steigert:
* 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 wenn sich eine PHP-Datei ändert, wird die temporäre PHP-Datei aktualisiert. Dadurch braucht das Template nicht bei jedem Seitenaufruf neu geparst werden.
* Bei Bedarf kann Smarty auch die endgültige XHTML-Ausgabe zwischenspeichern ("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 bedeutet. Der Programmierer hat in dem Fall nur zu beachten, dass nach Aktualisierung der Datenbank der Cache gelöscht wird. Gerade bei Webapplikation kommen Datenbankaktualisierungen in der Regel meist viel seltener vor als Datenbankabfragen.


Als [[Open Source|quelloffene]] Programmbibliothek kann Smarty beliebig erweitert und angepasst werden.
Test!


== Weblink ==
== Syntax ==
Smarty lässt sich in PHP folgendermaßen einbinden:
*[http://smarty.php.net/ Smarty Web-Site]
<syntaxhighlight lang="php">
*[http://faq.phpbar.de/index.php/Smarty Smarty bei faq.phpbar.de]
<?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;
?>
</syntaxhighlight>
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:


<syntaxhighlight lang="php">
[[Kategorie:Freie Software]]
<?php
[[Kategorie:Softwareentwicklung]]
$my_smarty->assign('name', $name);
$my_smarty->assign('first_name', $first_name);
?>
</syntaxhighlight>


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.
[[en:Smarty]]

Das folgende Beispiel demonstriert ein Smarty-Template ohne [[Steuerungslogik]]. Die Standardbegrenzer für Smarty sind <code>{</code> und <code>}</code>. Es hatte sich zunächst 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.

<syntaxhighlight lang="html">
Name: {.. $name ..}
Vorname: {.. $first_name ..}
</syntaxhighlight>

Dieses Problem lässt sich jedoch umgehen, indem das JavaScript mit <code>{literal}</code>-Tags maskiert wird, oder Schweifklammern im JavaScript mit Leerzeichen umgeben werden<ref> https://www.smarty.net/docs/en/language.escaping.tpl</ref>.

== 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 (Programmiersprache)|C]] programmiert wurde. Das Projekt wurde jedoch 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 [[Parser|Parsen]] reguläre Ausdrücke verwendet wurden. Diese wurde jedoch nie veröffentlicht. Da der Inhalt einer Seite bei jedem Aufruf geparst werden musste, entstand ein großer [[Overhead (EDV)|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 Produkte setzen auf Smarty, etwa das Weblog [[Serendipity (Software)|Serendipity]]<ref>https://docs.s9y.org/docs/developers/themes.html</ref> oder die Shopsysteme [[Shopware]]<ref>https://developers.shopware.com/designers-guide/smarty/</ref> und JTL<ref>https://jtl-devguide.readthedocs.io/projects/jtl-shop/de/latest/shop_templates/tipps_tricks.html#javascript-in-templatedateien</ref>. Andere Projekte haben Smarty mittlerweile durch anderweitige Template-Engines ersetzt, beispielsweise migrierte das Framework [[Zikula]] auf [[Twig (Template-Engine)|Twig]]<ref> https://zikula.readthedocs.io/en/stable/CHANGELOG-1.4/</ref>. Wieder andere Projekte entwarfen eigene, von Smarty inspirierte Templatesprachen, wie die ehemals im Web sehr weit verbreitete Forensoftware [[WoltLab Burning Board]]<ref> https://docs.woltlab.com/view_templates.html</ref>.

Am 25. März 2024 wurde die Version Smarty 5.0<ref>{{Internetquelle |url=https://github.com/smarty-php/smarty/releases/tag/v5.0.0 |titel=Release v5.0.0 · smarty-php/smarty |sprache=en |abruf=2024-03-28}}</ref> veröffentlicht, in der PHP Funktionen nicht mehr automatisch benutzt werden können.

== Literatur ==
* {{Literatur | Autor=Joao Prado Maia, Hasin Hayder, Lucian Gheorghe | Titel=Smarty PHP Template Programming and Applications | ISBN=1-904811-40-X | Sprache=en | Datum=2006 | Verlag=Packt }}
* {{Literatur | Autor=George Schlossnagle | Titel=Smarty | Sammelwerk=Professionelle PHP 5-Programmierung | Seiten=136–149 | Verlag=Addison-Wesley | Ort=München | Datum=2006 | ISBN=978-3827323811 }}
* {{Literatur | Autor=Florence Maurice | Titel=Template-Engines am Beispiel von Smarty | Sammelwerk=PHP 5.3 + MySQL 5.1 - Der Einstieg in die Programmierung dynamischer Websites | Seiten=415–428 | Verlag=Addison-Wesley | Ort=München | Datum=2009 | ISBN=978-3827327239 }}

== Weblinks ==
* [https://www.smarty.net/ Offizielle Website]
* [https://smarty-php.github.io/smarty/stable/ Dokumentation]

== Einzelnachweise ==
<references />

[[Kategorie:Freies Programmierwerkzeug]]
[[Kategorie:PHP-Bibliothek]]
[[Kategorie:Templatesprache]]

Aktuelle Version vom 22. Februar 2025, 15:31 Uhr

Smarty
Basisdaten

Entwickler Monte Ohrt, Messju Mohr, Simon Wisselink
Erscheinungsjahr 2001[1], 2002
Aktuelle Version 5.5.1[2]
(19. Mai 2025)
Betriebssystem plattformunabhängig
Programmier­sprache PHP
Lizenz LGPL (Freie Software)
deutschsprachig ja
https://smarty-php.github.io/smarty/stable/

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.

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.

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 hatte sich zunächst 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, oder Schweifklammern im JavaScript mit Leerzeichen umgeben werden[3].

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 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 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 Produkte setzen auf Smarty, etwa das Weblog Serendipity[4] oder die Shopsysteme Shopware[5] und JTL[6]. Andere Projekte haben Smarty mittlerweile durch anderweitige Template-Engines ersetzt, beispielsweise migrierte das Framework Zikula auf Twig[7]. Wieder andere Projekte entwarfen eigene, von Smarty inspirierte Templatesprachen, wie die ehemals im Web sehr weit verbreitete Forensoftware WoltLab Burning Board[8].

Am 25. März 2024 wurde die Version Smarty 5.0[9] veröffentlicht, in der PHP Funktionen nicht mehr automatisch benutzt werden können.

  • Joao Prado Maia, Hasin Hayder, Lucian Gheorghe: Smarty PHP Template Programming and Applications. Packt, 2006, ISBN 1-904811-40-X (englisch).
  • George Schlossnagle: Smarty. In: Professionelle PHP 5-Programmierung. Addison-Wesley, München 2006, ISBN 978-3-8273-2381-1, S. 136–149.
  • Florence Maurice: Template-Engines am Beispiel von Smarty. In: PHP 5.3 + MySQL 5.1 - Der Einstieg in die Programmierung dynamischer Websites. Addison-Wesley, München 2009, ISBN 978-3-8273-2723-9, S. 415–428.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. web.archive.org.
  2. Release 5.5.1. 19. Mai 2025 (abgerufen am 1. Juni 2025).
  3. https://www.smarty.net/docs/en/language.escaping.tpl
  4. https://docs.s9y.org/docs/developers/themes.html
  5. https://developers.shopware.com/designers-guide/smarty/
  6. https://jtl-devguide.readthedocs.io/projects/jtl-shop/de/latest/shop_templates/tipps_tricks.html#javascript-in-templatedateien
  7. https://zikula.readthedocs.io/en/stable/CHANGELOG-1.4/
  8. https://docs.woltlab.com/view_templates.html
  9. Release v5.0.0 · smarty-php/smarty. Abgerufen am 28. März 2024 (englisch).