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?

updated on 22 January 2010

Discussion

Aucune discussion

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom