Table des matières

Les filtres

Création de votre propre filtre de rendu

Un filtre de rendu doit être une classe étendue par patTemplate_OutputFilter. Vous devez placer le fichier qui contient votre filtre dans le répertoire patTemplate/OutputFilter.

Dans la classe vous avez juste besoin d’implémenter une méthode appelée ‘apply()’. Cette méthode va être appelée par patTemplate quand patTemplate::displayParsedTemplate() est appelée par le script. Avant que le résultat du code HTML soit envoyer au navigateur, votre filtre va avoir l’opportunité de modifer ou de filtrer le résultat HTML.

L’utilisation de cette méthode doit accepter un paramètre string, lequel va recevoir le code HTML. Après l’avoir modification, vous avez juste à retourner la modification HTML.

Un exemple simple

L’exemple suivant montre comment implémenter un filtre de rendu, celà supprime toutes les cassurs de lignes et les espaces spéciaux, l’indentation, etc. venant du code HTML avant d’être envoyer dans le navigateur. La classe à été placée dans un fichier patTemplate/OutputFilter/StripWhitespace.php (Ce qui est ici est déjà réellement ce qui est inclus dans la distribution).

01        <?PHP
02        /**
03        * patTemplate StripWhitespace output filter
04        *
05        * suppression de tout les whitespace et les remplace avec un simple espace.
06        *
07        * @package       patTemplate
08        * @subpackage    Filters
09        * @author        Stephan Schmidt <schst@php.net>
10        */
11        class patTemplate_OutputFilter_StripWhitespace extends patTemplate_OutputFilter
12        {
13           /**
14            * Le nom du filtre
15            *
16            * @access    protected
17            * @abstract
18            * @var    string
19            */
20            var    $_name    =    'StripWhitespace';
21       
22           /**
23            * supprime tous les whitespace venant du rendu.
24            *
25            * @access    public
26            * @param    string        data
27            * @return    string        data sans whitespace
28            */
29            function apply( $data )
30            {
31                $data = str_replace( "n", ' ', $data );
32                $data = preg_replace( '/ss+/', ' ', $data );
33           
34                return $data;
35            }
36        }
37        ?>

Apllication des filtres du rendu

Application d’un filtre de rendu est une tache facile. Vous avez juste à appeler une méthode de votre objet patTemplate et passer le filtre de rendu désiré. Vous pouvez créer un filtre de chaîne par application de plusieurs filtres de rendu, elle sera appelée sucèssivement dans l’ordre que vous les aurez appliqués.

01        <?PHP
02        require_once 'pat/patErrorManager.php';
03        require_once 'pat/patTemplate.php';
04       
05        $tmpl = &new patTemplate();
06        $tmpl->setRoot( 'templates' );
07        $tmpl->applyOutputFilter( 'StripWhitespace' );
08       
09        $tmpl->readTemplatesFromInput( 'page.tmpl', 'File' );
10       
11        /**
12        * Le filtre de rendu vas être appliqué ici
13        */
14        $tmpl->displayParsedTemplate();
15        ?>

Passage de paramètres au filtre

Vous pouvez également créer un filtre de rendu qui peut être paramétrable par le script qui applique le filtre. Si la classe du filtre a besoin d’accéder aux paramètres initialisé par le script, vous pouvez utiliser la méthode patTemplate_OutputFilter::getParam(). Quand un filtre est appliqué, tous les paramètres doivent être passés comme tableau(array) dans le second paramètre du patTemplate::applyOutputFilter().

Filtres d'entrées

Pourquoi un filtre d’entrées?

Vous pouvez utiliser des filtres d’entrées pour vos différentes tâches. Vous pourriez découper tous les espaces venant de vos templates pour accélérer le processus d’analyse, supprimer les commentaires inutiles ou décompresser les templates si ils sont enregistrer dans un format ZIP.

Vous pouvez également utiliser ceci dans quelques cas spéciaux, où vous avez besoin de modifier les templates mais sans pouvoir les modifier dans leurs endroits de stockages d’origine.

Implémenter un filtre d'entrées

L’implémentation d’un filtre d’entrée est exactement la même chose que de créer un nouveau filtre de rendu. Vous devez étendre une nouvelle classe venant de patTemplate_InputFilter et placer celle-ci dans un fichier qui se trouve dans le répertoire patTemplate/InputFilter. La dernière partie du nom de la classe doit être identique au nom du fichier.

Dans cette classe, vous devrez simplement implémenter une méthode:

string patTemplate_OutputFilter::apply( string templateCode )

patTemplate_Reader vas passer le code du template à la méthode avant d’être analysé par le lexer et vous pourrez modifier ces réglages comme bon vous semble.

Un exemple simple

L’exemple suivant découpe les commentaires HTML venant des templates avant qu’ils ne soient analysés. Ceci vous permet de les placer entre les balises <patTemplate:tmpl> et <patTemplate:sub>, bien qu’il ne soit pas permit de placer les données là.

01        <?PHP
02        /**
03        * patTemplate StripComments output filter
04        *
05        * supprimera tout les comments HTML.
06        *
07        * @package        patTemplate
08        * @subpackage    Filters
09        * @author        Stephan Schmidt <schst@php.net>
10        */
11        class patTemplate_InputFilter_StripComments extends patTemplate_InputFilter
12        {
13           /**
14            * Nom du filtre
15            *
16            * @access private
17            * @var    string
18            */
19            var    $_name    =    'StripComments';
20       
21           /**
22            * compresse les données
23            *
24            * @access    public
25            * @param     string        data
26            * @return    string        data sans whitespace
27            */
28            function apply( $data )
29            {
30                $data = preg_replace( '<!--.*-->msU', '', $data );
31           
32                return $data;
33            }
34        }
35        ?>

Application des filtres d'entrée

Application d’un filtre d’entrer est une tache facile. Vous devez simplement appelé une méthode dans votre objet patTemplate et lui passer les filtres d’entrées désirés. Vous pouvez créer un filtre de chaîne par application de plusieurs filtres d’entrées comme bon vous semble.

Si vous utilisez plus d’un filtre, ils vont être appelés dans l’ordre où vous les aurais appliqué.

01        <?PHP
02        require_once 'pat/patErrorManager.php';
03        require_once 'pat/patTemplate.php';
04       
05        $tmpl = &new patTemplate();
06        $tmpl->setRoot( 'templates' );
07        $tmpl->applyInputFilter( 'StripComments' );
08       
09        $tmpl->readTemplatesFromInput( 'page.tmpl', 'File' );
10       
11        /**
12        * le filtre d'entrer sera appliqué ici
13        */
14        $tmpl->displayParsedTemplate();
15        ?>

Passages de paramètres pour le filtre

Vous pouvez également créer un filtre d’entrée qui peut être paramétrable par script qui applique le filtre. Si la classe du filtre a besoin d’accéder aux paramètres initialisé par le script, vous pouvez utiliser la méthode patTemplate_InputFilter::getParam().

Quand un filtre est appliqué, tous les paramètres doivent être passés comme un tableau(array) dans le second paramètre de patTemplate::applyInputFilter().

Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki