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”.

updated on 24 July 2005

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