Il criterio {doublons}
una volta scoperto diventa rapidamente indispensabile ai vostri modelli [1]. Con un po’ di curiosità è possibile realizzare effetti e selezioni molto interessanti, ma che non sono evidenti dalla lettura della documentazione di base su Spip.net, da cui leggiamo :
Il criterio {doublons}
o {unique}
[2] : permette di inibire la visualizzazione dei risultati già pubblicati in altre circuiti che utilizzano questo criterio. Questi due criteri sono rigorosamente identici.
Identici ? Non completamente ! Nel corso delle versioni di SPIP, doublons s’est arricchito di ulteriori possibilità :
- si possono assegnare nomi ai criteri doublons, e farne così coesistere molti in uno stesso codice,
- doublons permette la realizzazine di piroette tecniche attraverso l’utilizza dell’anti-doublons : !doublons
Utilizzo di base : escludere elementi già trattati nella pagina
Un esempio ci è dato nel modello sommaire della dist [3]
<BOUCLE_articles_recents(ARTICLES) {par date}{inverse} {0,2} {doublons}>
éléments à afficher, par exemple #TITRE
</BOUCLE_articles_recents>
<BOUCLE_autres_articles(ARTICLES) {par date}{inverse} {doublons} >
éléments à afficher, par exemple #TITRE
</BOUCLE_articles>
Si tratta di elencare gli articoli del sito per ordine cronologico invertito E di riservare un trattamento particolare agli ultimi due articoli pubblicati. Come vedete, i circuiti « _ articles_recents » e « _ autres_articles » sono costruite nello stesso modo. Dunque, secondo logica, devono restituire lo stesso elenco d’articles.
E’ grazie al lavoro del criterio « doublons » che i 2 articoli più recenti, già trattati nel primo circuito, non si troveranno nell’elenco pubblicato col circuito « _ autres_articles ».
Altro utilizzo corrente : escludere alcuni elementi
Un grande classico : escludere alcuni element che presentano una parola chiave.
Regolarmente sulla web-list spip-users si pone questo tipo di problema :
« Non riesco ad escludere elementi in funzione della loro parola chiave : ho provato »
<BOUCLE_rubriques(RUBRIQUES) {racine} {titre_mot!=invisible}{par num titre, titre}>
ma non funziona"
E’ a causa del punto esclamativo !
L’utente qui desidera scegliere tutte le rubriche che non hanno la parola chiave « invisible ». Ma, il messaggio mandato al database con {titre_mot != invisible}
, è che deve scegliere tutte le rubriche che HANNO una parola chiave E che la suddetta parola chiave sia diversa da « invisible ».
Questo cambia tutto. Infatti nel risultato apparirà ad esempio una rubrica alla quale è stata assegnata la parola chiave « bidule », che effettivamente risulta diversa da « invisible » (ok !), anche se la rubrica è legata anche alla parola chiave « invisible » (arg !) e, non appariranno rubriche a cui non è stata assegnata nessuna parola chiave ( l’opposto del risultato sperato !). [4]
La soluzione : inserire un circuito vuoto che sceglie secondo la parola chiave e un’altro circuito che cerca i risultati utilizzando il criterio
{doublons}
.
Riprendendo il nostro esempio otteniamo :
<BOUCLE_exclure(RUBRIQUES) {racine} {titre_mot=invisible}{doublons}>
</BOUCLE_exclure>
Questo circuito sceglie tutte le rubriche che hanno la parola chiave « invisible » , ma non stampa nulla.
<BOUCLE_rubriques(RUBRIQUES) {racine}{par num titre, titre} {doublons}>
{le traitement à effectuer ici}
</BOUCLE_rubriques>
Questo secondo circuito sceglierà tutte le altre rubriche, grazie al criterio doublons ed applicherà loro il trattamento scelto.
Dare un nome ai doublons per utilizzarne molti nello stesso file
Obiettivo : gestire su una pagina d’accoglienza la pubblicazione di link ad articoli, e stringhe degli annunci(le brevi). La presentazione degli ultimi due articoli pubblicati e degli ultimi due annunci è diversa dagli altri.
Per esempio, ritroviamo lo stesso schema già visto con i circuiti della DIST. Si tratta semplicemente di fare coabitare senza conflitto alcuni circuiti molto simili. Dare un nome ai doublons eviterà che le selezioni dell’uno interferiscano con l’altro.
<BOUCLE_communiques_recents(ARTICLES) {!par date}{id_mot=1} {0,2} {doublons com}>
éléments à afficher, par exemple #TITRE
</BOUCLE_communiques_recents>
<BOUCLE_autres_communiques(ARTICLES) {!par date}{id_mot=1} {doublons com} >
éléments à afficher, par exemple #TITRE
</BOUCLE_autres_communiques>
<BOUCLE_articles_recents(ARTICLES) {!par date} {0,2} {doublons art}>
éléments à afficher, par exemple #TITRE
</BOUCLE_articles_recents>
<BOUCLE_autres_articles(ARTICLES) {!par date} {doublons art} >
éléments à afficher, par exemple #TITRE
</BOUCLE_articles>
Generalmente, dare un nome ai doublons è una buona pratica per evitare ogni conflitto presente e futuro (i modelli evolvono). Inoltre il codice diventa più leggibile.
Nel quadro d’un utilizzo avanzato, potete provare l’utilizzo di segnaposti SPIP. Ad esempio : {doublons #TITRE}
o anche {doublons #_mabouboucle:TITRE}
o ancora {doublons (#_mabouboucle:TITRE|supprimer_numero)}
.
Utilizzo avanzato : anti-doublons o come costruire una pila di dati da trattare
Meccanica di anti-doublons
Nel seguito vari « doublons » permetteranno di raccogliere i risultati di piu circuiti che utilizzano differenti criteri ; « !doublons » permette poi di applicare alla lista completa il trattamento richiesto.
Lo schema d’utilizzazione è il seguente :
Si sceglie una prima serie di articoli (senza stampare nulla)...
<BOUCLE0(ARTICLES){id_mot=2}{doublons A}></BOUCLE0>
... quindi una seconda serie di articoli (senza stampare nulla)...
<BOUCLE1(ARTICLES){id_auteur=1}{doublons A}></BOUCLE1>
... si pubblica la lista completa secondo le proprie necessità utilizzando l’anti-doublons.
<BOUCLE2(ARTICLES){par date}{!doublons A}>#TITRE<br></BOUCLE2>
Un esempio d’anti-doublons
Obiettivo : fare un circuito che recupera gli articoli di tutte le rubriche a eccezione delle rubriche 2 e 3, E riguardo agli articoli della rubrica 4, soltanto quelli di meno di 60 giorni.
La soluzione : ci occorre un primo circuito che andrà a cercare tutti gli articoli escludendo quelli delle rubriche 2, 3 e 4...
<BOUCLE0(ARTICLES) {id_rubrique !IN 2,3,4}{doublons tri1}></BOUCLE0>
... poi dobbiamo recuperare gli articoli di questa rubrica con un secondo circuito...
<BOUCLE1(ARTICLES) {id_rubrique=4}{age<60}{doublons tri1}></BOUCLE1>
... e infine un’ultimo circuito pubblica con l’anti-doublons gli articoli scelti con criteri a piacere.
<BOUCLE2(ARTICLES){par date}{!doublons tri1}>#TITRE<br></BOUCLE2>
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |