[SPIP Zone] filtre si...

Bonjour à tous,

Il y a une fonctionnalité dont j'ai souvent besoin et je me demande
s'il n'y a pas déjà un plugin qui l'implémente:
il s'agit de pourvoir appliquer un filtre sur une balise, seulement si
une condition est remplie.

En général je l'implémente sous la forme d'un filtre nommé «filtre_si»
et je l'utilise de la manière suivante:

[(#TITRE|filtre_si{supprimer_numeros,#ENV{pas_de_num}|oui})] (exemple bidon...)

côté PHP ça donne:

function filtre_si($texte,$filtre,$cond) {
  if ($cond AND is_callable($filtre)) $texte = $filtre($texte);
  return $texte;
  
}

Est-ce que ça existe quelque part dans un plugin ?
Est-ce que ça intéresse que je fasse un mini-plugin avec cette fonction ?

--
Beurt

il s'agit de pourvoir appliquer un filtre sur une balise, seulement si
une condition est remplie.
.../...
function filtre_si($texte,$filtre,$cond) {
        if ($cond AND is_callable($filtre)) $texte = $filtre($texte);
        return $texte;

}

Attention, il ne suffit pas d'appeler $fonction($texte), il faut passer
par appliquer_filtre(), qui s'occupe de charger les fichiers qu'il faut, et
éventuellement de trouver des filtres |xxxx définis par des fonctions
nommées filtre_xxxx().

Est-ce que ça existe quelque part dans un plugin ?

pas à ma connaissance

Est-ce que ça intéresse que je fasse un mini-plugin avec cette fonction ?

-- Fil

Bonjour

Il y a une fonctionnalité dont j'ai souvent besoin et je me demande
s'il n'y a pas déjà un plugin qui l'implémente:
il s'agit de pourvoir appliquer un filtre sur une balise, seulement si
une condition est remplie.

Pas à ma connaissance... (j'ai plutôt entendu parler du "critère si"
proposé par Bonux mais pas de "filtre si")

En général je l'implémente sous la forme d'un filtre nommé «filtre_si»
et je l'utilise de la manière suivante:

[(#TITRE|filtre_si{supprimer_numeros,#ENV{pas_de_num}|oui})] (exemple bidon...)

Je n'ai pas tout compris mais en général on doit pouvoir arriver à la
même chose avec les filtres oui_non/sioui/sinon [i.e. "( |?{...,...})"
/ "( |oui)..." / "( |non)...)"]

Il y a aussi la possibilité d'appliquer des paramètres aux filtres ;
ceux que j'écris ont souvent des paramètres optionnels (donc avec une
valeur par défaut) qui peut être un booléen (pour le sioui/sinon)

Le 16 juin 2013 13:39, Fil <fil@rezo.net> a écrit :

Attention, il ne suffit pas d'appeler $fonction($texte), il faut passer par
appliquer_filtre(), qui s'occupe de charger les fichiers qu'il faut, et
éventuellement de trouver des filtres |xxxx définis par des fonctions
nommées filtre_xxxx().

Ah ! Merci du tuyau, je ne connaissais pas. je vais regarder comment
ça fonctionne.

--
Beurt

Le 16 juin 2013 13:54, Gildas Cotomale <gildas.cotomale@gmail.com> a écrit :

En général je l'implémente sous la forme d'un filtre nommé «filtre_si»
et je l'utilise de la manière suivante:

[(#TITRE|filtre_si{supprimer_numeros,#ENV{pas_de_num}|oui})] (exemple bidon...)

Je n'ai pas tout compris mais en général on doit pouvoir arriver à la
même chose avec les filtres oui_non/sioui/sinon [i.e. "( |?{...,...})"
/ "( |oui)..." / "( |non)...)"]

Bien sûr qu'on peut faire avec |oui ou |? mais ça rend l'écriture plus
lourde. ex.:

[(#ENV{pas_de_num}|oui|?{[(#TITRE|supprimer_numero)],[(#TITRE)]})]

Je trouve ça moins lisible (à cause de la répétition du #TITRE)... Et
encore c'est un cas assez simple.

Il y a aussi la possibilité d'appliquer des paramètres aux filtres ;
ceux que j'écris ont souvent des paramètres optionnels (donc avec une
valeur par défaut) qui peut être un booléen (pour le sioui/sinon)

Oui, je fais ça aussi parfois sur les filtres perso, mais sur les
filtres qui existent déjà...

--
Beurt

Et comment fais-tu avec des filtres demandant des paramètres ?
Est-ce possible d’avoir une écriture plus générique ?

Juste un point de détail, j’aurai vu la condition avant le nom du filtre, mais la logique des uns et des autres…

Cordialement

Le 16 juin 2013 16:25, Joseph <joseph@larmarange.net> a écrit :

Et comment fais-tu avec des filtres demandant des paramètres ?
Est-ce possible d'avoir une écriture plus générique ?

Là, je donnais un exemple simple que j'utilise souvent avec quelques
filtres dont l'arité est connue et le plus souvent avec un seul
paramètre (genre |supprimer_numero ou |url_absolue, etc.).

Mais, on peut imaginer de prendre un array en dernier paramètre avec
l'ensemble des autres arguments du filtre.

|filtre_si{nom du filtre,condition,autres arguments}

En fait, l'objet de mon message était de demander si ça intéressait
quelqu'un d'autre que moi pour voir si c'était utile de réfléchir à
quelque chose de générique sous forme de plugin. Si ça n’intéresse
personne je continuerai avec mes petites bidouilles perso :slight_smile:
Mais, si ça intéresse d'autres, il va falloir réfléchir à comment
rendre la chose à la fois générique *et* intelligible !

Juste un point de détail, j'aurai vu la condition avant le nom du filtre,
mais la logique des uns et des autres...

C'est justement une des questions d'intelligibilité qui se pose si un
plugin intéresse quelqu'un. Je n'ai pas de préférence
personnellement... J'avais mis la condition en second à cause du nom
du filtre: «filtre_si» avec le «filtre» en premier et le «si» en
second.

--
Beurt