Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Die swark-Operatoren

Wie die Erweiterung swark ihre 37 Template-Operatoren mit je einer Klasse pro Operator registriert, die Basisklasse SwarkOperator mit Parameterzeichenketten der Form name=default und kompilierten execute()-Aufrufen…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/template-operators/swark-operators.md

On this page

This page is a translation. Read the English original

Die swark-Operatoren

Die Erweiterung swark (extension/swark/, GPL 2.0, 2008 für das Produkt geschrieben, von dem dieser Kernel abstammt) fügt kleine Hilfsoperatoren hinzu, eine Klasse pro Operator in extension/swark/autoloads/classes/. Diese Seite erklärt, wie sie aufgebaut und registriert werden; die beiden folgenden Seiten dokumentieren jeden Operator:

Inhalt

  1. Registrierung
  2. Die Basisklasse
  3. Namen, die kollidieren
  4. Der Besitzer kann während einer Anfrage wechseln

Registrierung

extension/swark/settings/site.ini.append.php fügt swark zu [TemplateSettings] ExtensionAutoloadPath[] hinzu. Die Autoload-Datei extension/swark/autoloads/eztemplateautoload.php enthält eine Zeile:

$eZTemplateOperatorArray = SwarkOperators::operators();

SwarkOperators::operators() (extension/swark/autoloads/SwarkOperators.php) ordnet 37 Operatornamen Klassen zu und gibt pro Name eine Definition zurück ('class' => ..., 'operator_names' => array( <name> )). Ihre template.ini.append.php führt außerdem serialize und unserialize in [PHP] PHPOperatorList[] auf, was die template.ini des Kernels bereits tut.

Die Basisklasse

Jeder Operator erweitert SwarkOperator (autoloads/classes/SwarkOperator.php). Ihr Konstruktor nimmt den Operatornamen und Parameterzeichenketten entgegen: 'name' ist ein erforderlicher Parameter, 'name=value' ein optionaler, dessen Standardwert die Zeichenkette nach = ist (not_found_key=-1 hat also die Zeichenkette -1 als Standardwert). Alle Parameter haben den Typ mixed. modify() ruft die statische Methode execute( $operatorValue, $namedParameters ) der Klasse auf und verwendet deren Rückgabewert.

operatorTemplateHints() kennzeichnet jeden swark-Operator für die Elementtransformation: Der Compiler schreibt einen direkten Aufruf von <Class>::execute() in das kompilierte Template und füllt fehlende Parameter mit ihren Standardwerten. Nur variable_names schaltet das ab (seine transformation() gibt false zurück), weil er das Template-Objekt braucht.

Namen, die kollidieren

Sieben swark-Namen werden auch anderswo registriert. Auf einer Entwicklungsinstallation steht swark in ExtensionAutoloadPath[] vor owsimpleoperator und ezjscore, und eine spätere Definition eines Namens ersetzt eine frühere:

NameVerhalten in swarkZuletzt registriert vonErgebnis auf einer Entwicklungsinstallation
json_encode$value|json_encode oder json_encode( $value )ezjscore (json_encode( $hash ))der Operator von ezjscore
str_replace$text|str_replace( search, replace )owsimpleoperator (PHP str_replace)der Operator von owsimpleoperator
strpos, strrposgibt -1 zurück, wenn nichts gefunden wirdKernel eZTemplateStringsOperator (gibt false zurück)hängt von der ersten Verwendung ab, siehe unten
substrlength 0 bedeutet "bis zum Ende"Kernel eZTemplateStringsOperatorhängt von der ersten Verwendung ab
ltrim, rtrimoptionale charlistKernel eZTemplateStringsOperatorhängt von der ersten Verwendung ab

Die swark-Klassen für diese Namen sind zusammen mit den anderen dokumentiert; auf einer Entwicklungsinstallation kann sich ein Template nicht darauf verlassen, sie zu erreichen.

Der Besitzer kann während einer Anfrage wechseln

Der Kernel-Operator eZTemplateStringsOperator wird aus lib/eztemplate/classes/eztemplateautoload.php vor den Erweiterungen registriert, sodass die swark-Definitionen von strpos, strrpos, substr, ltrim und rtrim ihn in der Operatortabelle ersetzen. Sobald aber ein beliebiger Operator der Kernel-Klasse zum ersten Mal läuft, legt die Engine dieses Objekt an und registriert es für jeden Namen in seiner operatorList() (eZTemplate::registerOperatorsInternal()), womit sie diese fünf Namen für den Rest der Anfrage zurückholt. Das Ergebnis von strpos hängt daher davon ab, ob ein Operator wie strlen früher in der Anfrage lief, in irgendeinem Template:

1 strpos before:  [{'abc'|strpos( 'z' )}] {'abc'|strpos( 'z' )|get_type}
2 strlen:         {'abc'|strlen}
3 strpos after:   [{'abc'|strpos( 'z' )}] {'abc'|strpos( 'z' )|get_type}

Ausgabe:

1 strpos before:  [-1] integer
2 strlen:         3
3 strpos after:   [] boolean[false]

Das kompilierte Template liefert dasselbe Ergebnis. Verlassen Sie sich auf keine der beiden Varianten dieser Namen: Prüfen Sie mit |gt( -1 ) und |ne( false() ), oder verwenden Sie contains/begins_with der Template-Bibliothek. Die allgemeinen Regeln stehen unter Registrierungsreihenfolge und Überschreibungen.

Verwandte Seiten

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.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x