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

Discussion

One discussion

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite / PostgreSQL
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparait.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

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