Dieser Gastartikel stammt von Matthias Mees. Vielen Dank dafür.
Die PHP-Templateengine Smarty polarisiert. Entwickler, die an Projekten, die Smarty einsetzen, beteiligt sind, schwören auf die Vorteile – andere Entwickler argumentieren üblicherweise (technisch absolut zu Recht), PHP selbst sei bereits eine Templatenengine und ein zusätzlicher “Aufsatz” somit unnötiger Ballast.
Was ist Smarty überhaupt?
Smarty ist eine Art “Basic-PHP für Designer”. Die verwendeten Templatedateien sind im Wesentlichen HTML-Dateien, die mehr oder weniger komplexe Platzhalter enthalten, welche durch dynamische Inhalte ersetzt werden. Ergänzend stellt Smarty zudem komplexere Strukturen wie Schleifen, if-Abfragen oder Funktionen bereit und ermöglicht das Einbinden externer Dateien ebenso wie die Definition eigener Konstanten. Die Smarty-Syntax ist an PHP angelehnt, aber vereinfacht.
Wer setzt es ein?
Zu den bekannteren Open-Source-Projekten, die auf Smarty setzen, gehören:
Aber die Performance…
Es ist nicht wegzudiskutieren, dass Smarty einen gewissen Overhead erzeugt, der zu Lasten der Performance geht. Als Kompensation werden die Templates in PHP-Code vorkompiliert, optional kann zusätzlich ein Caching-Mechanismus eingesetzt werden. Zusätzlich kann es sich lohnen, auf bestimmte verzögernde Features zu verzichten, z. B. Rechenoperationen in Smarty oder das Inkludieren zusätzlicher Subtemplates.
Dennoch sind Smarty-Templates selbst unter idealen Bedingungen natürlich niemals schneller als reine PHP-Ausgabe – ganz logisch bei einem “Aufsatz”. Die Performance ist aber auch nicht das Auswahlkriterium für Smarty.
Teile und gestalte
Smarty ist nicht für jedes Projekt die richtige Wahl. Die Entscheidung, den zusätzlichen Overhead in Kauf zu nehmen, kann “philosophischer” oder ökonomischer Natur sein.
Moderne Webentwicklung trennt Struktur, Gestaltung und Verhalten. In der Praxis bedeutet das, dass CSS-Anweisungen und Javascripts in externe Dateien ausgelagert und im HTML-Markup eingebunden werden. Ebenso sollten reines Markup und
Programmcode getrennt sein, was in reinen PHP-Templates kaum möglich ist – in Smarty schon. Templateautoren werden bestimmte Inhaltsbausteine in Variablen übergeben, zudem erhalten sie einfach benutzbare Werkzeuge, mit welchen sie diese
(innerhalb bestimmter Grenzen) modifizieren können.
Wirklich gut geeignet ist Smarty für Projekte, in denen reine Programmierer und Gestalter beteiligt sind, z. B. dünn besetzte Open-Source-Projekte, die für jeden dankbar sind, der sich aktiv beteiligt. Gerade Webdesigner ohne nennenswerte PHP-Kenntnisse haben oft Respekt vor Templates, die Programmlogik enthalten, und kommen mit der vereinfachten Syntax von Smarty deutlich besser zurecht.
Ein Beispiel
Nehmen wir als einfaches Beispiel mal die Ausgabe eines Artikel-Titels in einem Blog inklusive Permalink. In einem PHP-Template wie hier der loop.php des TwentyTen-Themes für WordPress sieht das so aus:
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
Umgesetzt mit Smarty in einem Template für Serendipity wird daraus:
<h2 class="entry-title"><a href="{$entry.link}" title="Permalink to {$entry.title}" rel="bookmark">{$entry.title}</a></h2>
Der Smarty-Code ist nicht nur kürzer, sondern auch leichter lesbar. Abgesehen von zwei praktisch selbsterklärenden Variablen mit sehr einfacher Schreibweise können Templateautoren mit reinem HTML arbeiten.
Fazit
Gestalter können mit Smarty Templates unabhängig vom Programmcode erstellen und Programmierern damit die Arbeit an Templates abnehmen. Wiegt dieser organisatorische und zeitliche Vorteil die Nachteile einer aufgesetzten Templateengine und eines zusätzlichen Kompilierschrittes auf, kann Smarty die richtige Wahl für ein Projekt sein.
Matthias Mees ist freier Webdesigner aus Schleswig-Holstein. Er bloggt über Webdesign, Webstandards und Serendipity und twittert auch (aber nicht nur) darüber.
Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienstleistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.
Hallo Matthias,
danke für die Infos! Gibt es eigentlich Smarty editor?
Gruß Mirac
@Mirac:
Einige Editoren haben auch Syntax-Highlighting, falls du das meinst 😉
Der einzige Editor mit Smarty-Unterstützung, den ich bislang so benutzt habe (Anm.: Ich bin Linux-Nutzer), ist emacs — für den gibt es einen Smarty-Mode, der allerdings nicht zum Kernpaket gehört. Der bot, als ich ihn mir zuletzt angesehen habe, sogar etwas mehr als Syntax-Highlighting.
Generell sollte in nahezu jedem Editor eventuell schon das HTML- oder PHP-Highlighting reichen — nicht hervorgehobenes ist dann eben Smarty. 🙂
Es gibt einige Editoren, die Smarty-Highlighting untsetützen: Auf dem Mac zum Beispiel NetBeans.
Smarty setze ich sehr gern für meine privaten Projekte chronico und AniMels ein. Für mich hat es entscheidene Vorteile: ich trenne wie oben angesprochen Layout und Programmierlogik. Zudem ist der Code eben sehr übersichtlich und schneller zu schreiben. Deshalb ist Smarty (oder andere Templateengines) besonders im Team geeignet, um schnell neue Releases rauszuhauen. So kann der eine PHP-Logiken programmieren, die er Smarty zur Verfügung stellt, während ein anderer (Frontendentwickler) die Sachen gestaltet. Auch sehr schön: Smarty bekommt bei mir stets Rohdaten seitens PHP, in den Templates darf dann der Frontendler entscheiden, wie er ein Datum darstellen möchte oder Zahlen formatieren will. Um ein Datumsformat zu ändern muss niemand so hardcore im PHP-Code rumwerkern und dabei eventuell Abhängigkeiten zerstören.
Die Kompilierung läuft automatisch, der User bekommst stets fertig gerenderte Seiten.
@mirac
Für Smarty gibt es fast bei jeder größeren IDE ne Unterstützung. Manchmal muss halt auch ein Plugin installieren.
Ich kenn’s für Kommodo Edit (gratis Edtior, Mac, Win) und sonstige PHP-IDEs sowieso.
Teilweise kann man dann auch Dwoo damit laufen lassen, muss man einfach nur auf Smarty legen.
Sehr schöner Beitrag und sehr erfreulich zu sehen, dass das Feld der Autoren erweitert wird. Nichts gegen eure Beiträge, aber so ein bisschen frischer Wind tut jeder Seite gut. Ich hoffe dass ähnlich qualitativ hochwertige Gastbeiträge auch in Zukunft ihren Weg auf eure Seite finden 😉