Critères {precedent} et {suivant}

Le plugin « Critère précédent / suivant » pour SPIP 2.1 est une expérimentation permettant de trouver, dans une boucle donnée, l’élément suivant ou l’élément précédent. Cet usage est principalement utile pour créer des navigations par rubrique ou par thème (mots-clés).

Expérimentation

Notez avant toute chose que les critères proposés sont fonctionnels, mais expérimentaux. Nous serions preneurs de retours d’utilisation et de tests de temps de calcul des pages utilisant ces critères par rapport aux boucles que vous utilisez habituellement pour réaliser ces navigations.

Utilisation

Imaginons que nous sommes dans une boucle ARTICLES dont l’identifiant d’article est connu :

<BOUCLE_article_en_cours(ARTICLES){id_article}>

</BOUCLE_article_en_cours>

Nous pouvons à l’intérieur réaliser une boucle sur tous les articles de la même rubrique, classés par date :

<BOUCLE_article_en_cours(ARTICLES){id_article}>
	<BOUCLE_articles_rubrique(ARTICLES){id_rubrique}{!par date}>
	#TITRE <br/>
	</BOUCLE_articles_rubrique>
	<br/>
</BOUCLE_article_en_cours>

Si l’on veut seulement l’article précédent de la même rubrique, il suffit d’ajouter le critère {precedent}. De la même façon, si l’on souhaite juste l’article suivant l’article en cours, on ajoute le critère {suivant} :

<BOUCLE_article_en_cours(ARTICLES){id_article}>
	<BOUCLE_article_precedent(ARTICLES) {id_rubrique} {!par date} {precedent}>
	Précédent : #TITRE <br/>
	</BOUCLE_article_precedent>

	<BOUCLE_article_suivant(ARTICLES) {id_rubrique} {!par date} {suivant}>
	Suivant : #TITRE <br/>
	</BOUCLE_article_suivant>
	<br/>
</BOUCLE_article_en_cours>

Ces deux critères fonctionnent quels que soient les critères de sélection de la boucle et quel que soit le tri choisi, à partir du moment où la table SQL interrogée a une clé primaire simple (non composée de plusieurs champs). Cela fonctionne donc pour tous les objets standards de SPIP : auteurs, articles, rubriques, documents, mots, etc.

Nécessaire

L’identifiant de la clé primaire de la boucle sur laquelle nous allons appliquer le critère {precedent} ou {suivant} doit être connu dans un élément parent (une boucle parente ou l’environnement du squelette). Sans cet identifiant, on ne peut pas trouver de suivant ou de précédent, cela va de soi.

Principe de fonctionnement

Ces critères {precedent} et {suivant} s’inspirent beaucoup du code du critère pagination de SPIP 2.1, capable de placer le numéro de pagination sur un identifiant d’article donné. Merci Cédric !

Prenons un cas simple :

<BOUCLE_suivant(RUBRIQUES){racine}{!par date} {suivant}>
#TITRE.
</BOUCLE_suivant>

L’action du critère est la suivante :

  1. on va chercher dans les boucles parentes, sinon dans l’environnement, l’identifiant de la boucle connue : ici, la valeur de id_rubrique pour cette boucle RUBRIQUES.
  2. on récupère l’ensemble des résultats répondant aux critères de sélection de la boucle, comme s’il n’y avait pas le critère {suivant}, c’est à dire ici, la liste de toutes les rubriques racines.
  3. la liste est parcourue jusqu’à trouver une entrée de la liste qui a la même valeur que l’identifiant de la boucle : que les id_rubriques soient égaux ici.
  4. on place le curseur de boucle sur l’élément de la liste qui était juste avant dans le cas du critère précédent, ou juste après dans le cas du critère suivant.
  5. on indique qu’il n’y a qu’un seul résultat à cette boucle. La boucle est alors affichée par SPIP.

Le calcul des éléments passe donc par une analyse des résultats de la boucle, ce qui fait que si la boucle d’origine renvoie un grand nombre de résultats, ce calcul peut être long et n’est pas optimisé. Néanmoins, il permet d’avoir des critères génériques pour afficher des éléments précédents et suivants.

Évolution

Une évolution possible est de pouvoir indiquer via un critère, dont le nom est encore à définir, de récupérer non pas 1 élément suivant ou précédent, mais d’indiquer de combien de lignes de résultats on se déplace avant ou après l’identifiant de boucle actif, d’une part, et d’obtenir autant de lignes de résultats que souhaitées.

Si des idées vous naissent :)

Inclusions fournies avec le plugin

Le plugin fournit en exemple une inclusion pour les articles, permettant d’afficher des liens vers les articles précédents et suivants.

L’inclusion est inclure/article_precedent_suivant. Il faut absolument lui transmettre un id_article !

<BOUCLE_art(ARTICLES){id_article}>
[(#INCLURE{fond=inclure/article_precedent_suivant,id_article})]
[(#INCLURE{fond=inclure/article_precedent_suivant,id_article,id_rubrique})] // dans la rubrique
[(#INCLURE{fond=inclure/article_precedent_suivant,id_article,id_mot=3})] // ayant le mot 3
[(#INCLURE{fond=inclure/article_precedent_suivant,id_article,id_auteur=8})] // ...
</BOUCLE_art>

Il est possible de mettre du texte à côté des flèches précédent/suivant dans l’inclusion en passant les variables texte_precedent et texte_suivant :

[(#INCLURE{fond=inclure/article_precedent_suivant,id_article,texte_precedent=Article précédent,texte_suivant=Article suivant})]

Si aucune variable n’est définie, il n’y a pas de texte.

Il est également possible de faire varier dynamiquement le sens du tri avec la variable senstri (voir https://www.spip.net/fr_article5530.html).

Discussion

Aucune discussion

Ajouter un commentaire

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
  • 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 apparaît.

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.

Qui êtes-vous ?
[Se connecter]

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