Carnet Wiki

Exemples de jointures qui marchent

Version 3 — Novembre 2021 JLuc

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

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

Mauvais exemple dans inclure/documents.html ça marche pas bien : 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
Visiblement ces liaisons peuvent se faire avec 2 tables seulement.

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 inverse 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 ?}>

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

Je ne liste que des jointures pas déjà vues et que sur les plugins un peu actifs ou 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.

Ahuntsic : documents vers leur article

C’est le même besoin que pour https://git.spip.net/spip/dist/issues/4834

[(#REM) Si un seul document est joint a l'article, et si le texte est vide,
	on incruste automatiquement ce document
]
<BOUCLE_documents_decompte(DOCUMENTS spip_documents_liens articles) {id_article} {mode=document}{texte=''}{extension !IN gif,jpg,png} {vu=non}>

Ya la même boucle vers la rubrique.

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>