Due articoli prima di quello corrente e due dopo in ordine alfabetico

Ecco una combinazione di cicli per pubblicare in ordine alfabetico due articoli prima e due articoli dopo l’articolo corrente.

Obiettivo

Immaginiamo che il sito contenga gli articoli con i seguenti titoli :

titolo id
a 10
b 3
c 4
m 11
z 6

e che si voglia pubblicare 5 articoli in ordine alfabetico con l’articolo corrente al centro. Per esempio, se l’articolo corrente è “c” :

  • a
  • b
  • c
  • m
  • z

Con un ciclo ?

Si potrebbe fare un solo ciclo per pubblicare 5 articoli consecutivamente, ordinati per titolo :

<B_articolo>
<ul>
<BOUCLE_articolo(ARTICLES){par titre} {0,5}>
<li>#TITRE</li>
</BOUCLE_articolo>
</ul>
</B_articolo>

Il problema è che non c’è modo per dire a SPIP che l’articolo corrente deve essere al centro di questa lista. Inoltre, non è possibile manipolare gli ID per fare questo tipo di selezione, poiché non c’è nessuna garanzia che gli articoli siano stati creati in ordine alfabetico.

Gli articoli prima e dopo

Si può infatti selezionare tutti gli articoli prima e dopo l’articolo corrente con la combinazione di cicli seguente :

<B_articolo_corrente>
<ul>
<BOUCLE_articolo_corrente(ARTICLES){id_article}>
    <BOUCLE_prima(ARTICLES){titre <= #_articolo_corrente:TITRE}{exclus}{id_rubrique}{par titre}{inverse}>
<li>#TITRE</li>
    </BOUCLE_prima>

<li><em>#TITRE</em></li>    

    <BOUCLE_dopo(ARTICLES){par titre}{titre>#_articolo_corrente:TITRE}{id_rubrique}>
       <li>#TITRE</li>
    </BOUCLE_dopo>

</BOUCLE_articolo_corrente>
</ul>
</B_articolo_corrente>

Il problema è che se si limita il primo ciclo a selezionare 2 articoli con il criterio {0,2}, SPIP li ordina per titolo dalla Z alla A, oltre a selezionarne solo 2. Si avranno quindi i due articoli che ci interessano, ma ordinati al contrario. Riprendendo l’esempio precedente :

  • b
  • a
  • c
  • m
  • z

Giocare con il criterio doublons

Ciò che resta da fare è di giocare con il criterio doublons per fare la cosa seguente :
-  selezionare i 2 articoli prima : BOUCLE_seleziona_prima,
-  escludere tutti gli altri articoli : BOUCLE_escludi,
-  pubblicare gli articoli prima selezionati nel giusto ordine : BOUCLE_pubblica_prima.

<B_articolo_corrente>
<ul>
<BOUCLE_articolo_corrente(ARTICLES){id_article}>    
    <BOUCLE_seleziona_prima(ARTICLES){doublons
prima}{0,2}{titre <= #_articolo_corrente:TITRE} {exclus} {id_rubrique}{par titre}{inverse}>
    </BOUCLE_seleziona_prima>
       
    <BOUCLE_escludi(ARTICLES){doublons
prima} {doublons escludi}>
</BOUCLE_escludi>

    <BOUCLE_pubblica_prima(ARTICLES){doublons escludi}{par titre}>
       <li>#TITRE</li>
    </BOUCLE_pubblica_prima>
    
<li><em>#TITRE</em></li>
    

    <BOUCLE_dopo(ARTICLES){par titre}{titre>#_articolo_corrente:TITRE}{0,2}{id_rubrique}>
       <li>#TITRE</li>
    </BOUCLE_dopo>

</BOUCLE_articolo_corrente>
</ul>
</B_articolo_corrente>
Avvertenze :
  1. utilizzando i criteri {titre <= #_articolo_corrente:TITRE} {exclus}, ci si assicura che gli articoli aventi lo stesso titolo dell’articolo corrente saranno posizionati prima di esso,
  2. questo ciclo è adatto solo se si vuole ordinare più di un articolo prima e dopo in ordine alfabetico. Se si vogliono fare delle cose più semplici, si veda “Article Précédent / Article Suivant”.

Dernière modification de cette page le 24 juillet 2005

Discussion

Aucune discussion

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom