Carnet Wiki

Exemples de jointures qui marchent

Version 5 — November 2021 JLuc

Ici, on ne montre QUE le tag de la boucle, avec les tables explicitées et les critères. Mais je ne serai pas étonné 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.

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 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 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/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 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 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 que sur les plugins un peu actifsou courants .

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>