SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

288 Plugins, 197 contribs sur SPIP-Zone, 172 visiteurs en ce moment

Accueil > Navigation > Navigation à suivre > Critères precedent et suivant > Critères precedent et suivant

Critères {precedent} et {suivant}

4 août 2010 – par Matthieu Marcillaud – 17 commentaires

40 votes

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 :

  1. <BOUCLE_article_en_cours(ARTICLES){id_article}>
  2.  
  3. </BOUCLE_article_en_cours>

Télécharger

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

  1. <BOUCLE_article_en_cours(ARTICLES){id_article}>
  2. <BOUCLE_articles_rubrique(ARTICLES){id_rubrique}{!par date}>
  3. #TITRE <br/>
  4. </BOUCLE_articles_rubrique>
  5. <br/>
  6. </BOUCLE_article_en_cours>

Télécharger

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} :

  1. <BOUCLE_article_en_cours(ARTICLES){id_article}>
  2. <BOUCLE_article_precedent(ARTICLES) {id_rubrique} {!par date} {precedent}>
  3. Précédent : #TITRE <br/>
  4. </BOUCLE_article_precedent>
  5.  
  6. <BOUCLE_article_suivant(ARTICLES) {id_rubrique} {!par date} {suivant}>
  7. Suivant : #TITRE <br/>
  8. </BOUCLE_article_suivant>
  9. <br/>
  10. </BOUCLE_article_en_cours>

Télécharger

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 :

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

Télécharger

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 !

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

Télécharger

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 :

  1. [(#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 http://www.spip.net/fr_article5530.html).

Voir en ligne : http://plugins.spip.net/suivant_pre...

Dernière modification de cette page le 23 juin 2015

Retour en haut de la page

Vos commentaires

  • Le 11 novembre 2010 à 22:11, par zaa En réponse à : Critères {precedent} et {suivant}

    Bonjour,

    Ça fait plusieurs jours que je me casse la tête sur le problème, à savoir d’avoir une pagination Précédent et une pagination Suivante séparé et qui prennent en compte le critère pagination 5. Je vous livre mes résultats.

    squelettes\modeles\pagination_precedent.html

    #ENV*{bloc_ancre}
    #SET{bornes,#ENV{page_courante}|bornes_pagination{#ENV{nombre_pages},10}}
    #SET{premiere, #GET{bornes}|reset}
    #SET{derniere, #GET{bornes}|end}
    #SET{separateur,#ENV{separateur,'|'}}
    #SET{i,#ENV{page_courante}|moins{1}}
    [(#GET{i}|>{0}|?{' '})[
            (#SET{item, #GET{i}|moins{1}|mult{#ENV{pas}} })
            ][(#INCLURE{fond=modeles/paginationitem}{num=#GET{i}}{texte=<:public:page_precedente:>}{separateur=''}{url=#ENV{url}|parametre_url{#ENV{debut},#GET{item}}|ancre_url{#ENV{ancre}}}{page_courante=#ENV{page_courante}}{derniere=#ENV{derniere}})]
            #SET{i,#GET{i}|plus{2}}
            [(#GET{i}|<={#ENV{nombre_pages}}|?{#GET{separateur}})]
    ]

    squelettes\modeles\pagination_suivant.html

    #ENV*{bloc_ancre}
    #SET{bornes,#ENV{page_courante}|bornes_pagination{#ENV{nombre_pages},10}}
    #SET{premiere, #GET{bornes}|reset}
    #SET{derniere, #GET{bornes}|end}
    #SET{separateur,#ENV{separateur,'|'}}
    #SET{i,#ENV{page_courante}|plus{1}}
    [(#GET{i}|<={#ENV{nombre_pages}}|?{' '})[
            (#SET{item, #GET{i}|moins{1}|mult{#ENV{pas}} })
            ][(#INCLURE{fond=modeles/paginationitem}{num=#GET{i}}{texte=<:public:page_suivante:>}{separateur=''}{url=#ENV{url}|parametre_url{#ENV{debut},#GET{item}}|ancre_url{#ENV{ancre}}}{page_courante=#ENV{page_courante}}{derniere=#ENV{derniere}})]
    ]

    et j’ajoute à ma boucle article

     [<p class="pagination">(#PAGINATION{precedent})</p>]  
       
       [<p class="pagination">(#PAGINATION{suivant})</p>]  

    Dans mon cas, voici ce que ça donne :

    <B_article>
            #ANCRE_PAGINATION
            <BOUCLE_articles(ARTICLES){id_mot=37} {par date} {pagination 2}>
           
            </BOUCLE_articles>
       [<p class="pagination">(#PAGINATION)</p>]
       
       [<p class="pagination">(#PAGINATION{precedent})</p>]  
       
       [<p class="pagination">(#PAGINATION{suivant})</p>]  

    </B_articles>
    • Le 3 juillet 2015 à 15:59, par Patrick En réponse à : Critères {precedent} et {suivant}

      Bonjour,
      C’est le type de pagination que je recherchais en alternative à un scroll infini.
      J’ai placé ce script dans mon sommaire, et le plugin dans les articles.
      Tout fonctionne comme il faut, à part à la dernière page, il n’y a pas de lien « page précédente ».
      Si quelqu’un a une solution...

      Merci à vous.

    • Le 3 juillet 2015 à 16:34, par Patrick En réponse à : Critères {precedent} et {suivant}

      ...suite et précision.

      à part à la dernière page, il n’y a pas de lien « page précédente »

      pour le script du message deZaa

    Répondre à ce message

  • Le 28 septembre 2013 à 19:05, par rcaron En réponse à : Critères {precedent} et {suivant}

    Bonjour,

    J’ai mis en place le dispositif « suivant / précédent » sur une rubrique.

    Seulement à droite, j’ai un encadré listant 5 articles suivi de la pagination de la totalité des articles de la rubrique.

    Quand je navigue et que par exemple, je dépasse le 5e article, à droite ça ne bouge pas. Comment synchroniser les deux ?

    Site : http://malle-arts.org/spip.php?article209 (il s’agit du premier article de la rubrique)

    Merci

    Robert

    Répondre à ce message

  • Le 12 mars 2011 à 12:52, par nestor En réponse à : Critères {precedent} et {suivant}

    Bonjour,

    juste une petite suggestion, sans plugin, pour ceux qui voudraient un peu plus de liberté dans les critères (certes via une boucle un peu moins glamour) :

    1. <BOUCLE_article(ARTICLES) {id_article}>
    2.  
    3. <BOUCLE_posterieur(ARTICLES) {!id_article} {date >= #DATE}{par date, id_article}{0,1}>
    4. Suivant : #TITRE <br/>
    5. </BOUCLE_posterieur>
    6.  
    7. <BOUCLE_anterieur(ARTICLES) {!id_article} {date < #DATE}{par date, id_article}{n-1,n}>
    8. Précédent : #TITRE <br/>
    9. </BOUCLE_anterieur>
    10.  
    11. </BOUCLE_article>

    Télécharger

    • Le 12 mars 2011 à 14:54, par Matthieu Marcillaud En réponse à : Critères {precedent} et {suivant}

      En quoi ça donne plus de liberté ?

    • Le 18 mai 2012 à 19:09, par nestor En réponse à : Critères {precedent} et {suivant}

      Réponse à retardement...

      Bah je sais pas, par exemple, par rapport aux limitations actuelles du plugin :

      « 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 :) »

      Ici :

      1. <BOUCLE_article(ARTICLES) {id_article}>
      2.  
      3. <BOUCLE_deux_apres (ARTICLES) {!id_article} {date >= #DATE}{par date, id_article}{1,2}>
      4. Deux résultats après : #TITRE <br/>
      5. </BOUCLE_deux_apres>
      6.  
      7. <ul>
      8. <BOUCLE_deux_a_quatre_avant(ARTICLES) {!id_article} {date < #DATE}{par date, id_article}{n-3,n-1}>
      9. <h2>Deux à quatre résultats avant :</h2>
      10. <li>#TITRE </li>
      11. </BOUCLE_deux_a_quatre_avant>
      12. </ul>
      13.  
      14. </BOUCLE_article>

      Télécharger

      Mais je ne jetais pas de pavé dans la mare, ce plugin est super !

    Répondre à ce message

  • Le 18 mai 2012 à 17:24, par micker En réponse à : Critères {precedent} et {suivant}

    Bonjour
    je debute avec spip et j’ai du mal a utiliser ce plugin ..
    je l’ai installer
    je ne trouve pas comment bien l’utiliser
    dans mon squelette article je voudrais ajouter un lien suivant precedant qui ne fonctionne que par id et dans la même rubrique c’est possible ?
    mais cela ne fonctionne pas j’ai une erreur de squelette ...
    pouvez-vous m’aider ?
    Merci

    Répondre à ce message

  • Le 4 mai 2011 à 12:21, par Glika Tchu En réponse à : Critères {precedent} et {suivant}

    Ce plugin semble être chez moi incompatible avec d’autres plugins (version spip 2.1) : installation faite, cela désactive les autres plugins que j’avais installé (social tags, menus déroulants, CFG).

    Répondre à ce message

  • Le 7 avril 2011 à 18:37, par ? En réponse à : Critères {precedent} et {suivant}

    Bonjour

    Dans le squelette j’ai ajouté :

    1. <B_art>
    2. <BOUCLE_art(ARTICLES){id_article}>
    3. [(#INCLURE{fond=inclure/article_precedent_suivant,id_article,id_rubrique})]
    4. </BOUCLE_art>
    5. </B_art>

    Télécharger

    J’ai enlevé //dans la rubrique mais il apparaît quand même . J,ai vidé la cache.
    Voir en ligne un article de http;//www.conceptvirtuel.ca/ogpac

    Répondre à ce message

  • Le 11 mars 2011 à 16:49, par Jean-Baptiste Pressac En réponse à : Critères {precedent} et {suivant}

    Bonjour,
    Super, ça marche aussi avec classement par ordre alphabétique ! Merci Matthieu.
    Jean-Baptiste

    • Le 11 mars 2011 à 18:12, par Matthieu Marcillaud En réponse à : Critères {precedent} et {suivant}

      Un exemple de ta boucle fera plaisir à tout le monde :) Tant qu’à faire !

    • Le 12 mars 2011 à 09:29, par Jean-Baptiste Pressac En réponse à : Critères {precedent} et {suivant}

      et voilà :

      1. <BOUCLE_article_en_cours(ARTICLES){id_article}>
      2. <BOUCLE_article_precedent(ARTICLES) {id_rubrique} {par titre} {precedent}>
      3. Précédent : #TITRE <br/>
      4. </BOUCLE_article_precedent>
      5. <BOUCLE_article_suivant(ARTICLES) {id_rubrique} {par titre} {suivant}>
      6. Suivant : #TITRE <br/>
      7. </BOUCLE_article_suivant>
      8. <br/>
      9. </BOUCLE_article_en_cours>

      Télécharger

    Répondre à ce message

  • Le 14 février 2011 à 15:54, par kent1 En réponse à : Critères {precedent} et {suivant}

    Imaginons un site multilingue à traduction aléatoire, il est assez complexe de trouver l’article suivant dans notre langue ou non (à défaut dans sa langue originale)

    Le code de l’inclure doit changer pour :

    1. <BOUCLE_article_precedent(ARTICLES){origine_traduction}{precedent}{!par date}
    2. {id_rubrique?}
    3. {id_mot?}
    4. {id_auteur?}
    5. {id_groupe?}>
    6. <BOUCLE_trads_precedents(ARTICLES){traduction}{lang}>
    7. [<a href="#URL_ARTICLE" rel="prev" class="spip_in prev" title="[(#TITRE|couper{20}|attribut_html)]">(#CHEMIN{images/precedent.png}|image_reduire{20,20}|inserer_attribut{alt,<:csp:alt_lien_prev:>})</a>]
    8. </BOUCLE_trads_precedents>
    9. </B_trads_precedents>
    10. [<a href="#URL_ARTICLE" rel="prev" class="spip_in prev" title="[(#TITRE|couper{20}|attribut_html)]">(#CHEMIN{images/precedent.png}|image_reduire{20,20}|inserer_attribut{alt,<:csp:alt_lien_prev:>})</a>]
    11. <//B_trads_precedents>
    12. </BOUCLE_article_precedent>
    13. <BOUCLE_article_suivant(ARTICLES){suivant}{origine_traduction} {!par date}
    14. {id_rubrique?}
    15. {id_mot?}
    16. {id_auteur?}
    17. {id_groupe?}>
    18. <BOUCLE_trads_suivants(ARTICLES){traduction}{lang}>
    19. [<a href="#URL_ARTICLE" rel="next" class="spip_in next" title="[(#TITRE|couper{20}|attribut_html)]">(#CHEMIN{images/suivant.png}|image_reduire{20,20}|inserer_attribut{alt,<:csp:alt_lien_next:>})</a>]
    20. </BOUCLE_trads_suivants>
    21. </B_trads_suivants>
    22. [<a href="#URL_ARTICLE" rel="next" class="spip_in next" title="[(#TITRE|couper{20}|attribut_html)]">(#CHEMIN{images/suivant.png}|image_reduire{20,20}|inserer_attribut{alt,<:csp:alt_lien_next:>})</a>]
    23. <//B_trads_suivants>
    24. </BOUCLE_article_suivant>

    Télécharger

    Mais cela ne suffit pas, car les critères suivant et précédent ont besoin de connaitre l’id_article original donc l’appel à l’inclure devra par exemple se faire de la sorte dans une boucle articles du squelette parent :

    1. [(#ID_TRAD|>{0}|oui)#SET{id_article,#ID_TRAD}]
    2. [(#ID_TRAD|>{0}|non)#SET{id_article,#ID_ARTICLE}]
    3. [<div class="precedent_suivant">
    4. (#INCLURE{fond=inclure/article_precedent_suivant,id_article=#GET{id_article},id_rubrique,lang#LANG})
    5. </div>]

    Télécharger

    Répondre à ce message

  • Le 17 septembre 2010 à 02:01, par ? En réponse à : Critères {precedent} et {suivant}

    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.

    Ouaiiis !

    <BOUCLE_precedents(ARTICLES){!par date}{precedent}{0,5}>

    <BOUCLE_suivants(ARTICLES){!par date}{suivant}{0,5}>

    Répondre à ce message

  • Le 26 août 2010 à 23:45, par poupougnac En réponse à : Critères {precedent} et {suivant}

    Ce plugin est d’une aide précieuse. Initialement, je n’aurais jamais cru qu’un plugin allait être nécessaire. J’ai fais d’abord quelques boucles hasardeuses mêlées de SET/GET... Puis finalement j’ai trouvé cette page.

    Ces deux critères devraient être natif dans SPIP, j’espère que l’équipe y prêtera attention.
    Beau boulot, merci.

    Répondre à ce message

Répondre à cet article

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • La Fabrique

    20 avril 2012 – 315 commentaires

    La Fabrique est un outil pour webmestres ou développeurs qui souhaitent créer des plugins. La Fabrique est capable de générer le code source minimal d’un plugin pour SPIP 3 (elle accélère donc le démarrage d’un plugin) et peut s’occuper également de (...)

  • Formulaire upload

    25 septembre 2012 – 34 commentaires

    Ce plugin permet d’uploader des documents depuis l’espace public Objectifs Ce plugin permet d’ajouter un formulaire dans l’espace public pour uploader et gérer des fichiers. A priori, il peut se greffer sur tous types objets SPIP : articles, (...)

  • Publier archivelist.txt via svn/terminal

    10 août 2009 – 11 commentaires

    Objectif : mettre à jour l’index archivelist.txt Environnement : commandes svn via terminal Si vous désirez voir publié dans la zone la version paquet de votre contribution, il faut ajouter la ligne nécessaire dans le fichier archivelist.txt. (...)

  • Plugin Logo SVG : pouvoir utiliser des logos SVG

    17 octobre 2016 – 10 commentaires

    Le SVG est un format vectoriel donc très léger et redimensionnable sans pertes, mais SPIP ne l’acceptait pas sur les logos. Ce plugin comble ce manque. Comment ça fonctionne ? Vous installez ce plugin, vous l’activez, et c’est tout. Crédits Une (...)

  • Refonte de l’identité graphique

    10 juillet – 31 commentaires

    Lors de la SPIP Party 2017 à Toulouse, un nouveau contributeur est venu nous présenter son travail sur une refonte du logo. Au delà de la refonte du logo, c’est une toute nouvelle identité graphique pour SPIP que Jordan nous propose. Voici une (...)

Ça spipe par là