Les plugins filtres (1.5+)
Thelia 1.5 introduit un nouveau type de plugin, les plugins de type Filtre, qui offrent un moyen simple et léger de créer de nouveaux filtres.
La classe de base de ces plugins Filtre est FiltreBase
. Il s'agit d'une classe abstraite: les classes descendantes doivent implémenter la méthode calcule()
.
Pour créer un plugin Filtre il faut:
- Invoquer le constructeur de la classe
FiltreBase
, en lui passant l'expression régulière qui définit le filtre. - Implémenter la méthode
calcule()
, qui est automatiquement appelée pour chacun des résultats trouvés par cette expression régulière.
Vous aurez sans doute besoin de quelques connaissances sur les expressions régulières.
Ci-dessous l'implémentation du plugin Filtrepasvrai, qui offre le filtre #FILTRE_pasvrai. Ce plugin doit respecter la structure de fichiers classique d'un plugin Thelia:
- un fichier
Filtrepasvrai.class.php
, - qui doit se trouver dans le répertoire
filtrepasvrai
, - le tout dans
client/plugins
.
Filtrepasvrai.class.php
contiendra le code suivant:
<?php require_once(dirname(realpath(__FILE__)) . '/../../../classes/filtres/FiltreBase.class.php'); class Filtrepasvrai extends FiltreBase { public function __construct() { parent::__construct("`\#FILTRE_pasvrai\(([^\|]+)\|\|([^\)]+)\)`"); } public function calcule($match) { return $match[1] == '0' ? $match[2] : ''; } } ?>
La méthode calcule()
est appelée lorsque le moteur de Thelia analyse le template HTML d'une page de votre boutique, et ce pour chacun des résultats trouvés par l'expression régulière que vous avez spécifié dans le contructeur de votre filtre.
Lors de chaque appel, le paramètre $match
contient le détail du résultat trouvé. Par exemple, si le texte du template analysé contient:
bla bla bla #FILTRE_pasvrai(0||vérifié !) bla bla bla
Le contenu de $match
sera le suivant lors de l'appel à calcule()
:
-
$match[0]
contient la totalité du résultat trouvé. Dans l'exemple ci-dessus,$match[0] = "#FILTRE_pasvrai(0||vérifié !)"
-
$match[1]
contient le résultat de la première parenthèse capturante, soit:$match[1] = "0"
-
$match[2]
contient le résultat de la seconde parenthèse capturante, soit:$match[2] = "vérifié !"
L'organisation de ce tableau $match
est conforme au résultat de la fonction PHP preg_match_all() avec utilisation du paramètre PREG_SET_ORDER.
calcule()
doit retourner le résultat du filtre, sous forme de chaine de caractères. Dans notre exemple, le résultat retourné par calcule()
sera donc la chaine de caractères "vérifié !". Nous obtiendrons alors dans le texte du template:
bla bla bla vérifié ! bla bla bla
Les autres méthodes de FiltreBase: init()
, destroy()
, prerequis()
Comme tous les plugins, votre filtre dispose des méthodes init()
et destroy()
, qu'il peut surcharger si nécessaire lors de (respectivement) l'activation et de la désactivation de votre filtre depuis le back-office.
De même, la méthode prerequis()
vous permet de vérifier que les conditions de fonctionnement de votre filtre sont présentes (version de Thelia, présence d'autres plugins, où tout ce que vous jugerez nécessaire), et de retourner:
- la valeur false si ces condition ne sont pas réunies,
- la valeur true si tout est correct.
Enfin, si une simple expression régulière n'est pas suffisante pour vos besoins, il vous suffit de surcharger la méthode exec()
de la classe FiltreBase, qui est appelée automatiquement par le moteur pour implémenter un traitement particulier du texte du template.