Lektion 7.5: Ein Template-Operator
Ein Template-Operator ist die kleinste nützliche Erweiterung: ein neues Wort für Templates, etwa |mysite_initials.
Er ist auch das beste erste Stück PHP für Template-Entwickler, weil Eingabe und Ausgabe einfache Werte sind. In
dieser Lektion schreiben, registrieren und verwenden die Teilnehmenden einen Operator mit einem optionalen Parameter
und vergleichen ihre von Hand geschriebene Fassung mit dem RAD-Assistenten.
Auf einen Blick
| Kurs | Entwickler |
| Modul | Modul 7: Erweiterungen |
| Dauer | 55 Minuten (15 Präsentation, 40 Übung) |
| Niveau | Fortgeschrittene |
| Zielgruppe | Entwickler |
| Voraussetzungen | Lektion 7.3; Lektion 2.4 |
Lernziele
Nach dieser Lektion können die Teilnehmenden:
- eine Operatorklasse mit
operatorList(),namedParameterPerOperator(),namedParameterList()undmodify()schreiben; - jedem optionalen Parameter einen Standardwert geben;
- den Operator in
autoloads/eztemplateautoload.phpund[TemplateSettings] ExtensionAutoloadPath[]registrieren; - den Operator in der Pipe-Form und mit einem Parameter verwenden;
- den RAD-Assistenten finden, der Operatoren schreibt.
Hinweise für Trainer
So präsentieren Sie es
Quellen: eine echte Operator-Erweiterung, extension/str_replace/ (falls installiert), die Warnung zu
Template-Operatoren in Templates und Design, Teil 7
und RAD-Werkzeuge.
- Die Registrierung (3 Minuten).
autoloads/eztemplateautoload.phpfüllt$eZTemplateOperatorArray[]mitscript,classundoperator_names. Diesettings/site.ini.append.phpder Erweiterung fügt[TemplateSettings] ExtensionAutoloadPath[]=<extension>hinzu, damit der Kernel diese Datei liest. - Die Klasse (6 Minuten). Gehen Sie die Klasse der Übung durch:
operatorList()nennt die Operatoren;namedParameterPerOperator()gibttruezurück;namedParameterList()listet jeden Parameter mittype,requiredunddefaultauf;modify()erhält den Wert links von der Pipe in$operatorValue(als Referenz) und die Parameter in$namedParametersund ersetzt$operatorValuedurch das Ergebnis. - Standardwerte (2 Minuten). Ein Parameter ohne Standardwert, den ein Template weglässt, kommt als
nullan, und die Debug-Ausgabe warnt "Operator '...' has no default value for parameter '...'". - Escaping (2 Minuten). Ein Operator gibt einen Wert zurück; das Template wäscht ihn, wenn es ihn ausgibt. Geben Sie aus einem Operator kein HTML zurück, es sei denn, das ist seine Aufgabe, und escapen Sie dann darin.
- Der Assistent (2 Minuten). Setup > RAD; der Assistent für Template-Erweiterungen
(
/setup/templateoperator) schreibt Operatoren, Fetch-Funktionen und Template-Funktionen als vollständige Erweiterung.
Häufige Fragen
Lässt er sich in Funktionsform aufrufen? Dieser Operator liest den Wert links von der Pipe, schreiben Sie also
{$name|mysite_initials}. Ein Operator, der auch als {my_operator( $value )} funktionieren soll, nimmt den Wert
zusätzlich als Parameter an und verwendet ihn, wenn er angegeben ist, wie es der Parameter subject von
str_replace tut.
Kann eine Klasse mehrere Operatoren enthalten? Ja: Listen Sie sie in operatorList() und operator_names auf
und unterscheiden Sie in modify() nach $operatorName.
Wird ein Operator in den Template-Cache kompiliert? Sein Aufruf schon; der Operator selbst läuft jedes Mal, wenn das kompilierte Template läuft, es sei denn, er deklariert Hinweise für die Auswertung beim Kompilieren. Halten Sie Operatoren schnell.
Stolperfallen
ExtensionAutoloadPath[]vergessen. Der Operator ist unbekannt, und die Debug-Ausgabe sagt es.- Caches nicht leeren. Leeren Sie nach dem Registrieren die Caches
iniundtemplate. - Präfix. Operatornamen gelten global für alle Templates; versehen Sie sie mit einem Präfix (
mysite_), um Konflikte zu vermeiden.
Praktische Übung
Auf der Entwicklungsinstallation, in extension/mysite_hello.
Legen Sie
autoloads/mysitehellooperators.phpan:/** * Template operators of mysite_hello: {$text|mysite_initials} and {$text|mysite_initials( '-' )} */ class mysiteHelloOperators { public function operatorList() { return array( 'mysite_initials' ); } public function namedParameterPerOperator() { return true; } public function namedParameterList() { return array( 'mysite_initials' => array( 'separator' => array( 'type' => 'string', 'required' => false, 'default' => '' ) ) ); } public function modify( $tpl, $operatorName, $operatorParameters, $rootNamespace, $currentNamespace, &$operatorValue, $namedParameters ) { if ( $operatorName === 'mysite_initials' ) { $initials = array(); foreach ( preg_split( '/\s+/u', trim( (string)$operatorValue ) ) as $word ) { if ( $word !== '' ) $initials[] = mb_strtoupper( mb_substr( $word, 0, 1 ) ); } $operatorValue = implode( $namedParameters['separator'], $initials ); } } }Legen Sie
autoloads/eztemplateautoload.phpan:$eZTemplateOperatorArray = array(); $eZTemplateOperatorArray[] = array( 'script' => 'extension/mysite_hello/autoloads/mysitehellooperators.php', 'class' => 'mysiteHelloOperators', 'operator_names' => array( 'mysite_initials' ) );Registrieren Sie den Autoload-Pfad:
php bin/php/console exp:ini add site.ini/TemplateSettings/ExtensionAutoloadPath mysite_hello extension:mysite_hello.Prüfen Sie beide PHP-Dateien mit
php -l; leeren Sie die Cachesiniundtemplate.Verwenden Sie den Operator im Spielplatz:
['Ada Lovelace'|mysite_initials] ['grace brewster hopper'|mysite_initials( '.' )] [$node.name|mysite_initials|wash]Entfernen Sie
'default' => ''aus der Parameterdefinition, leeren Sie den Template-Cache, führen Sie den Spielplatz mit--debug=warningaus und lesen Sie die Warnung. Setzen Sie den Standardwert wieder ein.Verwenden Sie den Operator in
greet.tplaus Lektion 6.2:<p>Initials: {$name|mysite_initials|wash}</p>, und öffnen Sie die View.Öffnen Sie Setup > RAD und suchen Sie den Assistenten für Template-Erweiterungen; vergleichen Sie die Dateien, die er auflistet, mit Ihren.
Committen Sie die Dateien.
Erwartetes Ergebnis
- Schritt 5 gibt
[AL] [G.B.H]und die Initialen des Namens von Knoten 2 aus. - Schritt 6: die Warnung "Operator 'mysite_initials' has no default value for parameter 'separator'", gefolgt von
(compiling <template>), weil das Template neu kompiliert wurde. - Schritt 7: Die Begrüßungsseite zeigt die Initialen.
- Der Trainer prüft die Spielplatz-Ausgabe einer Person.
Quiz
- Welche Datei registriert die Template-Operatoren einer Erweiterung?
- Welche Einstellung lässt den Kernel diese Datei lesen?
A.
ActiveExtensions[]B.ExtensionAutoloadPath[]C.DesignExtensions[]D.ExtensionRepositories[] - Wo steht in
modify()der Wert links von der Pipe, und wie wird das Ergebnis zurückgegeben? - Was passiert, wenn ein Parameter keinen Standardwert hat und ein Template ihn weglässt?
- Warum erhalten Operatornamen ein Präfix?
Antworten
autoloads/eztemplateautoload.phpder Erweiterung.- B.
[TemplateSettings] ExtensionAutoloadPath[]. - In
$operatorValue, als Referenz übergeben; die Methode ersetzt den Wert durch das Ergebnis. - Der Operator erhält
null, und die Debug-Ausgabe warnt einmal pro Operator und Parameter. - Alle Templates der Installation teilen sich die Operatornamen; ein Präfix vermeidet Konflikte.
Weiterführende Literatur
- Template-Operatoren in einem Theme.
- Templates und Design, Teil 7: die Warnung bei fehlenden Standardwerten.
- RAD-Werkzeuge: der Assistent für Template-Erweiterungen.
Verwandte Seiten
- Modul 7: Erweiterungen
- Entwickler: Kursüberblick
- Trainer: hier beginnen
- 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.