Un exemple de jointures entre plusieurs tables dans une boucle SPIP
- Date de publication
- 7/déc.
2007 - 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
Partager
Pour faire un lien vers cet article, vous pouvez utiliser soit son URL canonique soit son URL courte :
Billets 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
-
Faut-il continuer à supporter Internet Explorer 6 ?
Article initialement publié dans le blog de Clever Age.
On ne va pas ergoter sans fin, tout le monde doit maintenant savoir que Internet Explorer 6 — IE6 pour les intimes — est un navigateur obsolète et dangereux. Et pourtant, certains continuent à l’utiliser. Faut-il les en dissuader, refuser de leur fournir son support, aller même jusqu’à leur empêcher l’accès, ou faut-il continuer à supporter (les faiblesses de) ce navigateur ?
- Date de publication
- 22/juillet
2010 - Tags
-
Les inscriptions à Paris Web 2010 sont ouvertes !
Paris Web 2010, c’est la cinquième édition de ce rendez-vous français annuel, devenu incontournable, pour se tenir informé des bonnes pratiques de développement Web. Go go go !
- Date de publication
- 2/juillet
2010 - Tags
-
Faciliter la reprise de tweets (les retweets) à l’ancienne sur Twitter
Même si Twitter a mis en place depuis maintenant un certain temps un mécanisme natif de retweets1, je préfère souvent continuer à utiliser les « RT » traditionnels, qui laissent la possibilité de commenter le tweet initial, ce que ne permet pas le retweet officiel. Une règle qui me paraît essentielle pour faciliter le retweet à l’ancienne, c’est de prévoir une taille de tweet suffisamment faible pour que le retweeteur voit son travail facilité, surtout si le tweet initial ne contient que très peu de mots inutiles.
- Date de publication
- 14/juin
2010 - Tags

Derniers commentaires
R03ER7 sur Le Jailbreak de l’iPhone ou de l’iPod Touch est-il légal ? : « Jailbreaker ne veut pas dire voler » mais plutôt « Permettre l’installation d’applications quand (...)
Sur Citation d’Oscar Wilde : sauf qu’il me semble qu’en vrai c’est une phrase de A de St Exupery !
Scandale sur Afficher les favicon dans la barre personnelle de Firefox sous Mac OS : Pour ceux qui, comme moi, manquent de place dans leur barre personnelle, j’ai aussi ajouté le (...)
Scandale sur Afficher les favicon dans la barre personnelle de Firefox sous Mac OS : merci pour le tuyau, ça marche. manque juste dans le tutoriel le chemin ou mettre le fichier, (...)
Nicolas Steinmetz sur Faut-il continuer à supporter Internet Explorer 6 ? : Parce que certaines entreprises sont encore sous WinNT / Win2000 à cause d’applications métiers ? (...)
ThierryD sur Prendre des éclairs (d’orage) en photo : Bonjour, Je me permet d’intervenir dans ce post pour vous faire part de ma technique pour (...)
ventrea sur Backup d’un Mac sur un NAS facile et sans bidouille, c’est possible ? : Time machine est pris en chagre par les dernières versions de firmware sur les nas Qnap (...)
Sur Une sauvegarde de fichiers en ligne très simple pour pas cher : Oui, j’ai le même genre et c’est vraiment pratique :) : https://www.axalot.fr
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 (...)
Maurice sur Backup d’un Mac sur un NAS facile et sans bidouille, c’est possible ? : Par contre, je ne pense pas que ça résolve le problème de performance lorsque la taille du backup (...)