cent20.net
Se connecter
cent20.net
 

SPIP Filtres de test - Qui a dit impossible ?

Depuis que SPIP a introduit dans sa version 1.8 les filtres de test, il est possible de faire des squelettes conditionnels, sans utiliser ni connaitre le php. Exemples de filtres un peu fou. Débutant s’abstenir.

Pré-requis :

Reprise d’un exemple de la documentation officielle

Ce filtre se place dans une boucle rubrique, il permet de réaliser des accords orthographiques.

#TOTAL_BOUCLE
[(#TOTAL_BOUCLE|>{1}|?{' articles',' article'})] dans cette rubrique.

Si #TOTAL_BOUCLE renvoit un résultat supérieur à 1, c’est qu’il y a plus d’un article dans la rubrique, et donc on affiche "articles" (avec un "s").

Sinon c’est qu’il y a un article ou moins dans la rubrique, et donc on affiche article (sans le "s").

Oui mais voilà, on a le problème suivant : S’il n’y a aucun article dans la rubrique, avec le code ci-dessus, on va afficher "0 article dans cette rubrique.", ce qui est stupide, autant ne rien afficher du tout.

[(#TOTAL_BOUCLE)
[(#TOTAL_BOUCLE|>{1}|?{' articles',' article'})] dans cette rubrique.]
]

Si #TOTAL_BOUCLE est nul, alors ne rien afficher.

Sinon afficher "articles" ou "article" suivant la valeur de #TOTAL_BOUCLE, en respectant l’interprétation précédement donnée.

Niveau débutant avancé

Premier filtre de test (extrait du code de BliP 0.9x, directement inspiré de la documentation) qui se place dans une boucle article :

[(#POPULARITE_ABSOLUE|<{'3'}|?{'',' '})                                
<INCLURE{fond=inc_article_decompte_popularite}{id_article}>
]

Si la popularité de l’article est strictement inférieur à 3, alors ne rien faire.

Sinon, inclure de squelette inc_article_decompte_popularite.html dans la page en cours, l’inclusion passant l’identifiant de l’article en paramètre.

Remarque : Comme on procède a une inclusion, l’écriture du filtre est légèrement différente.

Il ne faut surtout pas faire :

[(#POPULARITE_ABSOLUE|<{'3'}|?{'',                    
<INCLURE{fond=inc_article_decompte_popularite}{id_article}>
}
)]

car ce code produirait une erreur.

Niveau intermédiaire

[(#ENV{tri}|!={'documents'}|?{'',' '})<INCLURE{fond=sommaire_documents}>]
[(#ENV{tri}|!={'commentaires'}|?{'',' '})<INCLURE{fond=sommaire_commentaires}>]
[(#ENV{tri}|!={'articles'}|?{'',' '})<INCLURE{fond=sommaire_articles}>]
[(#ENV{tri}|!={''}|?{'',' '})<INCLURE{fond=sommaire_articles}>]

Alors ici, on teste une variable qui a été passée en paramètre (via l’url par exemple).

Si la variable tri vaut documents, alors inclure le fichier sommaire_documents.html dans le fichier en cours, Sinon ne rien faire.

(on teste de même pour savoir si tri vaut "commentaires" ou "articles".)

Si la variable tri est vide, alors inclure le fichier sommaire_articles.html dans le fichier en cours, Sinon ne rien faire.

Les experts en spip suggéreraient de faire ceci :

[(#ENV{tri}|=={''}|?{'',' '})<INCLURE{fond=sommaire_ENV{tri}}>]
[(#ENV{tri}|!={''}|?{'',' '})<INCLURE{fond=sommaire_articles}>]

mais attention aux brèches de sécurité, car si un indélicat charge l’url ... ? tri=toto, alors si le fichier sommaire_toto.html existe, il sera inclus.

Niveau avancé

A lire avant de commencer : (spip-dev) Filtres imbriqués

Il est beau, il est frais, il est tout nouveau (avouez quand même que je le vends bien mon poisson !) c’est le système d’inclusion modulaire de BliP 2.x, système d’inclusion qui permet de paramètrer finement l’affichage de la partie publique du site et cela :

  • Sans détourner les mots clefs de leur usage.
  • Sans avoir à créer des articles de configuration.
  • Sans avoir à ouvrir et à modifier les fichiers squelettes.
  • Sans avoir à respecter une structure rigide (Ex : Liens dans rubrique n°6 uniquement)

Mais alors comment ça marche ?

Et bien c’est très simple, on créé des tables supplémentaires nommées "blip_nomdelatable", et en utilisant les possibilités du nouveau compilateur de SPIP, on interroge cette table, dans des boucles SPIP, et on affiche ce qui va bien, là ou ça va bien, en utilisant massivement de filtres de test.

Voilà un exemple de filtre de test, placé dans une boucle spip :

        [(#ID_ITEM|!={#ENV{id_actuel}}|?{'',
                [(#TYPE|!={'statique'}|?{'',
                        <h5 class="nopadding"><span [class="(#STYLE)"]>[<b>(#TITRE) :</b> ]#TEXTE</span></h5>
                })]    
                [(#TYPE|!={'dynamique'}|?{'',' '})
                        <INCLURE{fond=#TEXTE}>
                ]      
        }
)]    

Décrivons les balises :

  • La balise #ID_ITEM a été générée par la boucle spip éxecuté sur la table "blip_config".
  • Les balises #TYPE, #TITRE et #TEXTE sont également générées par la boucle spip
  • La balise #ENV{id_actuel} est une variable d’environnement, elle a été transmise en paramètre (via un inclure).

Exécution du filtre de test :

  • Si la valeur de la balise #ID_ITEM est différente de la valeur de la balise #ENV{id_actuel}, alors ne rien faire.
  • Sinon
    • Si la valeur de la balise #TYPE est différente de "statique", alors ne rien faire.
    • Si la valeur de la balise #TYPE est égale à "statique", alors afficher tout ce que entre <h5> et </h5>
    • Si la valeur de la balise #TYPE est différente de "dynamique", alors ne rien faire.
    • Si la valeur de la balise #TYPE est égale à "dynamique", alors inclure le squelette nommé "#TEXTE.html" dans la page en cours.

Ainsi, grâce à cette table externe, au possibilité du nouveau compilateur, aux filtres de test, on peut créer des squelettes 100% modulaire.

Toujours en utilisant les possibilités des filtres de spip, il est possible de donner la possibilité aux visiteurs de choisir le critère de tri d’une liste

Niveau expert

Il y a maîtriser et Maîtriser les filtres de spip. Moi je suis un grand bricoleur, mais certains maîtrisent vraiment, et je vous invite à consulter le petit jeu lancé par BoOz sur la liste USER de spip, et les réponses de Olivier G.

Exemples d’utilisations

Les exemples ci dessous sont essentiellement tirés des codes de BliP 2.x et BliP 3, en téléchargeant les archives, vous pourrez accéder intégralement aux sources ...

Forum

Merci de ne pas utiliser le forum ci dessous pour poser vos questions techniques.
Je n’aurais malheureusement pas le temps d’y répondre.

Vous pouvez par contre y poster :

  • Vos propres filtres de tests,
  • Vos propres bout de code qui marche, et ou qui améliorent ceux proposés ici
  • Vos avis divers et variés.

Le forum a été nettoyé ce jour ( 8 janvier 2008)


 
Olivier G.
Le 21 juin 2006

Mais moi aussi je bricole dans mon coin, faut pas croire...

 
Vincent ROBERT
Le 22 juin 2006

Oui mais toi, tu bricoles en permanence, alors tu commences à avoir le coup de main, et moi je ne pratique que le dimanche ...

 
Hélène
Le 17 juillet 2006

à rien à dire, c’est classe

 
Pierre
Le 9 août 2006

Super bonne documentation. Bravo et Merci

 
Anonyme
Le 27 mai 2007

Si #TOTAL_BOUCLE est nul, alors ne rien afficher.

déjà quand , dans une rubrique, aucun article n’est publié , la boucle sur ladite rubrique ne renvoie rien.
donc je ne vois pas à quoi sert d’écrire :
« [(#TOTAL_BOUCLE)
[(#TOTAL_BOUCLE|>1| ?’ articles’,’ article’)] dans cette rubrique.]
] »
ou alors j’ai rien compris !

 
Sdol
Le 14 novembre 2007

Vous allez rire ... j’essaye d’avoir moins d’articles sur ma page sommaire donc de voir à la baisse le paramètre TRI ... et je bloque ... c’est drôle hein ?

 
phdudu
Le 20 mars 2008

bonjour, si je puis me permettre de vous soumettre ceci :

le code :

[((#DATE|affdate_jourcourt)|==(#ENVdate|affdate_jourcourt)| ?’tagada’,’ * ’)] tsoin[, <:par_auteur :> (#LESAUTEURS)]

produit cela :

((2008-03-02 20:45:17|affdate_jourcourt)|==20 mars| ?’tagada’,’ * ’) tsoin ...

la première expression n’est jamais executée !

merci d’avance

 
basile
Le 31 juillet 2009

je me permet de répondre très tard (si si, 2 ans...) à Anonyme qui dit ne pas comprendre pourquoi on doit prévoir le cas d’une rubrique qui ne contient pas d’article...

une rubrique peut ne pas contenir d’article et être affichée : dans le cas ou elle contient d’autres rubriques qui elles, ont des articles...




modération à priori

Ce forum est modéré à priori : votre contribution n'apparaîtra qu'après avoir été validée par un administrateur du site.

Un message, un commentaire ?
  • (Pour créer des paragraphes, laissez simplement des lignes vides.)

Qui êtes-vous ? (optionnel)

SPIP 2.1.16 [19678] | BliP 3.0.7  | XHTML 1.0 | CSS 2.1 | RSS 2.0 | Plan du site
351 visiteurs hier, 1892839 depuis