Article Précedent / Suivant

, par Matthieu Marcillaud

Dans SPIP, il est facile de faire afficher un lien « Article précédent » ou « Article suivant » en fonction d’un critère d’âge... Mais si l’on souhaite d’autres critères, comme un tri par numéro de titre, comment peut-on s’y prendre ?

Par date

Par date, la commande est simple ; Si l’on est dans une boucle ARTICLES on peut utiliser les critères age_relatif et exclus pour trouver l’article précédent ou le suivant :

<BOUCLE_actuel(ARTICLES){id_article}>
<h1>#TITRE</h1>

<BOUCLE_precedent(ARTICLES) {age_relatif>=0}{!par date}{0,1} {exclus}>
<a rel="prev" href="#URL_ARTICLE">#TITRE</a><br />
</BOUCLE_precedent>

<BOUCLE_suivant(ARTICLES) {age_relatif<0}{par date}{0,1} {exclus} >
<a rel="next" href="#URL_ARTICLE">#TITRE</a><br />
</BOUCLE_suivant>
 
</BOUCLE_actuel>

Par num,titre

Oui, mais si l’on souhaite l’article qui est juste avant dans l’ordre alphabétique, ou par numéro de titre, la manipulation est différente et nécessite de jongler avec les balises #SET et #GET. Ici, cela affiche les articles précédent et suivant de la même rubrique, classés {par num titre, titre} :

#SET{art,#ARRAY{0,0}} 
<BOUCLE_actuel(ARTICLES){id_article}>
[(#SET{art,[(#GET{art}|push{#ID_ARTICLE})]})]

<h1>#TITRE</h1>

#SET{url_precedent,''} #SET{titre_precedent,''}
#SET{url_suivant,''} #SET{titre_suivant,''}
#SET{trouve_actuel,''}

<BOUCLE_get_precedent_suivant(ARTICLES){id_rubrique}{par num titre,titre}>
[(#GET{trouve_actuel}|!={''}|oui)
	[(#GET{url_suivant}|=={''}|oui)
		#SET{url_suivant,#URL_ARTICLE}
		#SET{titre_suivant,#TITRE}
	]  			
]
[(#ID_ARTICLE|=={#ENV{id_article}}|oui)
	#SET{trouve_actuel,'ok'}
]
[(#GET{trouve_actuel}|=={''}|oui)
	#SET{url_precedent,#URL_ARTICLE}
	#SET{titre_precedent,#TITRE}
]
</BOUCLE_get_precedent_suivant>


[<a rel="prev" href="(#GET{url_precedent})">[(#GET{titre_precedent})]</a>]

[<a rel="next" href="(#GET{url_suivant})">[(#GET{titre_suivant})]</a>]

</BOUCLE_actuel>