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
:
-#
filtre_modifier(…)
-#
filtre_modifier_dist(…)
-#
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.