Operatoren registrieren
Eine Operatorklasse bewirkt nichts, solange die Template-Engine nicht weiß, auf welche Namen sie antwortet. Diese Seite
listet jede Stelle auf, die es ihr mitteilt, in lib/eztemplate/classes/eztemplate.php (factory(), autoload()), und
die Einstellungen, die sie liest.
Inhalt
- eztemplateautoload.php
- Wo die Engine sucht: AutoloadPathList und ExtensionAutoloadPath
- Die Reihenfolge der Erweiterungen
- PHP-Funktionen aus template.ini
- OW Simple Operator
- Template-Funktionen
- Nach dem Registrieren
eztemplateautoload.php
Die Engine bindet aus jedem Ordner ihrer Liste eine Datei namens eztemplateautoload.php ein. Die Datei setzt zwei
Arrays, beide optional:
$eZTemplateOperatorArray = array();
$eZTemplateOperatorArray[] = array( 'script' => 'extension/myextension/autoloads/myextensionoperators.php',
'class' => 'myExtensionOperators',
'operator_names' => array( 'myext_initials', 'myext_reading_time' ) );
$eZTemplateFunctionArray = array();
$eZTemplateFunctionArray[] = array( 'script' => 'extension/myextension/autoloads/myextensionfunction.php',
'class' => 'myExtensionFunction',
'function_names' => array( 'myext_box' ) );Die Schlüssel eines Operatoreintrags (class, script, class_parameter, function, operator_names,
operator_names_function) sind unter
Die Schnittstelle der Operatorklasse erklärt. Zwei Regeln:
- beginnen Sie jedes Array mit
= array();(die Engine löscht beide Variablen vor dem Einbinden der Datei, aber eine Datei, die nur anhängt, ist fragil, wenn sie anderswo eingebunden wird); - die Datei läuft bei jeder Anfrage, die die Template-Engine erzeugt: beschränken Sie sie auf Array-Definitionen, ohne Datenbank- oder Dateizugriff. (Die Datei von OW Simple Operator liest eine INI-Datei; diese ist gecacht.)
Wo die Engine sucht
eZTemplate::factory() baut die Ordnerliste aus site.ini [TemplateSettings] auf:
[TemplateSettings]
AutoloadPathList[]
AutoloadPathList[]=lib/eztemplate/classes/
AutoloadPathList[]=kernel/common/
AutoloadPathList[]=lib/ezpdf/classes/
AutoloadPathList[]=kernel/private/eztemplate/
ExtensionAutoloadPath[]AutoloadPathList[]enthält Ordner (mit abschließendem Schrägstrich). Die vier des Kernels kommen aussettings/site.ini. Eine Erweiterung kann hier ihren Ordner hinzufügen (die Erweiterung bcwebsitestatistics tut das:AutoloadPathList[]=extension/bcwebsitestatistics/autoloads/), aber der übliche Weg ist die nächste Einstellung.ExtensionAutoloadPath[]enthält Namen von Erweiterungen; die Engine erweitert jeden zuextension/<name>/autoloads/(eZExtension::expandedPathList()). Jede Erweiterung mit Operatoren fügt in ihrersettings/site.ini.append.phpeine eigene Zeile hinzu:
[TemplateSettings]
ExtensionAutoloadPath[]=myextension
*/ ?>Beginnen Sie diese Liste in einer Erweiterung nie mit einer leeren Zeile ExtensionAutoloadPath[]: In einem INI-Append
leert eine leere Zeile [] die bis dahin gesammelte Liste, und jede vor Ihrer Erweiterung zusammengeführte Erweiterung
verliert ihre Operatoren.
Ein Ordner auf einer der beiden Listen ohne eztemplateautoload.php erzeugt in der Debug-Ausgabe die Warnung
Path '...' does not have the file 'eztemplateautoload.php' allthough it reported it had one..
Die Reihenfolge der Erweiterungen
Die Engine liest zuerst AutoloadPathList[], dann ExtensionAutoloadPath[], jeweils in der Reihenfolge der Liste, und
die letzte Registrierung eines Namens gewinnt (Registrierungsreihenfolge und Überschreibungen).
Die Reihenfolge von ExtensionAutoloadPath[] ist die Reihenfolge, in der die site.ini.append.php-Dateien der
Erweiterungen zusammengeführt werden:
[ExtensionSettings] ActiveExtensions[](globale Erweiterungen), dannActiveAccessExtensions[]des Siteaccess (Zugriffserweiterungen);- mit
[ExtensionSettings] ExtensionOrdering=enabled(der Standard insettings/site.ini, und auf einer Entwicklungsinstallation) wird die Liste der aktiven Erweiterungen nach den Abhängigkeiten sortiert, die jede Erweiterung in ihrerextension.xmldeklariert (eZExtension::extensionOrdering(),ezpExtension::getLoadingOrder()):<requires>und<uses>lassen Ihre Erweiterung nach der genannten laden,<extends>vor ihr.
<dependencies>
<requires>
<extension name="ezjscore" />
</requires>
</dependencies>Eine Erweiterung, die absichtlich den Operator einer anderen Erweiterung überschreibt, sollte daher <requires> (oder
<uses>) auf diese deklarieren; zum Überschreiben eines Operators des Kernels oder der Template-Bibliothek ist keine
Deklaration nötig, denn Erweiterungen werden immer nach AutoloadPathList[] gelesen.
PHP-Funktionen aus template.ini
template.ini [PHP] PHPOperatorList[] ordnet Operatornamen PHP-Funktionen zu, die ein Argument annehmen:
[PHP]
PHPOperatorList[]
PHPOperatorList[urlencode]=urlencode
PHPOperatorList[urldecode]=urldecode
PHPOperatorList[rawurlencode]=rawurlencode
PHPOperatorList[rawurldecode]=rawurldecodeDas ist die settings/template.ini des Kernels. kernel/common/eztemplateautoload.php registriert diese Namen über die
Funktionen eZPHPOperatorNameInit() (die Namen) und eZPHPOperatorInit() (ein eZTemplatePHPOperator-Objekt für alle).
Erweiterungen fügen Einträge in ihrer template.ini.append.php hinzu; auf einer Entwicklungsinstallation ergänzt cjw_newsletter nl2br,
ezmultiupload strip_tags, swark serialize und unserialize, bcgooglesitemaps getenv. Verwenden Sie in einem
Append Zeilen der Form Schlüssel=Wert ohne führende leere Zeile PHPOperatorList[], aus dem oben genannten Grund. Was
diese Operatoren tun und wo ihre Grenzen liegen: PHP-Funktionsoperatoren.
OW Simple Operator
Die Erweiterung owsimpleoperator registriert Operatoren aus owsimpleoperator.ini ([PHPFunctions] PermittedFunctionList[]
und [ClassOperators] PermittedClassOperatorList[]) über ihre eigene eztemplateautoload.php. Siehe
OW Simple Operator.
Template-Funktionen
Template-Funktionen verwenden dieselben Dateien und dieselben Listen: Einträge in $eZTemplateFunctionArray mit
function_names (oder function_names_function) statt operator_names. Siehe
Eigene Template-Funktionen.
Nach dem Registrieren
- Prüfen Sie die Autoload-Datei und die Klassendatei mit
php -l. - Leeren Sie den INI-Cache (die Ordnerliste kommt aus den INI-Dateien) und die Template-Caches (kompilierte Templates
wurden gegen die alte Liste kompiliert):
php bin/php/ezcache.php --clear-tag=ini,template --allow-root-user. php bin/php/ezpgenerateautoloads.php -enur dann, wenn Sie Klassen hinzugefügt haben, die über die Autoload-Arrays statt überscriptgeladen werden.- Auf einer Entwicklungsinstallation:
./console exp:velocity deploy --allow-root-usererledigt all das und startet Velocity neu, dessen Worker die Registrierungen behalten, die sie beim Start vorgenommen haben. - Prüfen Sie den Namen auf jedem Siteaccess, der ihn verwendet:
{'x'|myext_initials}darf nichtOperator 'myext_initials' is not registeredprotokollieren, und das Skript, das die Eigentümer auflistet, darf Ihren Namen nicht neben einer anderen Klasse zeigen.
Verwandte Seiten
- Registrierungsreihenfolge und Überschreibungen
- Die Schnittstelle der Operatorklasse
- Einen Operator Schritt für Schritt anlegen
- Einstellungen und INI-Dateien
- 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.