Manual

7. Tworzenie własnych modyfikatorów wyrażeń

PHPTAL dostarcza podstawowe modyfikatory wyrażeń (not:, exists:, string:, php:, path:), które zostały zdefiniowane w specyfikacji ZPT ale umożliwia także dodawanie własnych modyfikatorów do przetwarzania łańcuchów znaków, dat, kwot pieniędzy, obiektów i innych danych.

Modyfikatory zwracają kod PHP, który jest dołączany do skompilowanego źródła szablonu.

Modyfikatory są uruchamiane w momencie przetwarzania szablonu. Jeśli działanie modyfikatora ulegnie zmianie będziesz musiał usunąć skompilowane pliki szablonu aby PHPTAL mogło ponownie go skompilować uwzględniając wprowadzone zmiany.

Modyfikatory tworzą kod, który nie może być wyświetlony poprzez funkcję echo.

Każda funkcja rozpoczynająca się od phptal_tales_ może być użyta jako modyfikator.

Modyfkatory pobierają 2 parametry :

  • $src : źródłowy łańcuch znaków po słowie kluczowym "modifier:"
  • $nothrow : zmienna logiczna, która okreźla, czy wyjątki mają być obsługiwane lub nie mają przez funkcję phptal_path(). Zmienna ta będzie uwzględniona także w przypadku modyfikatorów zagnieżdżonych (wywoływanych z wnętrza własnego modyfikatora phptal_tales_*).

Przykład, w szablonie umieszczamy modyfiaktor,

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

Parametr src przyjmie wartość my/path/value a zmienna $nothrow będzie FALSE ponieważ tal:replace wymaga pełnej ścieżki.

Wyrażenie typu :

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

Wywoła 2 modyfikatory :

  • some-modifier: z wartością my/path/value jako parametr $src i zmienna $nothrow z wartością TRUE, ponieważ wartość alternatywna istnieje
  • path: z other/path jako $src i $nothrow z FALSE, ponieważ wartość alternatywna nie została znaleziona w efekcie czego tal:replace nie zadziała prawidłowo.

Należy pamiętać, że modyfiaktor path: jest domyślnym modyfikatorm, jeśli inny nie zostanie użyty.

Modyfikatory mogą wykorzystywać inne modyfikatory aby wygenerować prostszy kod php. Poniżej znajduje się przykład modyfikatora formatującego łancuch znaków na kwote.

//
// Ten moldyfikator zwraca sformatowany lancuch znakow na kwote (XXX.XX)
//
// uzycie :
//
//      money: ziecka/do/mojej/kwoty
//
// modyfikator korzysta z modyfikatora phptal_tales_path (path:) aby wygenerowac
// kod php, ktory zwroci wartosc parametru modyfikatota.
//
// w przykladzie :
//
//      money: sciezka/do/mojej/kwoty
// 
// wyrazenie "wirtualnie" stanie sie money: path: sciezka/do/mojej/kwoty
//
// wygenerowany kod bedzie wygladal mniej wiecej tak :
//
//      sprintf("%01.2f", phptal_path($ctx->path, "do/mojej/kwoty"))
//
// Kod ten zostanie dolaczony do szablonu w miejscu gdzie jest wymagany.
//
// @param string $src
//      Wyrazenie lancuchowe
// @param string $nothrow
//      Zmienna logiczna okreslajaca czy wyjatki maja obyc obslugiwane przez phptal_path jesli
//      sciezka do danych nie istnieje.
// @return string
//      Kod PHP dolaczony do szablonu
//
function phptal_tales_money( $src, $nothrow )
{
    // usuniecie niepotrzebnych bialych znakow
    $src = trim($src); 
    return 'sprintf("%01.2f", '.phptal_tales_path($src, $nothrow).')';
}