Il criterio doublons : la sua meccanica ed il suo utilizzo avanzato

Il criterio {doublons} una volta scoperto diventa rapidamente indispensabile ai vostri modelli. Permette selezioni molto interessanti ma la sua utilità nonè immediatamente comprensibile a una prima lettura della documentazione di «spip.net».

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>

Note

[2Attenzione: non confondere il criterio «unique» col filtro «unique» di cui si possono trovare applicazioni qua e .

[3si tratta del modello di default di SPIP che si trova nella cartella /DIST. Richiamo : non dovete modificare questi file, ma sistemare i file dei vostri modelli nella cartella /squelettes da creare allo stesso livello di /DIST, cioè alla radice del sito.

[4questo punto è tratto da questa discussione (GrazieCédric)

Dernière modification de cette page le 4 aprile 2008

Discussion

Aucune discussion

Rispondere all’articolo

Chi sei?

Per mostrare qui il tuo avatar, registralo prima su gravatar.com (gratis e indolore). Non dimenticare di fornire il tuo indirizzo email.

Inserisci qui il tuo commento

Questo form accetta scorciatoie SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Per creare i paragrafi, lascia delle linee vuote.

Aggiungi un documento

Suivre les commentaires : RSS 2.0 | Atom