Un exemple de jointures entre plusieurs tables dans une boucle SPIP
- Date de publication
- 7/déc.
2007 - Commentaires
- 3 commentaires
- Tags
Les jointures sont disponibles depuis quelque temps dans SPIP, mais tout comme plein de nouveautés des dernières versions, je n’y avait pas encore goûté. C’est maintenant fait, et aux quelques errements initiaux près, c’est vraiment à connaitre. Voici un exemple très concret.
Utilisant le plugin Agenda pour gérer des événements1, j’ai eu besoin de lister chronologiquement les événements rattachés à des articles ayant un mot clef particulier.
Le code du squelette aurait été beaucoup plus simple si les mots clefs étaient rattachés directement aux événements, mais je préfère largement attacher les mots clefs aux articles, l’ajout aux événements étant laborieux.
Le problème, donc, est de lister {par date} des (EVENEMENTS) liés à des (ARTICLES) qui ont au moins un mot clef avec {id_mot=3}.
La technique traditionnelle serait de faire une boucle (ARTICLES) pour filtrer selon le mot clef, puis dans son corps une boucle sur les (EVENEMENTS) de chaque article.
Malheureusement, cela ne permet pas un classement {par date} de l’ensemble des (EVENEMENTS), mais seulement article par article.
C’est là que les jointures arrivent à la rescousse. L’idée est donc de faire une unique boucle, qui porte sur deux sources de données, les (ARTICLES) et les (EVENEMENTS), le lien étant l’id_article.
Voici ce que cela donne pour lister des événements passés rattachés aux articles de la rubrique courante ayant un mot clef avec {id_mot=3} :
<li>[(#DATE_DEBUT|affdate{'d/m/Y'})]</li>
</BOUCLE_evenements>
Il faut tester différentes syntaxes pour arriver au résultat, mais globalement, quelques règles découvertes sur le tas peuvent aider :
- La première donnée peut être identifiée par son alias, mais les autres doivent être identifiées par leur nom de table, hors préfixe
- Il semble que le compilateur de SPIP comprend bien que l’age demandé est celui des
(EVENEMENTS)et non celui des(ARTICLES), sans doute parce que les(EVENEMENTS)sont l’élément principal de la boucle - Alors que le critère
{id_mot=3}fonctionne sur une boucle(ARTICLES), il ne fonctionne pas sur la tablearticles, d’où nécessité d’ajouter la seconde jointure sur la tablemots_articles
A vous de tester !
- Notes
[1] En remplacement de mon vieil agenda développé il y a quelques années
Commentaires
Backtweets
Avec un tag commun
- Une arborescence dynamique et contextuelle
- Le même agenda que Gastero Prod avec SPIP
- Gastero Prod 4, les standards et l’accessibilité
- La galerie SPIP, pour réutiliser facilement les images et documents
- Un site valide et accessible avec SPIP, c’est (de plus en plus) possible !
Derniers billets
-
Quelques petits ajustements...
Vous l’avez peut-être remarqué vous même si vous faites partie des rares à venir de temps en temps sur le site, mais certainement pas si vous me lisez via le flux RSS, j’ai fait quelques ajustements, notamment sur la page d’accueil.
- Date de publication
- 11/mars
2010 - Commentaires
- 2 commentaires
- Tags
-
Les spammeurs s’y connaissent en CSS
Un p’tit malin qui se fait appeler Sylvain a laissé un commentaire très sympathique sur mon billet précédent. Mais il a aussi glissé subrepticement un lien vers un site de poker fashion...
- Date de publication
- 1/mars
2010 - Commentaires
- 5 commentaires
- Tags
-
Tumblr aime mes méduses
Vous avez sans doute déjà vu ma belle photo de méduses fluorescentes — une de mes préférées — que ce soit ici, sur Flickr, JPG Magazine, deviantArt ou plus récemment sur RedBubble. Et bien elle vient d’être publiée en série sur de nombreux micro blogs Tumblr, lui apportant une énorme visibilité.
- Date de publication
- 25/fév.
2010 - Commentaires
- aucun commentaire
- Tags

Derniers commentaires
ventrea sur Quelques petits ajustements... : Sympa les polices. Juste un petite remarque, dans les textes le lissage des caractères est assez (...)
NiKo sur Les spammeurs s’y connaissent en CSS : Vérifie très vite, car effectivement tu es vulnérable aux XSS en l’état.
Cédric sur Les spammeurs s’y connaissent en CSS : Ça fait quelques temps déjà que ce genre de message fleurit dans les commentaires. La parade très (...)
Rik sur Les spammeurs s’y connaissent en CSS : Comme le dit un certain edas, autoriser l’attribut style c’est s’exposé à de belles XSS. Plus (...)
NiKo sur Un Netbook comme videur de cartes amélioré ? : C’est pour ça que perso je pré-derushe mentalement en ne déclanchant que si j’estime cela vraiment (...)
NiKo sur Un Netbook comme videur de cartes amélioré ? : A part de céder à la tentation d’un nouvel achat techno, je vois vraiment pas l’intérêt d’acheter (...)
NiKo sur Google Chrome sur Mac, bilan mitigé : > Pas de barre de titre, donc je ne connais pas le nom de la page dès que j’ai plus de 5 onglets (...)
Sur Commentaires désactivés temporairement : Un commentaire sur la 2.2.0 svn !
Frank Taillandier sur Google Chrome sur Mac, bilan mitigé : Avec la version 5.0.322 du canal de dev le drag’n’drop dans la barre de signet « marche » sauf (...)
Xavier sur Google Chrome sur Mac, bilan mitigé : Pour speed tracer, il faut lancer chrome avec le parametre —enable-extension-timeline-api (...)