Volem, en un bucle, recuperar les informacions d’articles d’una (o diverses) secció a la que se li assigna una paraula clau (que nosaltres coneixem).
<BOUCLE_a(ARTICLES spip_mots_rubriques spip_mots) {titre_mot=truc}>
crearà la petició sql següent:
SELECT articles.id_rubrique,
articles.id_article,
...
articles.lang
FROM spip_articles AS <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+YXJ0aWNsZXM8L2NvZGU+"></span>
INNER JOIN spip_mots_rubriques AS L1
ON L1.id_rubrique = articles.id_rubrique
INNER JOIN spip_mots AS L2
ON L2.id_mot = L1.id_mot
WHERE articles.statut = 'publie'
AND L2.titre = 'truc'
GROUP BY articles.id_article
Volem en un bucle seleccionar aleatòriament un document a dins d’un sector. électionner aléatoirement un document dans un secteur. És a dir que aquest sector no conté articles, només seccions amb documents vinculats (fototeca).
<BOUCLE_d(spip_documents_liens rubriques)
{objet = rubrique}
{rubriques.id_secteur = 13}
{par hasard}
{0, 1}>
#LOGO_DOCUMENT
</BOUCLE_d>
- la taula spip_documents_liens és una taula que fa inventari els enllaços (unions) entre un document i un objet (article, secció, paraula, lloc...).
Entrades tipus d’aquesta taula podrien semblar-se a:
id_document | id_objet | objet | vu |
---|---|---|---|
14 | 36 | article | non |
363 | 66 | rubrique | non |
... | ... | ... | ... |
Per tant, anirem a buscar a dins d’aquesta taula els documents relacionats a una secció {objet = rubrique}
Però volem, també, que aquesta secció sigui descendent de la secció sector d’id 13
Hem d’establir, per tant, a dins de la nostra petició una unió entre la taula spip_documents_liens i spip_rubriques
Aquesta unió es farà per una banda:
l’id_objet de spip_documents_liens, de l’altra
l’id_rubrique de spip_rubriques
Per això indicarem a SPIP que volem aquesta unió específica donant les 2 taules al bucle <BOUCLE_d(spip_documents_liens rubriques)...
Finalment, per especificar la nostra restricció respecte al sector 13, precisarem el criteri {rubriques.id_secteur = 13}
especificant explícitament el nom complet del camp (nom de la taula inclòs) per tal que la petició no vagi a buscar un camp spip_documents_liens.id_secteur que no existeixi.
- a partir d’aquest bucle, per tant, tindrem llavors accés a tots els camps de spip_documents_liens i a tots els de spip_rubriques :
#ID_DOCUMENT
#ID_OBJET
#OBJET
#VU
#ID_RUBRIQUE
#ID_PARENT
#TITRE
#DESCRIPTIF
#TEXTE
#ID_SECTEUR
...
- la petició sql creada pel nostre bucle:
SELECT rand() AS alea,
spip_documents_liens.id_document
FROM spip_documents_liens AS `spip_documents_liens`
INNER JOIN spip_rubriques AS L1
ON L1.id_rubrique = spip_documents_liens.id_objet
AND spip_documents_liens.objet = 'rubrique'
WHERE spip_documents_liens.objet = 'rubrique'
AND L1.id_secteur = 13
GROUP BY spip_documents_liens.id_document,
spip_documents_liens.id_objet,
spip_documents_liens.objet
ORDER BY alea
LIMIT 0,1
- finalment, l’etiqueta #LOGO_DOCUMENT ens retornarà el codi font html:
<img src='local/cache-vignettes/L135xH150/Image_10-d84e2.png'
width='135' height='150' style='height:150px;width:135px;' alt=''
class='spip_logos' />
I si volem el nom del fitxer document, que no podem tenir directament amb aquesta petició ja que el camp spip_documents.fichier no es recollit (no hi ha unió amb la taula spip_documents), llavors haurem de declarar una unió suplementària a la taula spip_documents:
<BOUCLE_d(spip_documents_liens documents rubriques)
{objet = rubrique}
{rubriques.id_secteur = 13}
{par hasard}
{0, 1}>
#LOGO_DOCUMENT / #FICHIER
</BOUCLE_d>
Petició creada:
SELECT rand() AS alea,
spip_documents_liens.id_document,
L2.fichier
FROM spip_documents_liens AS <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+c3BpcF9kb2N1bWVudHNfbGllbnM8L2NvZGU+"></span>
INNER JOIN spip_documents AS L2
ON L2.id_document = spip_documents_liens.id_document
INNER JOIN spip_rubriques AS L1
ON L1.id_rubrique = spip_documents_liens.id_objet
AND spip_documents_liens.objet='rubrique'
WHERE spip_documents_liens.objet = 'rubrique'
AND L1.id_secteur = 13
GROUP BY spip_documents_liens.id_document,
spip_documents_liens.id_objet,
spip_documents_liens.objet
ORDER BY alea
LIMIT 0,1
Alerta núm. 1:
- aquí, tenim gairebé accés a tots els camps de les 3 taules
«gairebé» però alerta als camps homònims:
els #TITRE, #DESCRIPTIF, #MAJ, #STATUT i #DATE mostrats, que són camps homònims a spip_documents i spip_rubriques, seran els de spip_documents (taula primera de la petició)!
Alerta núm. 2:
- les escriptures de nom de taula
si :
<BOUCLE_d(DOCUMENTS_LIENS
<BOUCLE_d(documents_liens
<BOUCLE_d(SPIP_DOCUMENTS_LIENS
<BOUCLE_d(spip_documents_liens
són équivalentes ;
com:
<BOUCLE_d(documents_liens documents rubriques
<BOUCLE_d(documents_liens documents spip_rubriques
<BOUCLE_d(documents_liens documents RUBRIQUES
són equivalent;
i fins i tot:
<BOUCLE_d(documents_liens documents
<BOUCLE_d(documents_liens spip_documents
<BOUCLE_d(spip_documents_liens spip_documents
<BOUCLE_d(spip_documents_liens documents
també són equivalent;
no és el mateix amb:
<BOUCLE_d(DOCUMENTS_LIENS DOCUMENTS
<BOUCLE_d(documents_liens DOCUMENTS
<BOUCLE_d(SPIP_DOCUMENTS_LIENS DOCUMENTS
<BOUCLE_d(spip_documents_liens DOCUMENTS
on la manera com s’esciu documents ocasiona una pèrdua d’unió entre spip_documents_liens i spip_documents.