phpbar.de logo

Mailinglisten-Archive

[php] =?us-ascii?Q?=3D=3Fiso-8859-1=3F?= =?us-ascii?Q?_=3D=3Fus-ascii=3FB=3FUT9SRTpfPTVCcGhwPTVEX0VtcGZlaGx1bmd fZj?= =?us-ascii?Q?1GQ3JfVGVtcGxhdGVzX?= 1N5?= stem? =

[php] =?iso-8859-1? =?us-ascii?B?UT9SRTpfPTVCcGhwPTVEX0VtcGZlaGx1bmd fZj 1GQ3JfVGVtcGxhdGVzX 1N5?= stem? =

Ralf Geschke php_(at)_phpcenter.de
Thu, 25 Jul 2002 22:30:59 +0200


> Jetzt Du ;)

Ach - darauf habe ich eigentlich gar keine grosse Lust. :-)

Statt dessen moechte ich lieber ein wenig die Entstehung
dieser Library skizzieren, vielleicht wird damit einiges
klarer. 

Meine PHP-Zeit begann im Fruehjahr 1998. Es folgten neben
der Einrichtung dieser Mailingliste und ein wenig spaeter
des PHP-Centers etliche Programme, kleinere und groessere
Skripte. Im Rahmen der Programmierung einer groesseren
Anwendung wurden verschiedene und leicht anpassbare Designs
benoetigt, das war ungefaehr Anfang 2000. Wir entschieden
uns fuer ein Template-System, und da jene zu dieser Zeit
noch rar gesaet waren, benutzen wir die damals bereits 
erprobte und vielfach eingesetzte Template-Klasse der PHPLIB.

Dummerweise kam ich mit den vielen Handles, der Reihenfolge
derselben und ueberhaupt dem ganzen Drumherum nicht sonderlich
gut zurecht. Wagner wurde dann unser Template-Spezialist. ;-)

Bis vor wenigen Monaten schob ich das Thema Templates daher
immer wieder beiseite, experimentierte lieber mit XML & Co.,
und inzwischen wurden viele weitere Template-Klassen bzw. 
-Libraries neu geschrieben oder erweitert, darunter natuerlich
auch Smarty, oder auch Ulfs IT/IT[x], um nur die wichtigsten zu 
nennen. 

Nun kam ich jedoch im Rahmen eines Projektes wieder mit
Templates in Kontakt, dabei handelte es sich um einen 
Teil einer umfassenden, intern benutzten PHP-Klassenbibliothek. 

Jene Template-Klasse liess sich ploetzlich sehr leicht
anwenden, und weckte damit mein Interesse. 

Danach forschte ich im Netz nach den aktuell verfuegbaren 
Template-Klassen, um herauszufinden, ob es bereits aehnliche
Ansaetze gab. Zumindest kurz angeschaut habe ich:
- freeTemplate
- php_templates
- FastTemplate 1.1.0
- class.FastTemplate
- Template-Klasse aus vLIB
- TemplatePower
- Smarty
- SimpleTemplate
- Simple Template
- XTemplate
- Quick Template
- PHPLIB Template
- ecTemplate
- AvantTemplate
- IT / IT[x]
- ...und noch etwa fuenf weitere, die da so herumschwirrten...

Darunter fand sich jedoch nichts, was die Leichtigkeit, Einfachheit
und gleichzeitig Maechtigkeit hatte, die mir vorschwebte. 

Schliesslich sollte man einen guten Grund haben, angesichts
dieser Masse an Template-Klassen eine neue zu entwickeln. 

Die Template Klasse sollte in der Tradition der bekannten und
etablierten Libraries wie der PHPLIB Templates oder auch
Ulfs IT stehen. 
Das heisst, sie muss sowohl einfache Ersetzungen als auch
verschachtelte Bloecke beherrschen. 
Ebenfalls sollte sich die Geschwindigkeit in etwa an den
vorhandenen Klassen orientieren, im besten Falle diese
sogar uebertreffen. 

Einschub: Ich habe Geschwindigkeitstests durchgefuehrt,
 und zwar anhand derjenigen, die Ulf Wendel in seinem Artikel
 ueber Templates benutzt hat
 (http://www.ulf-wendel.de/projekte/itx/vergleich.php). 
 Die Referenz war Ulfs IT-Klasse, jene kam auf die 100%. 
 Die Ergebnisse fuer Apolda Template lagen auf dem gleichen
 Niveau wie PHPLIB Template, ich kam auf ca. 116%. 
 In einem anderen Test wurden einfach eine grosse Anzahl
 Ersetzungen durchgefuehrt, dabei kam Apolda Template
 auf ca. 87%, wieder bei der Referenz IT mit 100%. 
 Damit war ich letztlich zufrieden, weitere Verbesserungen
 erhoffe ich mir durch PHP5 bzw. ZE2. 
Einschub Ende. 

Tja, und so war Apolda Template geboren. :-)

Warum nun nicht Smarty oder aehnliche? Ganz einfach: Ich halte
es nach wie vor fuer Unfug, Programmlogik, die eigentlich
gerade durch den Einsatz von Template aus der HTML-Ebene
heraus gehalten werden soll, nun durch die Verwendung
einer Template-Klasse, in der sich quasi wieder programmieren
laesst, wieder in die HTML- bzw. Design-Ebene hereinzuholen. 

Wir erinnern uns: PHP ist einer serverseitige, in HTML eingebettete
Programmiersprache. Ok. Also kann der Designer, der ein wenig
PHP beherrscht, dies innerhalb von HTML verwenden. 
Das soll er aber nicht, also werden Templates verwendet. 
Der Programmierer programmiert PHP, die Designerin kreiert HTML. 
Dank der Template-Klasse wird nun beides bei der Ausgabe 
zusammengefuegt. Jeder arbeitet in seinem Bereich. 

Nun geben Template-Klassen wie Smarty dem Designer ploetzlich
wieder die Moeglichkeit, quasi durch die Hintertuer doch 
ein wenig zu programmieren. Und die Programmiererin wundert 
sich evtl. ueber die seltsame Ausgabe, die von ihr doch voellig
anders vorgesehen war...

Ich denke - entweder man entscheidet sich fuer Templates, 
dann eben mit der Konsequenz, dass Design und Code vollkommen
getrennt ist. Oder man kann sich das ganze gleich sparen,
und PHP in HTML einbetten, so wie es vom Autor irgendwann
mal gedacht war. 

Aber warum sollte man eine (kleine) Programmiersprache in die 
HTML-Ebene einbauen, welche dann nur durch Tricks wie Caching
oder Vorkompilieren wieder halbwegs performant gemacht 
werden kann..? Erscheint mir einfach unlogisch. 
Hier beziehe ich mich vor allem auf Schleifen, if-Abfragen und
so weiter. 

Du meinst, dass der Ansatz von PHPLIB Template, IT/IT[x], 
etlichen der oben genannten sowie auch Apolda Template
nicht funktioniert? Das erklaer' mal den vielen Anwendern
jener Template-Klassen, die seit Jahren (Apolda Template
hier ausgenommen) mit deren Hilfe ihre Projekte realisieren... ;-)

Ich behaupte gar nicht, dass Apolda Template irgend etwas
Besonderes ist. Es handelt sich um eine pragmatische Loesung
fuer einfache Probleme. _Ich_ komme gut mit der Denkweise,
Bloecke in Objektinstanzen zu verwalten, zurecht - und zwar
besser als mit den bis dato vorhandenen Template-Klassen. 
Manch anderen ergeht es aehnlich, wie die bisherigen
Rueckmeldungen verlauten lassen. 
Es hat letztlich auch Spass gemacht, die paar Codezeilen zu schreiben
und das Ergebnis zu veroeffentlichen. 

Vielleicht wird es weitere, von der Apolda Template Klasse abgeleitete
Klassen geben (seit kurzem ist dies sogar sehr wahrscheinlich), welche
maechtiger sind und zusaetzliche Features anbieten. 
Moeglicherweise auch Funktionalitaeten wie sie Smarty o.ae. besitzen, 
einbinden. 
Von mir aus - gerne. Der Code steht unter LGPL zur Verfuegung,
ich bin auch bereit, hier weiterhin als Maintainer zu fungieren. 
Nur die Basisklasse sollte jedoch klein und ueberschaubar bleiben,
also aehnlich wie sie momentan ist. 

Ach ja: Letzte Woche schrieb mir jemand, dass er Apolda Template
auf Perl portiert habe und das Ergebnis bald veroeffentlichen wolle. 
Die Entwicklung geht also weiter, selbst abseits von PHP. 

Und ich freue mich darauf. :-)

Danke fuers Lesen und Entschuldigung fuer die gewaltige Laenge
dieser Mail...

Beste Gruesse,
   Ralf
-- 
: www  : http://www.bttr.org  :  mail: ralf_(at)_bttr.org
: Eine Site rund um MySQL     :  http://www.bttr.org/mysql/
: Privacy now! My Public Key  :  http://www.bttr.org/geschke.asc


php::bar PHP Wiki   -   Listenarchive