Carnet Wiki

Exemples de jointures qui marchent

Version 4 — Novembre 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 Dans modeles/document_case.html !
html</code >  :

<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 Mauvais exemple dans inclure/documents .html ça marche plus pas bien avec SPIP 4 : https://git.spip.net/spip/dist/issues/4834

<code class=« spip »><BOUCLE_documents_decompte(DOCUMENTS

&lt;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 Visiblement ces liaisons peuvent se font faire avec 2 tables seulement.

Par exemple dans 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 :
<code class=« spip class= »html ">
(#NOM

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 
&lt;/ cadre }>
 &lt;/cadre >


{{Liste de plugins}}


Dans svp/formulaires/inc-admin_plugin.html :
<code class="spip">
<BOUCLE_plugins(PAQUETS plugins){tout}{par multi nom, paquets.prefixe}{!par constante, actif}{id_depot=0}{actif ?}{constante ?IN #ENV{constante}}>
</code>


{{Dépot d'un plugins}}
Dans svp/prive/squelettes/hierarchie.html :
<code class="spip">
<BOUCLE_plugin(PLUGINS depots) {id_plugin}{0, 1}>
</code>


{{{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}}


<cadre class='spip'>
<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}}>

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>