Mescolare e ordinare elementi eterogenei di SPIP

Ecco un ciclo per pubblicare e ordinare una lista di elementi eterogenei di spip (ad esempio rubriche e articoli)

Principio generale

Questo esempio mostra come pubblicare una una miscela di articoli e rubriche.

Il problema per visualizzare assieme rubriche e articoli è che è che non si può fare un ciclo che seleziona alllo stesso tempo stesso i due tipi di elementi.

È possibile creare un ciclo o di ARTICOLI o di RUBRICHE

Siamo quindi obbligati a utilizzare due cicli diversi, il che complica un po la pubblicazione dei due tipi di oggetti in una unica lista ordinata.

Qui è un ciclo che offre una soluzione per la visualizzazione in ordine di data:

Ecco un ciclo che offre una soluzione per la visualizzazione in ordine di data:

<BOUCLE_rubriques(RUBRIQUES) {par date} {inverse}>

<BOUCLE_articles(ARTICLES) {par date} {inverse} {doublons} {date>#DATE}>
Article: #DATE #TITRE<br>
</BOUCLE_articles>
Rubrique: #DATE #TITRE<br>

</BOUCLE_rubriques>

<BOUCLE_article_fin(ARTICLES) {par date} {inverse} {doublons}>
Article: #DATE #TITRE<br>
</BOUCLE_article_fin>

Il cui risultato sarà:

Rub: 2005-07-21 16:55:59 Blog
Art: 2005-07-21 16:39:54 And you, where are you?
Art: 2005-07-08 17:12:38 Resta politici brillanti (almeno 1)
Art: 2005-07-04 16:33:58 Déménagement
Rub: 2005-07-01 16:08:12 Computing
Rub: 2005-07-01 16:08:12 Out There
Art: 2005-07-01 16:08:12 Easy Personal Podcasting
Art: 2005-07-01 15:38:30 Ecole Polytechnique de ???

La soluzione è in realtà facile da capire:

  1. si comincia con un ciclo su tutte le rubriche (BOUCLE_rubriques)
  2. per ogni rubrica si controlla se ci sono articoli che devono essere pubblicati prima grazie al criterio {date>#DATE}
  3. poi si pubblica la rubrica
  4. dopo aver pubblicato tutte le rubriche si pubblicano gli articoli restanti. Quelli più vecchi di tutte le rubriche del sito

Il criterio {doublons} permette di non stampare gli articoli più di una volta.

Altri ordinamenti

Se si desidera cambiare il criterio di ordinamento bisogna modificare i criteri di conseguenza per i campi desiderati.

Per esempio se uno vuole ordinare attraverso i numeri nei titoli si può modificare il codice così:

  • {par date} {inverse} con {par num titre}
  • {date>#DATE} con {titre<#TITRE}

Sottigliezze con id_rubrique

Fate attenzione: questo ciclo selezionava tutti gli articoli e le rubriche del sito.
Se si desidera pubblicare solo gli articoli e le sottorubriche di una rubrica data è necessario modificare opportunamente il criterio id_rubrique nel ciclo degli articoli
_articles.

EImmaginiamo di essere dentro al seguente ciclo:

<BOUCLE_principale(RUBRIQUES) {id_rubrique}>

{id_rubrique} nel ciclo _articles, si selezioneranno solo gli articoli dellla rubrica del ciclo _rubriques e non quelli della rubrica del ciclo _principale
.

Dovremo dunque utilizzare questo criterio:
{id_rubrique = #_principale:ID_RUBRIQUE} che specifica che si devono prendere gli articoli della rubrica principale.

Si avrà dunque:

<BOUCLE_principale(RUBRIQUES) {id_rubrique}>

...

<BOUCLE_rubriques(RUBRIQUES) {id_parent} {par date} {inverse}>

<BOUCLE_articles(ARTICLES) {id_rubrique=#_principale:ID_RUBRIQUE} {par date} {inverse} {doublons} {date>#DATE}>
Article: #DATE #TITRE<br>
</BOUCLE_articles>
Rubrique: #DATE #TITRE<br>

</BOUCLE_rubriques>

<BOUCLE_article_fin(ARTICLES) {id_rubrique} {par date} {doublons}>
Article: #DATE #TITRE<br>
</BOUCLE_article_fin>

...

</BOUCLE_principale>

Altre miscele

Si possono mescolare tra loro allo stesso modo anche altri elementi di spip. Ad esempio articoli e brevi.

<BOUCLE_breves(BREVES) {par date} {inverse}>

<BOUCLE_articles(ARTICLES) {par date} {inverse} {doublons} {date>#DATE}>
Article: #DATE #TITRE<br>
</BOUCLE_articles>
Rubrique: #DATE #TITRE<br>

</BOUCLE_breves>

<BOUCLE_article_fin(ARTICLES) {par date} {inverse} {doublons}>
Article: #DATE #TITRE<br>
</BOUCLE_article_fin>

Ci si può spingere oltre e mescolare tre elementi differenti:

<BOUCLE_rubriques(RUBRIQUES) {par date} {inverse}>
<BOUCLE_articles(ARTICLES) {par date} {inverse} {doublons} {date>#DATE} {lang}>
<BOUCLE_breves(BREVES) {par date} {inverse} {doublons} {date>#DATE} {lang}>
Brev: #DATE #TITRE<br>
</BOUCLE_breves>

Art: #DATE #TITRE<br>
</BOUCLE_articles>

<BOUCLE_breves2(BREVES) {par date} {inverse} {doublons} {date>#DATE} {lang}>
Brev: #DATE #TITRE<br>
</BOUCLE_breves2>

Rub: #DATE #TITRE<br>

</BOUCLE_rubriques>

<BOUCLE_article_fin(ARTICLES) {par date} {inverse} {doublons} {lang}>
<BOUCLE_breves_fin1(BREVES) {par date} {inverse} {doublons} {date>#DATE} {lang}>
Brev: #DATE #TITRE<br>
</BOUCLE_breves_fin1>
Art: #DATE #TITRE<br>
</BOUCLE_article_fin>

<BOUCLE_breves_fin2(BREVES) {par date} {inverse} {doublons} {date>#DATE} {lang}>
Brev: #DATE #TITRE<br>
</BOUCLE_breves_fin2>

In questo modo si mescolano rubriche articoli e brevi. Si è aggiunto un ciclo BREVES che sono considerate prima di tutto il resto.
Si ha dunque:

  1. il ciclo _breves nel ciclo _articles che trova le brevi più giovani dell’articolo corrente,
  2. il ciclo _breves2 nel ciclo _rubriques che trova tutte le brevi più giovani della rubrica ma più vecchi dell’articolo più giovane della rubrica,
  3. il ciclo _breves_fin1 nel ciclo _article_fin che trova le brevi più giovani dell’articolo più vecchio di tutta la rubrica.
  1. il ciclo _breves_fin2 che trova le brevi più di tutti gli articoli e rubriche

Non è bello tutto questo?

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

Dernière modification de cette page le 22 gennaio 2010