Appliquer un filtre sur autre chose qu’une balise

Voilà un petit truc pour appliquer des filtres SPIP sur des chaînes non dynamiques dans le squelette

Méthode 1 : la balise vide

Le principe est assez simple :

  1. dans SPIP, on peut appliquer un filtre directement sur une balise ou sur un autre filtre,
  2. le filtre |sinon{'chaîne'} retourne « chaîne » si la balise sur laquelle on l’applique ne retourne rien,
  3. #REM est une balise pour mettre des commentaires et ne retourne jamais rien

=> donc [(#REM|sinon{'chaîne'})] retournera toujours « chaîne »

ainsi, on peut appliquer des filtres sur ce texte si on ajoute des filtres après |sinon. Par exemple :
[(#REM|sinon{'chaîne'}|unique)]

On peut utiliser cette astuce pour le filtre |unique et cacher des parties de boucles qui utilisent ce filtre.

On peut aussi imaginer qu’on a un filtre compteur qui somme des balises :

function compteur($valeur) {
  static $compteur;
  $compteur += $valeur;
  return $compteur;
}

et vouloir l’initialiser :
[(#REM|sinon{10}|compteur)]

Méthode 2 : la chaîne localisée

SPIP permet d’avoir des chaînes localisées, stoquées dans des fichiers local_fr.php3, local_en.php3 etc... en fonction de leur langue. On peut ensuite les appeler dans un squelette avec : <:chaîne:>

Dans SPIP 1.8.2 on peut appliquer des filtres sur ces balises de localisation. Ainsi, on peut appliquer un filtre sur une chaîne statique (potentiellement différente dans chaque langue du site) avec :

<:chaîne|filtre:>

Concrètement

Voici une application qui utilise la première méthode avec le filtre |unique.

On veut afficher la liste des auteurs de forums sur le site. Mais chez moi, y’a un méchant spameur qui s’appelle « Mortimer ». Je ne veux pas l’afficher dans la liste. j’ai donc ajouté :
[(#REM|sinon{'Mortimer'}|unique|?{'',''})] pour que la prochaine fois que le filtre |unique est appliqué au nom ’Mortimer’ (dans la boucle d’affichage des forums) il ne soit pas afficher.

<BOUCLE_articles(ARTICLES) {tout}>
<BOUCLE_lesforums(FORUMS) {id_article} {plat} {doublons lesforums}>
</BOUCLE_lesforums>
</BOUCLE_articles>

[(#REM|sinon{'Mortimer'}|unique|?{'',''})]

<B_affiche_auteurs>
<ul>
<BOUCLE_affiche_auteurs(FORUMS) {!doublons lesforums} {par auteur}>
[<ul>(#NOM|ucfirst|unique)</ul>]
</BOUCLE_affiche_auteurs>
</ul>
</B_affiche_auteurs>

Remarquez que, dans cet exemple, on utlise |ucfirst pour passer la première lettre de chaque nom en majuscule, on ne peut donc pas simplement utiliser le critère {auteur != Mortimer} puisqu’on n’est pas sûr que tous les messages soient signés avec le nom en majuscule.

Discussion

4 discussions

  • |majuscules|image_typo ne peut pas fonctionner car |majuscule utilise du CSS que image_typo ne prend pas en compte. IL faut utiliser directement une fonction php en filtre pour transformer le texte en majuscule avant d’appliquer image_typo. |strtoupper|image_typo devrait fonctionner.

    Cf. N’importe quelle fonction php comme filtre SPIP

    Répondre à ce message

  • 1

    chez moi les filtres |majuscules|image_typo ensemble ne fonctionnent pas
    j’ai bien l’image mais pas les majuscules

    Répondre à ce message

  • 1

    Dans un contexte multilingue ça permet donc d’utiliser par exemple le filtre images typographiques sur des balises multilingues utlisées dans l’interface... je vais tester ça.

    • cette syntaxe marche parfaitement et devient indispensable lorsqu’on veut gérer le multilinguisme et les images typographiques. merci pour cette précision.

      Cela donne des chaines sur genre :
      <:plan_site|majuscules|image_typo{police=Rational.ttf}:>

    Répondre à ce message

  • Bah franchement, Je vois bien ce que tu veux faire mais je trouve que c’est quand même lourd comme syntaxe... je dirais que c’est vraiment de la magouille... mais bon .. si ça peut permettre à ton site d’être...

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom