Les plugins filtres (1.5+)

De TheliaDoc
Aller à : navigation, rechercher

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:

  1. Invoquer le constructeur de la classe FiltreBase, en lui passant l'expression régulière qui définit le filtre.
  2. 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.