Get Smarty

Donate

Paypal

Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

Vorwort

Die Frage, wie man die Applikations-Logik eines PHP-Scriptes vom Layout trennt, ist unzweifelhaft eines der am häfigsten diskutierten Themen. Da PHP als "in HTML eingebettete Scripting-Sprache" angepriesen wird, ergibt sich nach einigen Projekten in denen man HTML und PHP gemischt hat schnell die Idee, Funktionalität und Darstellung zu trennen. Dazu kommt, dass in vielen Firmen Applikationsentwickler und Designer nicht die selbe Person sind. In Konsequenz beginnt die Suche nach einer Template-Lösung.

Als Beispiel: In unserer Firma funktioniert die Entwicklung einer Applikation wie folgt: Nachdem die Spezifikationen erstellt sind, entwickelt der Interface Designer einen Prototypen des Interfaces und übergibt dieses dem Programmierer. Der Programmierer implementiert die Geschäftslogik in PHP und verwendet den Interface-Prototypen zur Erstellung eines Template-Skeletts. Danach übergibt der Programmierer die Templates dem HTML/Webseiten-Designer welcher ihnen den letzten Schliff verleiht. Das Projekt kann mehrfach zwischen dem Programmieren und dem Designer ausgetauscht werden. Deshalb ist es wichtig, dass die Trennung von Logik und Design klar stattfindet. Der Programmierer will sich normalerweise nicht mit HTML herumschlagen müssen und möchte auch nicht, dass der Designer seinen PHP-Code verändert. Designer selbst benötigen Konfigurationsdateien, dynamische Blöcke und andere Interface spezifische Eigenheiten, möchten aber auch nicht direkt mit PHP in Berührung kommen.

Die meisten Template-Engines die heutzutage angeboten werden, bieten eine rudimentäre Möglichkeit Variablen in einem Template zu ersetzen und beherschen eine eingeschränkte Funktionalität für dynamische Blöcke. Unsere Anforderungen forderten jedoch ein wenig mehr. Wir wollten erreichen, dass sich Programmierer überhaupt nicht um HTML Layouts kümmern müssen. Dies war aber fast unumgänglich. Wenn ein Designer zum Beispiel alternierende Farben in einer Tabelle einsetzen wollte, musste dies vorhergehend mit dem Programmierer abgesprochen werden. Wir wollten weiter, dass dem Designer Konfigurationsdateien zur Verfügung stünden, aus denen er Variablen für seine Templates extrahieren kann. Die Liste ist endlos.

Wir begannen 1999 mit der Spezifikation der Template Engine. Nachdem dies erledigt war, fingen wir an eine Engine in C zu schreiben, die - so hofften wir - in PHP eingebaut würde. Nach einer hitzigen Debatte darüber was eine Template Engine können sollte und was nicht, und nachdem wir feststellen mussten, dass ein paar komplizierte technische Probleme auf uns zukommen würden, entschlossen wir uns die Template Engine in PHP als Klasse zu realisieren, damit sie von jederman verwendet und angepasst werden kann. So schrieben wir also eine Engine, die wir SmartTemplate™ nannten (anm: diese Klasse wurde nie veröffentlicht). SmartTemplate erlaubte uns praktisch alles zu tun was wir uns vorgenommen hatten: normale Variablen-Ersetzung, Möglichkeiten weitere Templates einzubinden, Integration von Konfigurationsdateien, Einbetten von PHP-Code, limitierte 'if'-Funktionalität und eine sehr robuste Implementation von dynamischen Blöcken die mehrfach verschachtelt werden konnten. All dies wurde mit Regulären Ausdrücken erledigt und der Sourcecode wurde ziemlich unübersichtlich. Für grössere Applikationen war die Klasse auch bemerkenswert langsam, da das Parsing bei jedem Aufruf einer Seite durchlaufen werden musste. Das grösste Problem aber war, dass der Programmierer das Setup, die Templates und dynamische Blöcke in seinem PHP-Skript definieren musste. Die nächste Frage war: wie können wir dies weiter vereinfachen?

Dann kam uns die Idee, aus der schließlich Smarty wurde. Wir wussten wie schnell PHP-Code ohne den Overhead des Template-Parsing ist. Wir wussten ebenfalls wie pedantisch PHP aus Sicht eines durchschnittlichen Designers ist und dass dies mit einer einfacheren Template-Syntax verborgen werden kann. Was wäre also, wenn wir diese beiden Stärken vereinten? Smarty war geboren...

Comments
No comments for this page.

Advertisement

Sponsors [info]

Sponsors