Maßgeschneiderte Operatoren entwickeln

PHPTAL enthält einige grundlegende Operatoren: „not:“, „exists:“, „string:“, „php:“, „path:“.

Diese Operatoren sind in den ZPT-Spezifikationen definiert. PHPTALES kann mit eigenen Operatoren zur Bearbeitung von Zeichenketten, Kalenderdaten, Währungen, oder was auch immer erweitert werden.

Ziel der Anwendung jedweden Operators ist es, ein Stückchen PHP-Code zurückzugeben, der in den aus der Vorlage generierte PHP-Code integriert wird.

Operatoren werden während der Vorlagenzerlegung angewendet. Wenn Sie das Verhalten eines Operators verändern, müssen Sie alle vorher erzeugten PHP-Dateien löschen und die Vorlagen neu zerlegen lassen.

Beachten Sie, daß Operatoren Code und keine Daten ausgeben!

Jede PHP-Funktion, die mit "phptal_tales_" beginnt, definiert einen Operator.

Operatoren erwarten zwei Argumente::

For example, in the following TAL template,

<span tal:replace="some-modifier: my/path/value"/>

The src argument will be "my/path/value", and the $nothrow boolean will be false, because tal:replace requires the path to be fully resolvable.

Ein Ausdruck wie:

<span tal:replace="some-modifier: my/path/value | other/path"/>

nutzt zwei Operatoren:

Zur Erinnerung: path: wird implizit verwendet, sollte kein anderer Operator angegeben sein.

Operatoren können andere Operatoren verwenden, um einfacheren PHP-Code zu erhalten; siehe das folgende Beispiel:


//
// This modifier will return a money formated string (XXX.XX)
//
// usage:
//
//      money: path/to/my/amount
//
// this modifier uses phptal_tales() function to generate the
// PHP code that will return the value of the modifier argument.
//
// in the example:
//
//      money: path/to/my/amount
//
// the produced code will be something looking like:
//
//      sprintf("%01.2f", phptal_path($ctx->path, "to/my/amount"))
//
// This code will be included right into the template where needed.
//
// @param string $src
//      The expression string
// @param string $nothrow
//      A boolean indicating if exceptions may be throw by phptal_path if
//      the path does not exists.
// @return string
//      PHP code to include in the template
//
function phptal_tales_money( $src, $nothrow )
{
    // remove spaces we do not require here
    $src = trim($src);
    return 'sprintf("%01.2f", '.phptal_tales($src, $nothrow).')';
}