mirror of
https://github.com/smarty-php/smarty.git
synced 2025-11-02 13:21:36 +01:00
87 lines
4.6 KiB
XML
87 lines
4.6 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 1.3 Maintainer: andreas Status: ready -->
|
|
<preface id="preface">
|
|
<title>Vorwort</title>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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 <productname>SmartTemplate</productname> 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?
|
|
</para>
|
|
<para>
|
|
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...
|
|
</para>
|
|
</preface>
|