Les plugins filtres (1.5+) : Différence entre versions

De TheliaDoc
Aller à : navigation, rechercher
m
m
Ligne 1 : Ligne 1 :
 
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.
 
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()''.
+
La classe de base de ces plugins Filtre est <code>FiltreBase</code>. Il s'agit d'une classe abstraite: les classes descendantes doivent implémenter la méthode <code>calcule()</code>.
  
 
Pour créer un plugin Filtre il faut:  
 
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.
+
# Invoquer le constructeur de la classe <code>FiltreBase</code>, 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.
+
# Implémenter la méthode <code>calcule()</code>, 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.
 
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:
 
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'',
+
* un fichier <code>Filtrepasvrai.class.php</code>,
* qui doit se trouver dans le répertoire ''filtrepasvrai'',
+
* qui doit se trouver dans le répertoire <code>filtrepasvrai</code>,
* le tout dans ''client/plugins''.
+
* le tout dans <code>client/plugins</code>.
 
+
''Filtrepasvrai.class.php'' contiendra le code suivant:
+
  
 +
<code>Filtrepasvrai.class.php</code> contiendra le code suivant:
 +
<pre>
 
   <?php
 
   <?php
 
   require_once(dirname(realpath(__FILE__)) . '/../../../classes/filtres/FiltreBase.class.php');
 
   require_once(dirname(realpath(__FILE__)) . '/../../../classes/filtres/FiltreBase.class.php');
Ligne 32 : Ligne 32 :
 
   }
 
   }
 
   ?>
 
   ?>
 +
</pre>
 +
La méthode <code>calcule()</code> 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.
  
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 <code>$match</code> contient le détail du résultat trouvé. Par exemple, si le texte du template analysé contient:
 
+
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
+
<pre>bla bla bla #FILTRE_pasvrai(0||vérifié !) bla bla bla</pre>
  
Le contenu de ''$match'' sera le suivant lors de l'appel à calcule() :
+
Le contenu de <code>$match</code> sera le suivant lors de l'appel à <code>calcule()</code> :
  
* ''$match[0]'' contient la totalité du résultat trouvé. Dans l'exemple ci-dessus, ''$match[0] = "#FILTRE_pasvrai(0||vérifié !)"''
+
* <code>$match[0]</code> contient la totalité du résultat trouvé. Dans l'exemple ci-dessus, <code>$match[0] = "#FILTRE_pasvrai(0||vérifié !)"</code>
* ''$match[1]'' contient le résultat de la première parenthèse capturante, soit: ''$match[1] = "0"''
+
* <code>$match[1]</code> contient le résultat de la première parenthèse capturante, soit: <code>$match[1] = "0"</code>
* ''$match[2]'' contient le résultat de la seconde parenthèse capturante, soit: ''$match[2] = "vérifié !"''
+
* <code>$match[2]</code> contient le résultat de la seconde parenthèse capturante, soit: <code>$match[2] = "vérifié !"</code>
  
L'organisation de ce tableau ''$match'' est conforme au résultat de la fonction PHP [http://php.net/manual/fr/function.preg-match-all.php preg_match_all()] avec utilisation du paramètre PREG_SET_ORDER.
+
L'organisation de ce tableau <code>$match</code> est conforme au résultat de la fonction PHP [http://php.net/manual/fr/function.preg-match-all.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:
+
<code>calcule()</code> doit retourner le résultat du filtre, sous forme de chaine de caractères. Dans notre exemple, le résultat retourné par <code>calcule()</code> 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
+
<pre>bla bla bla vérifié ! bla bla bla</pre>
  
== Les autres méthodes de FiltreBase: ''init()'', ''destroy()'', ''prerequis()'' ==
+
== Les autres méthodes de FiltreBase: <code>init()</code>, <code>destroy()</code>, <code>prerequis()</code> ==
  
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.
+
Comme tous les plugins, votre filtre dispose des méthodes <code>init()</code> et <code>destroy()</code>, 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:
+
De même, la méthode <code>prerequis()</code> 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 false si ces condition ne sont pas réunies,  
 
* la valeur true si tout est correct.
 
* 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.
+
Enfin, si une simple expression régulière n'est pas suffisante pour vos besoins, il vous suffit de surcharger la méthode <code>exec()</code> de la classe FiltreBase, qui est appelée automatiquement par le moteur pour implémenter un traitement particulier du texte du template.

Version du 16 avril 2011 à 00:10

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.