Surcharger un filtre

Les filtres, que l’on utilise pour modifier le résultat d’une balise, ont un chargement particulier par rapport aux autres fonctions surchargeables de SPIP.

En effet, il est possible à la fois d’utiliser n’importe quelle fonction PHP, mais aussi de déclarer explicitement qu’une fonction est un filtre. Voici donc l’ordre dans lequel SPIP va chercher lorsqu’on utilise un filtre |modifier :

  1. filtre_modifier(…)
  2. filtre_modifier_dist(…)
  3. modifier(…)

Il est donc possible de surcharger une fonction PHP pré-existante pour modifier son comportement lorsqu’elle est appelée en tant que filtre (par exemple pour échanger l’ordre des arguments). Et cette surcharge est elle-même surchargeable une seconde fois, sur le même principe que les autres fonctions _dist.

Exemple

Dans le fichier ecrire/inc/filtres.php, SPIP surcharge la fonction explode() de PHP afin d’intervertir l’ordre des arguments, ce qui permet une utilisation et une lecture plus facile dans les squelettes.

/**
 * filtre explode pour les squelettes permettant d'ecrire
 * #GET{truc}|explode{-}
 *
 * @param strong $a
 * @param string $b
 * @return array
 */
function filtre_explode_dist($a,$b){return explode($b,$a);}

Cette première surcharge est ensuite de nouveau surchargeable, si une personne veut ajouter un comportement différent dans son site.

Auteur RastaPopoulos Publié le : Mis à jour : 12/03/23