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 :
Ce filtre se place dans une boucle rubrique, il permet de réaliser des accords orthographiques.
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.
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.
Premier filtre de test (extrait du code de BliP 0.9x, directement inspiré de la documentation) qui se place dans une boucle 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 :
car ce code produirait une erreur.
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 :
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.
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 :
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 :
Décrivons les balises :
#ID_ITEM a été générée par la boucle spip éxecuté sur la table "blip_config".#TYPE, #TITRE et #TEXTE sont également générées par la boucle spip#ENV{id_actuel} est une variable d’environnement, elle a été transmise en paramètre (via un inclure).Exécution du filtre de test :
#ID_ITEM est différente de la valeur de la balise #ENV{id_actuel}, alors ne rien faire.#TYPE est différente de "statique", alors ne rien faire.<h5> et </h5>#TYPE est différente de "dynamique", alors ne rien faire.#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
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.
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 ...
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 :
Le forum a été nettoyé ce jour ( 8 janvier 2008)
Oui mais toi, tu bricoles en permanence, alors tu commences à avoir le coup de main, et moi je ne pratique que le dimanche ...
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 !
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 ?
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
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...