Pour SPIP, la vie est simple et est faite de boucles. La "boucle SPIP" est, avec la "balise", le "filtre" et le "critère", LA chose à comprendre pour faire ce que l’on veut avec ce logiciel libre qui permet de construire des sites Web interactifs.
Tentative d’explication…
Et, auparavant, quelques précisions et rappels :
ces boucles se trouvent sur les pages html des sites SPIP, que SPIP nomme les "squelettes" car ce sont les patrons-types qui définissent le look de toutes les pages du site : pour les pages présentant les articles, il existe un squelette html nommé article.html [1], pour les pages présentant les rubriques, c’est rubrique.html, etc.,
les squelettes html contiennent deux types d’informations : des données de mise en page (en lien avec les feuilles de style) et les fameuses boucles, qui servent à aller chercher dans les bases de données et à afficher les éléments des articles, rubriques, etc. en fonction des demandes de l’internaute,
SPIP a inventé ces boucles pour simplifier la vie aux utilisateurs. Répétez-le vous régulièrement ;-) ! En fait, on peut concevoir ses propres boucles sans rien connaître aux langages php et MySQL, et c’est à cela que servent les boucles : faire du php et du MySQL sans le savoir !
Voici par exemple comment peut se présenter une boucle d’affichage des infos-brèves :

Boucles, balises et filtres
Sans trop entrer dans les détails (on peut pour cela se reporter à http://www.spip.net/fr_article898.html et aux pages associées), décortiquons rapidement cette boucle, ce qui va nous permettre de découvrir les deux autres objets spécifiques à SPIP : les balises et les filtres.
Ici, le contenu de la boucle est décrit entre
et
![]()
Le nom de chaque boucle (ici, "breves") doit être unique dans la page squelette, pour éviter à SPIP de faire des confusions.
Par exemple, vous pouvez nommer BOUCLE_articles_recents1(ARTICLES) une 1ère boucle qui affichera les titres des x articles les plus récents de la rubrique 1 (inscrire comme critère id_rubrique="1"), puis nommer BOUCLE_articles_recents2(ARTICLES) une 2ème boucle qui affichera les titres des y articles les plus récents de la rubrique 2 (critère : id_rubrique="2"), etc.
Les codes compris entre
et
le début réel de la boucle servent à indiquer ce qu’il faut afficher en haut du pavé de brèves si celui-ci n’est pas vide, c’est-à-dire si le site contient au moins une info-brève (en l’occurrence, il s’agit d’afficher le mot Brèves dans la classe de style "menu-titre").
De même, les codes compris entre la fin de la boucle et
indiquent ce qui doit s’afficher en-dessous du pavé de brèves si celui-ci n’est pas vide (ici, rien de prévu).
Attaquons l’intérieur de la boucle.
Les balises sont les éléments précédés d’un dièse (#) : ici DATE, URL_BREVE et TITRE, qui appellent respectivement les contenus des champs date, url_breve et titre de la base de données
des brèves.
Les filtres sont les instructions qui suivent des balises pour préciser l’affichage des éléments tirés des bases de données : ici affdate_court est un filtre qui transforme la date extraite de la base de données sous format MySQL (par ex. « 2001-07-01 10-53-01 ») en date composée uniquement du quantième et du mois (dans cet ex. 1er juillet) [2].
Pour les curieux :
dans
les morceaux entre accolades s’appellent des critères. Ici, ils indiquent respectivement que les brèves doivent s’afficher par ordre de date, de la plus récente à la plus ancienne, en sélectionnant au maximum les 8 dernières brèves,
dès que vous voyez des crochets ([ et ]) dans une boucle, sachez-le : les crochets délimitent ce qu’il faut afficher autour d’une balise si le résultat entre parenthèses n’est pas une chaîne vide,
les tags
et
indiquent un lien hypertexte (ici, un lien est créé sur le titre de chaque brève, qui pointe vers la page directe de celle-ci). Mais ça, c’est du html tout bête.
Les critères SPIP
Ils suivent le nom de la boucle, entre accolades, pour restreindre le nombre de résultats affichés ou indiquer l’ordre d’affichage.
Par exemple :
* {id_parent} sélectionne les rubriques dont la rubrique courante est l'enfant
* {id_enfant} sélectionne la rubrique dont la rubrique courante est l'enfant
* {id_rubrique==^(1|3|7)$} sélectionne les éléments des rubriques 1, 3 et 7
* {id_rubrique ?} sert à choisir toutes les rubriques (par exemple sur la page d’accueil) sauf si on en spécifie une (quand on se trouve sur une page de rubrique par exemple)
* {id_rubrique IN 1,3,7} idem
* {id_rubrique NOT IN 12,17} exclue les rubriques 12 et 17
* {doublons} empêche l'affichage du même élément plus d'une fois dans la page. {doublons N°1} exclue les doublons d'une boucle ayant le même critère {doublons N°1}, mais pas les doublons d'une boucle ayant un critère {doublons N°2}
* {par date}
* {par date_redac}
* {par titre}
* {par hasard}
* {par date}{inverse}
* {par num titre}
* {par date, titre} triera les résultats par date puis les résultats ayant la même date seront triés par titre
* {id_article=5}
* {id_secteur=2}
* {titre==^[aA]} sélectionne les éléments dont le titre commence par a ou A
* {titre!==^[aA]} sélectionne les éléments dont le titre ne commence pas par a ou A
* {id_secteur != 2} sélectionne les éléments qui n'appartiennent pas au secteur numéro 2
* {age<30} sélectionne les éléments publiés depuis un mois
* {annee<=2003} pour les éléments publiés avant la fin de l'année 2003
* {a,b} où a et b sont des chiffres. a indique le résultat à partir duquel on commence l'affichage (attention, le premier résultat est numéroté 0) ; b indique le nombre de résultats affichés. Par exemple {0,10} affiche les dix premiers résultats ; {4,2} affiche les deux résultats à partir du cinquième (inclus)
* {0,n-2} sélectionne tous les résultats de la boucle sauf les 2 derniers
* {n-20,3} sélectionne 3 résultats en partant du 20e avant la fin
* {1/3} affiche le premier tiers des résultats. Ce critère est surtout utile pour présenter des listes sur plusieurs colonnes. Pour obtenir un affichage sur deux colonnes, il suffit de créer une première boucle, affichée dans une case de tableau, avec le critère {1/2} (la première moitié des résultats), puis une seconde boucle dans une seconde case, avec le critère {2/2} (la seconde moitié des résultats)
* {", "} affiche entre deux résultats une virgule suivie d'un espace
* {statut IN prop, publie} sélectionne les articles ou brèves dont le statut est "proposé à la publication" ou "publié en ligne".
* <BOUCLE_articles(ARTICLES) {branche}> retournera tous les articles de la rubrique actuelle et de ces sous-rubriques,
<BOUCLE_articles(ARTICLES) {!branche}> retournera tous les articles qui ne sont pas dans la rubrique actuelle ou ses sous-rubriquesLes filtres SPIP
Les filtres sont des instructions qui suivent des balises pour préciser l’affichage des éléments. Ils se trouvent dans le fichier /ecrire/inc_filtres.php.
Pour utiliser un filtre, il faut entourer la balise de parenthèses et de crochets : [machin (#BALISE|filtre) truc].
Comme pour les balises sans filtre, les crochets délimitent ce qu’il faut afficher autour de la balise si le resultat entre parenthèses n’est pas une chaîne vide.
Les filtres utilisés systématiquement par SPIP sont |typo et |propre ; le premier est un correcteur typographique, qui ajoute des espaces insécables avant les :, etc. ; le second interprète les raccourcis SPIP (italiques, gras, intertitres, notes de bas de page, etc.).
Si l’on reprend l’exemple ci-dessus de générationCyb, |affdate_court est un filtre qui transforme la date extraite de la base de données sous format MySQL (par ex. « 2001-07-01 10-53-01 ») en une date en lettres (dans cet ex. 1er juillet).
Les principaux filtres sont :
|majuscules
|justifier
|aligner_droite
|centrer
|supprimer_numero (enlève le numéro des titres numérotés : 1. Titre devient par exemple Titre)
|liens_ouvrants (remplace les liens SPIP en liens ouvrant dans une nouvelle fenêtre (target=blank))
|majuscules
|supprimer_tags (suppression de tous les <...>)
|textebrut (convertit un texte HTML en texte brut)
|affdate (affiche la date en français. Exemple : « 13 janvier 2001 »)
|reduire_image réduit les images à l'intérieur d'un texte, et peut donc être appliqué à la balise #TEXTE. Si l'on indique la longueur 0 en vertical ou en horizontal, seule l'autre dimension sera prise en compte pour la réduction. [(#LOGO_ARTICLE||reduire_image{60,0})] passera le logo à une dimension horizontale de 60 pixels maximum et à la dimension verticale qui ui est proportionnelle.
|url_absolue s'applique aux URL : [(#URL_ARTICLE|url_absolue)] et |liens_absolus aux textes, pour transformer les adresses relatives des liens et des images en url absolues (les url absolues sont utiles par exemple pour la syndication).
|sinon{texte alternatif}. le texte alternatif s'affiche si la balise est vide. |?{sioui, sinon} est aussi possible.NB : pour avoir une liste à jour des balises, des critères et des filtres : www.spip.net/@.
[1] Deux remarques :
[2] Sur les filtres, voir http://www.spip.net/fr_article901.html.
lorsque article.html existe dans un dossier "squelettes" à la racine du site, c’est lui qui est utilisé de préférence à celui qui se trouve dans le dossier "dist" ; de même pour rubrique.html, etc.,
il peut exister plusieurs squelettes articles si l’on a décidé d’attribuer par exemple un look différent par rubrique.
Mis en ligne le mardi 21 octobre 2003
Une tite mise a jour a base de http://www.spip.net/@ serait peut etre necessaire depuis la mise en ligne de l’article SPIP a beaucoup bouger.
Amitié