Carnet Wiki

Catalogue des Exemples de jointures utilisées qui marchent

Version 7 — Novembre 2021 JLuc

html - Cette page présente l’entier éventail des jointures à 2 ou 3 tables de SPIP (noyau et plugin dist) et les jointures à 3 tables trouvées dans les plugins de la zone.
- Cette page ne montre QUE le tag de la boucle, avec les tables explicitées et les critères. Mais il se peut que les derniers perfectionnements du compilateur prennent aussi en compte les balises utilisées dans la boucle, auquel cas pour bien comprendre ce qu’il se passe, il faudrait compléter ces citations par la liste des balises utilisées.
- Il y a déjà aussi des exemples dans la doc de spip.net : html" class="spip_url spip_out auto" rel="nofollow external">https://www.spip.net/fr_article4254.html

Jointures à 3 tables dans SPIP

Dans SPIP 4 et les plugins dist, on trouve 8 occurrences d’une jointure explicite à 3 tables : 7 font la même jointure du document vers la table des types de documents document , et 1 tente une jointure des documents vers l’article courant.

Accéder au type d’un document

Par exemple dans modeles/document_case.html :

<BOUCLE_docslies(DOCUMENTS documents_liens types_documents){id_document}{id_objet}{objet}{statut?}>

Filtrer sur l’article auquel est associé un document

Dans squelettes-dist/inclure/documents.html ça marche plus bien avec SPIP 4 : https://git.spip.net/spip/dist/issues/4834

<BOUCLE_documents_decompte(DOCUMENTS spip_documents_liens articles) {id_article?}{objet?}{id_objet?} {media!=image} {texte=''} {vu=non}>

Jointures à 2 tables dans SPIP

Des documents vers leurs types
Ces mêmes liaisons se font aussi parfois avec 2 tables seulement.

Par exemple dans modeles/audio_emb.html :

<BOUCLE_ext(DOCUMENTS types_documents) {id_document=#ENV{id,#ENV{id_document}}} {tout}>

Des MESSAGES vers leurs auteurs

Dans organiseur on trouve une grande variété dans l’écriture des jointures : avec ou sans majuscules et en passant ou pas par la table de lien, mais toujours sans le préfixe ’spip_’.

Dans organiseur/prive/objets/liste/messages-recus.html :

<BOUCLE_compte_non_lus(MESSAGES auteurs){destinataire?#ENV{destinataire}}{id_auteur?}{type!=pb}{type?}{where?}{statut?}{recherche?}{non_lu}>[(#NOM|vide)]</BOUCLE_compte_non_lus>

Dans organiseur/prive/rss on trouve

<BOUCLE_A(messages auteurs_liens){doublons M}{auteurs_liens.id_auteur}>

mais aussitôt après :

<BOUCLE_RSS(messages auteurs){!par date_heure}{!doublons M}{0,10}>

puis

<BOUCLE_message_rv(messages auteurs_messages){lang_select=non}{par date_heure}{inverse}{statut="publie"}{rv=oui}{auteurs_messages.id_auteur=#ID_AUTEUR}>

On trouve aussi plusieurs occurrences de cette dernière jointure dans
spip/prive/ical_prive.html, qui inverse présente en prime une intéressante inversion de l’ordre d’apparition des tables :

<BOUCLE_message_n_a(AUTEURS auteurs_messages){lang_select=non}{id_message}>

Modifications opérées par un auteur
Dans prive/rss/revisions.html :

<BOUCLE_RSS(VERSIONS auteurs){id_version >1}{!par date}{0,10}{id_secteur ?}{id_auteur ?}>marche

Liste de plugins

Dans svp/formulaires/inc-admin_plugin.html :

<BOUCLE_plugins(PAQUETS plugins){tout}{par multi nom, paquets.prefixe}{!par constante, actif}{id_depot=0}{actif ?}{constante ?IN #ENV{constante}}>

Dépot d’un plugins
Dans svp/prive/squelettes/hierarchie.html :

<BOUCLE_plugin(PLUGINS depots) {id_plugin}{0, 1}>

Jointures à 3 tables des plugins de la zone

La majorité des jointures sont là encore des jointures des documents vers documents_types. Je ne les reprends pas ici et ne liste que des jointures pas déjà vues et présentes dans des plugins un peu actifs.

Plugin coordonnées

<BOUCLE_add(ADRESSES adresses_liens auteurs){id_auteur}>
<BOUCLE_mail(EMAILS emails_liens auteurs){id_auteur=#ENV{id_auteur}}>
<BOUCLE_num(NUMEROS numeros_liens auteurs){id_auteur}>

Plugin emballe_medias_collections

Cette boucle a besoin d’une jointure explicite car elle a des critères sur les documents ?

<BOUCLE_medias_collection_ajouter(ARTICLES spip_documents_liens spip_documents){id_auteur=#SESSION{id_auteur}}{id_secteur?}{documents.media == #ENV{document_media,.*}}{!par maj}{pagination #ENV{pagination,9}}{doublons medias_ajoutes}>

Jointures à 3 tables des squelettes de la zone

Je ne liste que des jointures pas déjà vues. Il faudrait vérifier si les squelettes sont compatibles SPIP 4.

Sarkaspip

<BOUCLE_filtre_motscles(MOTS mots_articles articles){type != squelette_habillage}{articles.id_article > 0}{articles.id_rubrique==#BRANCHE_SPECIALISEE{agenda}}{fusion mots.titre}{par mots.titre}{pagination #CONFIG{sarkaspip_noisettes/pas_pagination_filtre, 10}}>

Collezion : MOTs vers ARTICLES
C’est dans une boucle GROUPE. Ça semble présenter des motclés, mais lesquels ?
De toute façon c’est pour un vieux SPIP.

<BOUCLE_mot(MOTS spip_mots_articles spip_articles) {articles.statut = publie} {fusion mots.id_mot}{id_groupe}>
 <li class="#GET{li}"><a href="#URL_MOT">#TITRE</a></li>
</BOUCLE_mot>