Die Template-Engine und die Design-Kette
Diese Seite richtet sich an Ingenieure, die verstehen müssen, wie eine Seite gerendert wird, wie ein Template gewählt wird und was dabei schiefgehen kann. Die Template-Sprache ist die eigene von Exponential; sie ist weder Twig noch Smarty, auch wenn ihre Syntax mit geschweiften Klammern ähnlich aussieht. Die maßgeblichen Regeln stehen in Kernel-Architektur.
Inhalt
- Die Engine
- Datenzugriff aus Templates
- Die Design-Kette
- Overrides
- Caching innerhalb von Templates
- Fehlersuche beim Rendern
- Prüfregeln
Die Engine
eZTemplate (lib/eztemplate/classes/eztemplate.php) kompiliert .tpl-Dateien zu PHP und führt die kompilierten
Dateien aus (mitgeliefert site.ini [TemplateSettings] TemplateCompile=enabled). Operatoren (|wash, ezurl, i18n)
und Funktionen ({def}, {foreach}, {include}, {cache-block}) sind PHP-Klassen, die in eztemplateautoload.php-
Dateien als Einträge von $eZTemplateOperatorArray und $eZTemplateFunctionArray registriert sind. Die Engine lädt sie
aus [TemplateSettings] AutoloadPathList[] und aus den in ExtensionAutoloadPath[] aufgeführten Erweiterungen.
Die Sprachreferenz steht in der Hilfe: Template-Sprache und Template-Operatoren.
Datenzugriff aus Templates
Templates fragen die Datenbank nicht ab: Die Sprache hat kein SQL-Konstrukt. Daten kommen aus:
- den Variablen der View, die die Modul-View vor dem Rendern setzt;
- Fetch-Funktionen:
fetch( 'content', 'list', hash( ... ) ), zugeordnet inkernel/<module>/function_definition.phpund voneZFunctionHandlerausgeführt. Ein Fetch, der Inhalte zurückgibt, wendet die Berechtigungen des Benutzers an; - Template-Operatoren, die PHP sind und alles tun können; sie werden daher wie Views geprüft.
Die Design-Kette
Ein Design ist ein Verzeichnis mit Templates, Stylesheets und Bildern. Designs werden gestapelt, sodass eine Website nur
enthält, was sich von der Basis unterscheidet: site.ini [DesignSettings] SiteDesign, AdditionalSiteDesignList[] und
StandardDesign (standard). Erweiterungen fügen Design-Verzeichnisse über design.ini [ExtensionSettings] DesignExtensions[] hinzu. eZTemplateDesignResource baut die Kette: zuerst die Design-Verzeichnisse der Erweiterungen,
dann design/<design>/.
Overrides
Blöcke in override.ini wählen für eine View ein anderes Template, wenn Bedingungen passen: Source, MatchFile,
Subdir und Match[...] (zum Beispiel der Klassenbezeichner oder der Knoten). Seit Juli 2026 werden Overrides nach
Priority geordnet, niedrigere zuerst (Reihenfolge der Template-Overrides).
Die Administrationsseite Design > Templates schreibt nur settings/siteaccess/<sa>/override.ini.append.php.
Eine Website oder Erweiterung überschreibt ein Kernel-Template über override.ini oder ihr eigenes Design-Verzeichnis;
sie darf keine Dateien in design/standard/ oder design/admin*/ ändern.
Caching innerhalb von Templates
| Cache | Was | Geleert durch |
|---|---|---|
| Kompilierte Templates | das aus jedem .tpl kompilierte PHP | php bin/php/ezcache.php --clear-tag=template --allow-root-user |
| Template-Override-Cache | die aufgelösten Override-Regeln | --clear-id=template-override; ohne das wird eine neue Template-Datei nicht gefunden |
| Cache-Blöcke | die Ausgabe von {cache-block}-Abschnitten ([TemplateSettings] TemplateCache=enabled) | Ablauf, Schlüssel, --clear-id=template-block |
| View-Cache für Inhalte | die ganze gerenderte Inhaltsansicht | Inhaltsänderungen; --clear-tag=content |
Siehe Cache-Invalidierung und Leeren.
Fehlersuche beim Rendern
- Kommentare mit Template-Pfaden umschließen jedes gerenderte Template mit HTML-Kommentaren, die seine Datei nennen (Kommentare mit Template-Pfaden).
- Die Debug-Leiste listet die Templates, die eine Seite verwendet (Die Exp-Debug-Leiste).
./console exp:eztemplatecheck(bin/php/eztemplatecheck.php) prüft Templates auf Syntaxfehler.
Prüfregeln
- Jede Variable aus Inhalten oder Eingaben wird mit
|washausgegeben oder über einen Operator, der maskiert. - Ein Operator, der HTML in PHP baut, maskiert es dort.
- Kein SQL in Templates, und kein rohes Datenbank-Handle wird an eines übergeben.
- In den Administrationsdesigns: kein
<style>-Block und keinstyle=""-Attribut und kein Inline-Skriptcode; das prüfen Tests intests/tests/design/(Gestaltung der Administration). - Skripte, die inline bleiben müssen, tragen die Nonce der Content Security Policy:
<script nonce="{csp_nonce()}">.
Verwandte Seiten
- Templates und Design
- View-Ergebnisse und das Pagelayout
- Die Design-Kette
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.