Manual

3. Interfejs PHPTAL_Filter

Interfejs ten umożliwia stosowanie filtrów dla źródła szablonu (pre-filtr) lub wyniku po przetworzeniu (post-filtr).

Prefiltry wykonywane są przed przetworzeniem szablonu i nie będą wykonane dopóki plik źródłowy szablonu nie zostanie zmodyfikowany.

Postfiltry wykonywane są po każdym uruchomieniu szablonu.

<?php
require_once 'PHPTAL.php';
    
class MyPreFilter implements PHPTAL_Filter {
    public function filter($source){
        return $source;
    }
}

class MyPostFilter implements PHPTAL_Filter {
    public function filter($xhtml){
        return $xhtml;
    }
}

$tpl = new PHPTAL('mytemplate.html');
$tpl->setPreFilter(new MyPreFilter());
$tpl->setPostFilter(new MyPostFilter());
echo $tpl->execute();
?>

Możesz ustawić tylko jeden pre-Filtr i jeden post-Filtr poprzez metodę set*Filter. Jeśli użyć większej ilości filtrów możesz dodać je do pojedyńczej klasy implementującej interfejs PHPTAL_Filter, który uruchomi łańcuch filtrów.

<?php
require_once 'PHPTAL.php';

class FilterChain implements PHPTAL_Filter {
    private $_filters = array();

    public function add(PHPTAL_Filter $filter){
        $this->_filters[] = $filter;
    }

    public function filter($source){
        foreach ($this->_filters as $filter){
            $source = $filter->filter($source);
        }
        return $source;
    }
}

$myfilter = new FilterChain();
$myfilter->add(new CommentFilter());  // imaginary filter
$myfilter->add(new TidyFilter());     // imaginary filter

$tpl = new PHPTAL('mytemplate.html');
$tpl->setPostFilter($myFilter);
echo $tpl->execute();
?>