Geschichte der Template-Sprache
Die Template-Sprache ist älter als der meiste Code um sie herum. Diese Seite erzählt ihre Geschichte aus dem, was das Repository selbst
festhält: die Git-Geschichte, die Changelogs in doc/changelogs/, die Hinweise zu Funktionen in doc/eng-us/features/ und Kommentare im
Quellcode. Nichts hier stammt aus dem Gedächtnis oder aus fremden Quellen. Zitierte Betreffzeilen von Commits und Notizen sind ins Deutsche
übertragen.
Inhalt
- Woher sie kam
- Die Aufzeichnungen im Repository
- Vom Process-Cache zum Compiler (2003)
- Die verbesserte Syntax (2005, Version 3.6)
- Wie der ältere Stil heute aussieht
- Exponential führt sie weiter
- Verwandte Seiten
Woher sie kam
Exponential setzt die Codebasis fort, die viele Jahre lang als eZ Publish veröffentlicht wurde. Dieses Produkt wurde von seinem Hersteller
nach fast 18 Jahren eingestellt; der Copyright-Hinweis nennt noch beide Eigentümer des Codes, Copyright (C) 1998 - 2026 Exponential Foundation and 7x. All rights reserved.
und Copyright (C) eZ Systems AS, die Zeile oben in lib/eztemplate/classes/eztemplate.php. Die Template-Bibliothek ist während
ihrer ganzen aufgezeichneten Geschichte Teil der Codebasis gewesen, und 7x hat sie weitergeführt, seit es das Projekt 2023 übernommen hat
(Wer ist 7x?).
Die Aufzeichnungen im Repository
| Quelle | Was sie abdeckt | Wo |
|---|---|---|
| Git-Geschichte | ab dem ersten Commit am 2. September 2002 (alle Dateien der Wurzel nach trunk verschoben) | git log -- lib/eztemplate |
| Changelogs | von Version 2.9 bis 5.2, dann 6.0.x | doc/changelogs |
| Hinweise zu Funktionen | ab Version 3.5 | doc/eng-us/features/<version>/ |
| Kommentare im Quellcode | aus Gründen der Kompatibilität behaltene Operatoren | lib/eztemplate/classes/eztemplateautoload.php |
Vom Process-Cache zum Compiler (2003)
Der Template-Compiler begann unter einem anderen Namen. Der Commit vom 14. Mai 2003 (88c1f9460c) benannte das System des Process-Cache in
Template-Kompilierung um, als besseren Namen, und der Changelog von 3.1 vermerkt, dass das System zur Template-Kompilierung fertig sei und
nun PHP-Template-Dateien erzeuge, die sich richtig ausführen lassen. Zwei Tage später (4fe8ef4f1c) wurde die Unterstützung für die
Transformation von Knoten für let, default und section hinzugefügt, der Haken, der eine Funktion bis heute ihren eigenen PHP-Code
schreiben lässt (templateNodeTransformation()).
Der Changelog von 3.4 meldet dann, dass die Template-Kompilierung für fast alle Template-Operatoren und -Funktionen umgesetzt sei, fügte
eztc.php (dem Befehl, der Templates vorab kompiliert) Parameter hinzu und die Option subtree_expiry von {cache-block}. Die
Einstellungen, die all das steuern, stehen noch in settings/site.ini [TemplateSettings]: TemplateCompile, TemplateOptimization,
TemplateCache, DevelopmentMode.
Die verbesserte Syntax (2005, Version 3.6)
Die größte Änderung an der Sprache selbst kam mit dem Commit 7460c738b2 vom 18. März 2005: die erste Umsetzung der neuen Template-Funktionen
{def}, {undef}, {if}, {elseif}, {else}, {while}, {do}, {for}, {foreach}, {break}, {continue} und {skip}. Seine Entwurfsnotiz liegt noch im
Repository, doc/eng-us/features/3.6/improved_template_syntax.txt. Ihr erklärter Anlass:
die Template-Syntax klarer und der Syntax verbreiteter prozeduraler Programmiersprachen ähnlicher zu machen.
Was sie änderte:
- Das Dollarzeichen überall, auch bei Zuweisungen:
{set $i=10}. Zuweisungen im alten Stil ohne „$“ sollten weiter funktionieren. - def und undef statt Blöcken
{let}...{/let}, weil ein Block die Datei .tpl schwerer lesbar macht und es erschwert, Code darin zu verschieben. Eine mit{def}angelegte Variable lebt bis zum Ende ihrer Datei. - if, while, do, for und foreach als für Entwickler viel einfacher zu verstehen und zu nutzen als die allmächtige Funktion {section}.
- break, continue, skip und delimiter für jede Schleife.
Die Notiz hält auch fest, was foreach bewusst nicht tut: Es läuft nicht über die Zeichen einer Zeichenkette oder einen Zahlenbereich
(nutzen Sie for), und es hat keinen Proxy-Iterator ($item.index); section behält diese. Der Changelog von 3.6 enthält die ersten
Fehlermeldungen gegen die neue Template-Syntax (#6629) und die neue Template-Schleife (die Korrektur von {delimiter}), und der Changelog von
3.8 die Korrektur, dass {undef} Template-Variablen zerstören konnte, die nicht mit {def} angelegt waren.
Wie der ältere Stil heute aussieht
Beide Stile laufen weiterhin nebeneinander. Dieselbe Liste, auf die alte und die neue Weise geschrieben, auf einer Entwicklungsinstallation gerendert:
{* the older style: let ... /let and section *}
let items=array( 'red', 'green', 'blue' )
old: section name=Colors loop=$items$Colors:itemdelimiter, /delimiter/section
/let
{* the style introduced with def and foreach *}
def $items = array( 'red', 'green', 'blue' )
new: foreach $items as $item$itemdelimiter, /delimiter/foreach
undef $itemsAusgabe:
old: red, green, bluenew: red, green, blueAndere Spuren der Geschichte im heutigen Code:
lib/eztemplate/classes/eztemplateautoload.phpregistriert nocharray_prepend,array_appendundarray_merge, markiert mit// DEPRECATED/OBSOLETE, neben ihren Ersetzungenprepend,appendundmerge.letunddefaultsind weiterhin registriert (eZTemplateSetFunction), ebensosectionmit seinen Kindernsection-else,section-excludeundsection-include(Sections und foreach).- Der Parser akzeptiert weiterhin Parameter von
set,letunddefaultohne Dollarzeichen und behandeltnameundscopeohne Dollarzeichen als Namensraum und Gültigkeitsbereich der Funktion (parseSetFunction()inlib/eztemplate/classes/eztemplatemultipassparser.php).
Exponential führt sie weiter
Unter 7x wird die Sprache als Teil des Kernels gepflegt und dort erweitert, wo es heutigen Websites hilft, wobei die Templates vorhandener
Designs immer funktionsfähig bleiben. Beispiele dafür, was die Linie 6.0 in der Template-Engine und um sie herum hinzugefügt hat: die
Einstellung ShowTemplatePathComments, die jedes gerenderte Template in HTML-Kommentare mit dem Namen seiner Datei einschließt
(eZTemplate::showTemplatePathComments()), eine Warnung, die einmal pro Operator und Parameter für einen fehlenden Standardwert geschrieben
wird (eZTemplate), und die Operatoren csp_nonce und exp_environment des Kernels. Der Changelog jedes Release führt die Änderungen auf:
doc/changelogs.
Verwandte Seiten
- Zurück: Was die Template-Sprache ist
- Weiter: Smarty und die Template-Sprache nebeneinander
- Sections und foreach
- Section (veraltet) zum Umstellen alter Templates
- Wer ist 7x?
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.