SPIP-Contrib

SPIP-Contrib

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

286 Plugins, 197 contribs sur SPIP-Zone, 214 visiteurs en ce moment

Accueil > Navigation > Navigation à suivre > Pagination

Pagination

28 août 2004 – par James – 118 commentaires

3 votes

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Attention ce filtre de pagination n’est pas compatible avec la version actuelle, désormais fournie en standard par SPIP 1.9. Si vous utilisiez cette contribution, vous devrez réviser vos squelettes (voir la nouvelle documentation) ; dans un premier temps, vous pouvez aussi chercher/remplacer toutes les occurrences du mot « pagination » par autre chose (ex : « paginer »), dans les squelettes ainsi que dans le fichier mes_fonctions.php.

Présentation

Ce filtre reprend les méthodes de calcul qui permettent de générer des listes de pages s’appuyant sur le très pratique critère {debut_xxx, yyy} qu’on retrouve un peu partout.

Rien de nouveau donc, si ce n’est qu’il apporte l’avantage de faire disparaître le code PHP des squelettes et mutualise cette fonctionalité pour un site entier.

Utilisation de base

Ce filtre s’applique à la balise #TOTAL_BOUCLE. les deux premiers paramètres sont obligatoires pour assurer le bon fonctionnement du filtre. L’exemple suivant liste les 10 derniers articles d’une rubrique et donc, les pages correspondantes :

<BOUCLE_articles_pagination(ARTICLES){id_rubrique}{par date}{inverse}>
</BOUCLE_articles_pagination>
[(#TOTAL_BOUCLE|pagination{debut_page,10})]
</B_articles_pagination>

<BOUCLE_article_liste(ARTICLES){id_rubrique}{par date}{inverse}{debut_page,10}>
...Ce qu'on veut...
<a href="#URL_ARTICLE">#TITRE</a>
...Ce qu'on veut...
</BOUCLE_article_liste>

-  Résultat :

La boucle articles_pagination va afficher les numéro de pages sous forme de lien, à l’exception de la page courante, séparés par des barres verticales ( | ) :

1 | 2 | 3

Utilisations avancées

-  Cosmétique

il est possible de définir 3 paramètres dans ecrire/mes_options.php3 :

— $pagination_item_avant et $pagination_item_apres

permettent d’encadrer chaque lien par le code html que l’on veut.

Exemple :

$pagination_item_avant = "<big>";
$pagination_item_apres = "</big>";

donne :

1 | 2 | 3

— $pagination_separateur

permet de remplacer la barre verticale par le code html que l’on veut.

Exemple :

$pagination_separateur = "<span style='color: Orange;'>&nbsp;:: </span>";

donne :

1 :: 2 :: 3

-  Transformation du nombre dans le lien

Vous pouvez préciser le nom d’un filtre dans le squelette lui-même pour transformer le nombre de chaque lien :

Exemple :

[(#TOTAL_BOUCLE|pagination{debut_page,10,chiffres_romains})]

I | II | III

Il convient, bien sur, de disposer d’un tel filtre, soit personnel dans mes_fonctions.php3, soit d’utiliser un filtre standard de SPIP.

-  urls personnalisées :

Pour des manipulations plus complexes, si vous définissez une fonction lien_pagination, vous disposez d’une plus vaste gamme de création de code html.

Cette fonction supplémentaire (et optionnelle, je le redis) doit être définie de la manière suivante :

function lien_pagination($url, $item, $valeur='')

où $url est l’adresse de base, $item est le nombre qui sera encadré par le lien <a href...>{{l'item, c'est moi!}}</a> que cette fonction va générer. $valeur, la valeur numérique de ce nombre.

Le code à ajouter dans votre fichier mes_fonctions.php3

Note supplémentaire sur l’utilisation de ce filtre

-  Il faut 2 boucles. Pour 2 raisons :
— l’habillage, si on souhaite ’paginer’ avant une liste ou ailleurs...
— la technique : on doit avoir un #TOTAL_BOUCLE réel pour déterminer le nombre de pages. Si ce filtre est appelé dans la même boucle qui sert à générer la liste, on obtient, évidement, toujours un nombre de page égal à 1...
Ces 2 boucles doivent donc être basées sur les mêmes critères, sinon le calcul est faussé. Toutefois le critère {debut_xxx, yyy} doit être présent dans la définition de la boucle qui liste et absent dans la boucle qui ’pagine’ où on le retrouvera à l’identique dans le filtre.

P.-S.

Je n’ai pas d’exemple spectaculaire à proposer, mais je pense que cette fonction allègera pas mal les squelettes de spip-forum, contrib’ à laquelle je n’avais, hélas, pas participé depuis longtemps ;-)

Ce filtre peut s’avérer pratique pour les boucles de signatures de pétitions, de recherche ({recherche}) mais peut s’appliquer à priori à n’importe quel cas, même tordu.

Dernière modification de cette page le 27 février 2015

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 25 février 2015 à 14:06, par nora En réponse à : Pagination

    slt
    j aimerai afficher 15 articles d une rubrique par page sous spip
    comment faire ? merci

    • Le 25 février 2015 à 14:12, par Maïeul En réponse à : Pagination

      lis la documentation de pagination... je t’ai mis un lien dans le précédent échange

      On veut bien aider, mais le minimal est de lire la doc. Or je t’ai envoyé le liens vers la doc.

      http://www.spip.net/fr_article3367.html « Changer le pas ».

    • Le 25 février 2015 à 14:19, par nora En réponse à : Pagination

      Merci bcp pour ton aide

  • Le 25 février 2015 à 12:58, par nora En réponse à : Pagination

    sous spip
    pour afficher une liste des 10 prochains articles de ma rubrique mais j’ai un lien de pagination sous chaque article au lieu d’un seul tout en bas de liste

    • Le 25 février 2015 à 13:00, par Maïeul En réponse à : Pagination

      rien compris à votre question.

    • Le 25 février 2015 à 13:10, par nora En réponse à : Pagination

      je veux faire une boucle de pagination pour afficher les articles d’une rubrique
      j ai fais une boucle mais le lien de pagination s affiche apres chaque article d une rubrique

    • Le 25 février 2015 à 13:15, par Maïeul En réponse à : Pagination

      bon, deja vous êtes vraiments pas au bon endroit, vu qu’il s’agit d’une archive obsolète, et vous avez vraiment de la chance que je passe par ici par hasard.

      Je vous invite
      a) à utiliser les outils modernes de SPIP (enfin, ca date de 2005, quand même) : http://www.spip.net/fr_article3367.html
      b) à poser votre questions soit sur http://forum.spip.net/ soit sur http://listes.rezo.net/mailman/listinfo/spip/
      c) à fournir le code que vous utilisez, sinon on ne pourra pas vous renseigner.
      d) à commencer votre message par un mot de politesse et à la finir aussi par un mot de politesse.

    • Le 25 février 2015 à 13:33, par nora En réponse à : Pagination

      Désolé ;
      tellement je ss stréssée j ai oublier de dire bonjour
      je t envois la boucle
      merci

      JPEG - 31.3 ko
    • Le 25 février 2015 à 13:34, par Maïeul En réponse à : Pagination

      met la boucle dans le corps de ton message, entouré de la balise <code>... je ne travaille pas du code sur copie d’écran...

    • Le 25 février 2015 à 13:40, par nora En réponse à : Pagination

      ok

      1. <BOUCLE_permanent_haut(ARTICLES){raccourci=_portail_permanent_haut}{pagination}{par date}{inverse}{0,25}>
      2.  
      3. <divclass="actu">
      4.  
      5. [<img src="(#LOGO_ARTICLE||image_reduire{44,0}|extraire_attribut{'src'})" alt="<:cisquel:eq_illustration:>" class="leftill">]
      6.  
      7. <div class="titreactu"><a href="#URL_ARTICLE" class="lien">[(#TITRE|supprimer_numero)]</a></div>
      8.  
      9. <div class="texte">#INTRODUCTION</div>
      10.  
      11.  
      12. </div>
      13. [<p class="pagination">(#PAGINATION)</p>]
      14.  
      15. </BOUCLE_permanent_haut>
      16.  
      17.  

      Télécharger

    • Le 25 février 2015 à 13:47, par Maïeul En réponse à : Pagination

      bon, alors ton [<p class="pagination">(#PAGINATION)</p>] est AU SEIN de la BOUCLE. Donc normal qu’à chaque itération de la boucle (c’est à dire à chaque article) il soit affiché.

      Sort le de ta boucle en le mettant dans la partie optionnel, et cela suffit

      1. <BOUCLE_permanent_haut(ARTICLES){raccourci=_portail_permanent_haut}{pagination}{par date}{inverse}{0,25}>
      2.  
      3. <divclass="actu">
      4.  
      5. [<img src="(#LOGO_ARTICLE||image_reduire{44,0}|extraire_attribut{'src'})" alt="<:cisquel:eq_illustration:>" class="leftill">]
      6.  
      7. <div class="titreactu"><a href="#URL_ARTICLE" class="lien">[(#TITRE|supprimer_numero)]</a></div>
      8.  
      9. <div class="texte">#INTRODUCTION</div>
      10.  
      11.  
      12. </div>
      13.  
      14.  
      15. </BOUCLE_permanent_haut>
      16. [<p class="pagination">(#PAGINATION)</p>]
      17. </B_permanent_haut>
      18.  

      Télécharger

      Autre points
      -  divclass -> coquille, il manque un espace
      -  |supprimer_numero est automatiquement appliqué depuis SPIP 3. Désormais inutile.
      -  || pour un filtre d’image ne sert plus depuis SPIP3.

    • Le 25 février 2015 à 13:55, par nora En réponse à : Pagination

      ah Merci bcp ça marche tres bien
      je te remercie

  • Le 9 avril 2008 à 18:45, par emic78 En réponse à : Pagination

    Salut,

    j’ai crée un menu déroulant avec des mots clés chacun renvoyant sur un ou plusieurs articles, ceci afin de proposer un affichage par catégorie.
    Jusqu’ici tout va bien !
    Avec un peu de php cela donne :

    <?php
    $titreMot='[(#ENV{titre_mot})]';                                       
    if($titreMot!=''){
                                            ?>
                                                    <BOUCLE_articles_tri(ARTICLES) {id_rubrique} {titre_mot=#ENV{titre_mot}} {!par num titre}>
                                                    <li>
                                                            <h3 class="titre"><a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></h3>
                                                    </li>
                                                    </BOUCLE_articles_tri>
                                            <?
                                            }else{
                                            ?>
                                                    <BOUCLE_articles(ARTICLES) {id_rubrique} {!par num titre} {pagination}>
                                                    <li>
                                                            <h3 class="titre"><a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></h3>
                                                    </li>
                                                    </BOUCLE_articles>
                                            <?php
                                            }
                                            ?>
    <//B_articles>
                                            </ul>
                                    </div>[<p class="pagination">(#PAGINATION)</p>]
                                    </B_articles>

    Le probleme est que la pagination ne tient pas compte du nombre d’article liés au mot clé mais prend toujours le nombre total d’article contenu dans la rubrique consultée.
    Ce qui fait que je me retrouve avec 7-8 pages de consultation, alors que j’ai seulement 2 articles correspondant à la catégorie.
    Ma méthode est-elle la bonne ?

    • Le 10 avril 2008 à 08:45, par ? En réponse à : Pagination

      manifestement non, ce n’est pas la bonne méthode. :)
      ça dépend des critères de la boucle. Quelle version de SPIP utilises-tu ?

    • Le 10 avril 2008 à 10:00, par emic78 En réponse à : Pagination

      J’utilise la version 1.9.2.
      la boucle idéale serait :
      je prend tous les résultats si je fais une recherche sur tous le groupe de mot ou seulement les articles liés au mot clé contenu dans le groupe de mot.
      tous cela cela à partir d’un menu déroulant.
      mon seul souci dc’est vraiment la pagination actuellement.

    • Le 10 avril 2008 à 10:31, par emic78 En réponse à : Pagination

      Finalement je suis allé au plus simple :
      j’ai refais deux boucles complètes avec une condition PHP et ça fonctionne.
      ça alourdit le code mais j’arrive à ce que je voulais sans problème
      Merci pour ton aide.

    • Le 13 avril 2008 à 10:12, par ? En réponse à : Pagination

      En 1.9.2, cette contribution n’est plus utile : voir plutôt Le système de pagination

  • Le 17 octobre 2006 à 17:02, par shu En réponse à : Pagination

    Bonjour je réalise un site en spip et j’ai un petit problème, je cherche un système de pagination d’article. Lorque celui ci est trop grand je voudrais qu’il soit divisé automatiquement en plusieur pages...

  • Le 13 mai 2006 à 19:42, par Phil En réponse à : Pagination

    Est-ce que ça marche aussi avec la version 1.9 ?

    J’ai essayé, et j’obtiens ça (en local) :
    Fatal error : Call to a member function on a non-object in z :\www\nouvo\squelettes\mes_fonctions.php on line 36

    Je ne suis pas assez expert pour savoir si ça vient d’un soucis de compatibilité avec la nouvelle version 1.9, ou si c’est un probleme lié à la mise a jour de mes squelettes pour la 1.9 (une joyeuse galere, d’ailleurs, ce passage 1.8-1.9...).

    • Le 21 mai 2006 à 08:54, par erational En réponse à : le filtre pagination est compatible avec spip 1.9

      oui, le filtre pagination est bien compatible avec la spip 1.9.

      pour récuperer la dernière version du filtre, télécharger sa version SVN

    • Le 30 juillet 2006 à 23:10, par _Eric_ En réponse à : le filtre pagination est compatible avec spip 1.9

      Salut,

      Ben non, cette contrib n’est pas compatible avec 1.9. En effet, l’objet clean_link n’est à priori plus utilisé ni déclaré dans la version 1.9. Y a t-il une solution simple pour remplacer les lignes incriminées seules et conserver cette fonction qui marchait en 1.8 ?
      Mon but est d’éviter d’utiliser la nouvelle fonction pagination de la 1.9 dans mon ancien squelette fonctionnant sous 1.8 et 1.9. Je modifierai le tout plus tard, en vue de la 2.0.

      Merci d’avance

      A+

  • Le 10 juillet 2006 à 11:57, par takamo En réponse à : Pagination

    bonjour,
    je viens de tester ce code et il marche impec ^^
    maintenant j’aimerais le modifier pour qu’il passe de « 1 | 2 | 3 » à « 1 | 2 | 3 | >> » avec le « >> » representant la page suivante de celle en cours et idem pour précédent.

    J’ai essayé de modifier la fonction pour avoir le résultat voulu mais etant debutant en programmation .... bah ja tout cassé :D

    Donc si quelqu’un pouvait me donner un titi coup de main ca ne serait pas de refu ^.^

  • Le 27 juin 2006 à 11:00, par Valéry En réponse à : Pagination

    Les contribes qui fonctionnent en deux minutes après un copier/coller et un transfert ftp c’est assez rare et vraiment génial. Merci !

  • Le 15 juin 2006 à 22:11, par _Eric_ En réponse à : Pagination

    Bonjour,

    J’ai mis en oeuvre très facilement cette super contribution en utilisant des critères debut_page, yyy ou yyy est une valeur immédiate (3, 5...) pour lister mes messages de forum.

    Ensuite, mon squelette étant paramétrable via des variables globales accessibles dans le code html par une balise #SQUELETTE (cf la contrib de mortimer) j’ai voulu l’utiliser pour remplacer le yyy.

    La boucle #TOTAL_BOUCLE fonctionne sans problème car la balise #SQUELETTE(param) est bien évaluée. Par contre, la boucle FORUM pour l’affichage des messages ne marche pas du tout car dans le critère debut_page, #SQUELETTE(param) la balise #SQUELETTE n’est pas évaluée donc l’accès BD plante.

    Avez vous une solution pour contourner ce problème ?

    D’avance merci.

  • Le 20 septembre 2005 à 14:22, par James En réponse à : > Quelques tests et conclusion sur cette contribution utilisée dans des cas particuliers

    Les points les plus problématiques liés à la mise en œuvre de cette contrib sont les suivants :

    • Les urls réecrites
    • Les inclusions de squelettes.

    Après plusieurs essais, bricoles, tentatives de corrections du code de ce filtre et de compréhension des fonctionnalités ci-dessus, j’ai réussi à faire marcher la pagination avec le code tel quel sur une version 1.8.2d (donc, à ce jour, la version stable) :

    Cette contrib fonctionne pour les urls standards, html, propres et « propres2 » de SPIP, sans soucis.

    Concernant les inclusions de squelettes contenant le filtre, c’est plus délicat, mais en ajoutant le paramètre suivant dans la balise d’inclusion, le problème de cache est reglé (plus besoin de définir le delais à 0)

    {var_pagination=#ENV{debut_xxx}} ou var_pagination est un code ’bidon’ pour différencier le contexte et ainsi calculer une page différente selon la valeur de debut_xxx (celui-ci dépendant de ce que vous aurez choisi comme nom, dans la contrib : debut_page)

    Alternativement, delais=0 en paramètre d’<INCLURE()> ne multiplie pas les fichiers de cache générés... c’est un choix à faire en fonction de votre plate-forme.

    Au plaisir :)

  • Le 5 juin 2006 à 23:21, par Fil En réponse à : Pagination dans la version 1.9

    Signalons que la version 1.9 de SPIP comportera une fonction pagination native (qui est basée sur celle présentée sur cette contrib).

Retour en haut de la page

Ça discute par ici

  • GIS 4

    11 août 2012 – 1286 commentaires

    Présentation et nouveautés La version 4 de GIS abandonne la libraire Mapstraction au profit de Leaflet. Cette librairie permet de s’affranchir des librairies propriétaires tout en gardant les mêmes fonctionnalités, elle propose même de nouvelles (...)

  • Médiathèque

    20 novembre 2008 – 292 commentaires

    Un plugin pour gérer tous vos documents de façon centralisée.

  • Metas +

    3 décembre – commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

  • Import ICS 2 (agenda distant)

    2 août – 35 commentaires

    La version 2 du plugin « import ICS » en reprend la principale fonctionnalité, à savoir l’ajout automatique d’évènements distants dans la liste des évènements d’un site. À la différence de la première version, elle ne dépend pas du plugin « Séminaire » et est (...)

  • Newsletters

    16 janvier 2013 – 374 commentaires

    Ce plugin permet de composer des Info-lettres. Par info-lettre, on désigne ici le contenu éditorial qui va être composé et envoyé par courriel à une liste d’inscrits. Le plugin permet de composer une info-lettre à partir d’un modèle pré-composé, (...)

Ça spipe par là