SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Navigation > Navigation à suivre > Archives Navigation à suivre

Pagination

samedi 13 septembre 2003, par Robert Sebille. Dernier ajout mardi 5 décembre 2006


Affiche X liens vers des articles, par page, dans une rubrique et place les liens adéquats (X articles précédents, liens vers 10 pages/rubriques maxi à compter de celle où on se trouve, X articles suivants). Utilise du PHP dans la boucle.


Principe

Si, dans le squelette rubrique.html, on a mis une BOUCLE(ARTICLES) avec le paramêtre {tout}, les pages rubriques vont grandir au fur et à mesure du remplissage du site. Si on a limité le nombre d’articles (avec le paramètre {0, 20}, par exemple), on « perd » les plus anciens.

L’avantage de cette boucle, est qu’on n’est plus obligé de limiter le nombre de liens vers les articles dans une page rubrique, tout en évitant de voir grandir cette page à l’infini. C’est ce qu’on appelle la pagination.

Exemple

Ici avec une syndication, mais c’est le même principe qu’avec les articles : http://wb.attac.be/rubrique.php3 ?id_rubrique=48

Télécharger le code

Pagination : version III, sept 2003 à télécharger ici

Adresse de publication originale :
http://support.cassiopea.org/spip/spip-tech.shtml#nb_article_rub

Pour ceux qui veulent en savoir plus :

Codes de la contribution

  1. le code + la boucle à copier / coller dans la page rubrique.
  2. le fichier article-pagine.inc à télécharger dans le répertoire racine de votre site spip (là où il y a les squelettes .php3).

N’oubliez pas de télécharger aussi fleche-gauche.gif et fleche-droite.gif dans /NAVPICS.

A propos des squelette inclus :
Si vous mettez la boucle dans un squelette inclus, il est nécessaire mais apparament pas suffisant d’appeler le squelette inclus avec . Il faut en plus, ré-imbriquer la boucle dans une boucle rubriques et dans le squelette inclus lui-même. On ne sait pas pourquoi, mais on sait que sinon ca ne marche pas bien. Celui qui trouve va passer pour un fortiche ;-). En bref pour les squelettes inclus, ca donne ceci :

<BOUCLE_rubrique(RUBRIQUES){id_rubrique}>
        Le code et la boucle ci-dessous ...
</BOUCLE_rubrique>

1) le code + la boucle à copier / coller dans la page rubrique

2)le code contenu dans "article-pagine.inc

Remarque de mise à jour

Changements dans la version III
- L’appel de fonction qui provoquait la Fatal error : Call to undefined function : getarticlelinks() sur certains sites a été supprimé et remplacé par un fichier inclus (article-pagine.inc) qui contient le code (qui n’est donc plus dans mes_fonctions.php3)
- Une correction a été apportée au code qui obligeait à ce que la page traitée soit une page rubrique. Ce peut-être maintenant n’importe quelle boucle qui supporte le critère Spip {debut_xxx,b} (relire cette doc sur spip.net ), une boucle mot, par exemple, ou encore une boucle SYNDIC_ARTICLES, comme sur cette page, etc. Il faut bien sur alors adapter les boucles spip au cas choisi

Pour ceux qui avaient implémenté la version II et qui souhaitent passer à la version III

1) Uploader le fichier "article-pagine.inc" dans le répertoire racine de votre site spip (là où il y a les squelettes .php3).

2) Dans le code du squelette .html à paginer, remplacer

les anciennes lignes :

par ces nouvelles :

3) Supprimer le code de la fonction "getArticleLinks(.." de votre fichier mes_fonctions.php3. (ce dernier point n’est pas obligatoire, mais inutile de charger du code devenu inutile).


Répondre à cet article

  • Pagination

    15 juin 2006 00:46, par sososo

    bonjour,

    j’ai fait exactement comme vous expliquez mais ça marche pas du tout, ça n’a rien changé !!! pourriez vous m’aider le plus vite possible SVP ?

    merci

    Répondre à ce message

    Retour au début des forums

  • Pagination

    18 janvier 2006 20:36, par xaccrocheur

    Bonjour ! D’abord, merci de coder des trucs comme ça, vraiment nécéssaires (j’en ai besoin depuis le début !) d’une part, et d’assurer ainsi le support, d’autre part !

    Ce que je cherche à faire, c’est d’utiliser ce hack sur ma page de sommaire, où j’affiche la liste de TOUTES les breves de TOUTES les rubriques (genre blog) un peu comme si c’était une rubrique, mais qui contient tout.

    De fait, juste en remplaçant ARTICLE par BREVE, le script me trouve le nombre de breves, mais j’ai du mal à comprendre comment je peux lui dire de ne pas s’occuper des rubriques ?

    J’espere que je suis clair... ? Ce qui est sur, c’est que je cherche à faire ça depuis longtemps ! Donc, je triche, et j’en suis à quatre &amp ;quot;fausses&amp ;quot; pages de sommaire, qui me servent juste à incrémenter la boucle &amp ;lt;BOUCLE_breves(BREVES) par date inverse 0,24&amp ;gt; avec un lien vers la page suivante, qui elle, contient &amp ;lt;BOUCLE_breves(BREVES) par date inverse 24,48&amp ;gt; Et ainsi de suite, et je n’aime pas devoir dupliquer comme ça du code :/

    Merci de votre aide !

    - phil

    Voir en ligne : Ma page de test

    Répondre à ce message

    Retour au début des forums

  • > Pagination, inverser les chiffres ?

    18 septembre 2004 14:53, par Stéven

    Bonjour
    Tout d’abord merci pour cette contrib très pratique !
    Petite question : comment faire pour inverser les chiffres présents après "Pages :" ? En fait actuellement j’ai "Pages : 3 | 2 | 1" où le 3 correspond à mes articles les plus récents, et je voudrais que ceux-ci soient désignés par un 1, ce qui me semble plus logique...
    Merci pour vos avis !

    Répondre à ce message

    Retour au début des forums

  • > Pagination, inverser les chiffres ?

    20 septembre 2004 12:05, par Robert

    oui, ca dépend quelle logique ;-). Ceci dit, ca implique de reprogrammer la partie de article-pagine.inc qui se trouve sous le commentaire php // Milieu. Ce que je n’ai malheureusement pas le temps de faire pour le moment. En y réfléchissant, je me dis qu’il faudrait globalement améliorer et adapter ma contrib au spip actuel. c-a-d,
    - permettre le choix de la numérotation (commencant à 1 ou à la dernière page)
    - adapter au système de langues
    - permettre le choix du dessin des flèches (ou pas)
    - permettre le choix du nombre de liens affichés vers les pages (actuellement, c 10 par défaut)
    - l’adapter au page du moteur de recherche (comme l’a fait " erational, le 25 juin 2004 : > Pagination moteur de recherche" v. sur ce forum).
    - quoi d’autre ?

    Ce qui fait tout de même un peu de boulot ;) Je vais m’y mettre 1 de ces 4, mais ca ne sera sans doute pas, vu mon emploi du temps actuel, avant quelques mois.

    Cordialement, Robert.

    Répondre à ce message

    Retour au début des forums

  • > Pagination

    10 janvier 2004 09:13

    Bonjour, j’ai bien utilisé ce script pour paginer une liste d’articles à l’intérieur d’une page rubrique. Par contre, je n’ai pas réussi la mise au point sur le résultat d’une recherche, faute de trouver le bon param à utiliser. Le nombre de pages est bien calculé, mais c’est toujours la première qui s’affiche. Quelqu’un aurait-il réussi ce type de mise en page ?

    Si je trouve une solution, je vous le dis, promis..

    Répondre à ce message

    • > Pagination 26 juin 2004 19:34, par Robert

      Bonjour,

      quelqu’un vient de trouver une solution à cela. Elle est sur le forum de l’article. Voir le message : erational, le 25 juin 2004 : > Pagination moteur de recherche

      Cordialement, robert

      Répondre à ce message

    Retour au début des forums

  • > Pagination moteur de recherche

    25 juin 2004 10:50, par erational

    merci beaucoup, le script fonctionne tres bien... sauf sur le moteur de recherche car on l’appelle de la facon suivante recherche.php ?recherche=brest et non en recherche.php ?id_recherche=brest

    voici ma solution au début du script

    // hack pour paginer recherche
    if ($type != "recherche") $type2 = "id_$type";
                         else $type2 = $type;

    et ensuite remplacer ds le code id_$type par $type2

    Voir en ligne : exemple pagination sur recherche

    Répondre à ce message

    Retour au début des forums

  • Pagination dans un squelette inclus

    27 avril 2004 15:11, par JMSE

    Salut de l’Espagne et pardon pour mon française

    ¿Il y a des personnes avec pagination dans INCLURE et ça marche ?

    J’ai de la pagination dans un squelette inclus et avec le boucle ROUBRIQUES dans les deux squelettes, mais ça ne marche pas : on affiché le premiére page tout le temp n’import quelle page je demande, et si je recalcul une page on affiché cette tout le temp. En breve : on affiché tout le temp le derniére page recalculé.

    Dans rubrique.html

    ...
    <BOUCLE_rubrique(RUBRIQUES) {id_rubrique}>
     <INCLURE(seccion.php3) {id_rubrique}>
    </BOUCLE_rubrique>
    ...

    Dans seccion.html

    <BOUCLE_estaseccion(RUBRIQUES) {id_rubrique}>
     ...
     <BOUCLE_articles(ARTICLES){branche}{doublons}{par date}{inverse}{debut_indice,10}>
     ...
     <BOUCLE_articles>
    </BOUCLE_estaseccion>
    ...

    et avec les URL

    rubrique.php3?id_rubrique=n&debut_indice=0
    rubrique.php3?id_rubrique=n&debut_indice=10
    ...

    J’ai cherché la CACHE et il y a une seule fichier ’seccion-76.f80c9e’ avec le premieres 10 articles (ou le derniére page recalcule).

    Ainsi, je croi que c’est un probléme avec les INCLURE et la cache. J’ai cherché dans le code de SPIP et il paraît que <INCLURE(seccion.php3) {id_rubrique}> généré un seul fichier a la CACHE pour chaque rubrique ’seccion-76...’ (76 c’est le id_rubrique actuel). Ainsi, il faut générer a la CACHE des fichiers pout chaque rubrique-debut (seccion-76-0..., seccion-76-10...) et pour ça il faut un deuxiéme critére dans le INCLURE avec le debut.

    J’ia ne sais pas s’il y a maniére pour faire ça, mais j’ai utilisé un “truc” pour ajouter des variables a l’URL dans le contexte actuel (il y a une spip-contrib a tester avec ça id_article=488)

    Dans rubrique.html

     <BOUCLE_rubrique(RUBRIQUES) {id_rubrique}>

    Ça ajoute la variable 'debut_indice' a l'URL dans le contexte actuel.
    La balise #URL_SITE_SPIP ne sert a rien, seulement pour lancer le filtre

       [(#URL_SITE_SPIP|set_var_entorno_from_get{'debut_indice', $contexte})]

    Ça ajoute le critére de la pagination pour générer des fichiers a la cache pour chaque page

       <INCLURE(seccion.php3) {id_rubrique} {debut_indice}>
     </BOUCLE_rubrique>

    Dans mes_fonctions.php3 il faut le filtre :

    function set_var_entorno_from_get($void, $var, &$contexte) {
       $contexte["$var"] = $GLOBALS['HTTP_GET_VARS'][$var];
       return;
    }

    S’il vous plaît : ¿Il y a des personnes avec pagination dans INCLURE qui ça marche sans des “trucs” ?

    J’ia ajouté aussi cêtte truc-ci a spip-contrib (id_article=496)

    Salut

    Jose M Sánchez

    Sevilla

    España

    Répondre à ce message

    Retour au début des forums

  • > Pagination

    15 décembre 2003 18:09, par Michel

    Bonjour,

    La boucle affiche 76 Articles en haut de la rubrique.

    Je ne voudrai que le nombre et non le mot Articles à la suite du chiffre.

    Est-ce possible et comment. J’ai beau chercher...

    Merci,

    Michel

    Répondre à ce message

    • > Pagination 18 décembre 2003 01:08, par Oleane

      A quoi correspond : $idtype=#ID_BREVE ; par exemple Comment fait on si l’on veut afficher la liste des brèves avec une sélection sur un mot clé ?

      MErci

      Répondre à ce message

      • > Pagination 18 décembre 2003 13:33, par Robert

        $idtype et $type servent à construire les url des liens qui s’affichent, si il y a plusieurs pages de titres d’articles ou de brèves. Par exemple, http://www.monsite.org/rubrique.php3?id_rubrique=n°&debut_article=n°

        Pour afficher la liste des brèves avec une sélection sur un mot clé, il faut afficher cela dans un squelette "rubrique" ou "mot". Donc ici, les paramètres seront : $idtype=#ID_RUBRIQUE;$type="rubrique";, s’il s’agit d’un squelette "rubrique", $idtype=#ID_MOT;$type="mot";, s’il s’agit d’un squelette "mot".

        NB : Ce script s’applique uniquement aux squelettes qui vont afficher une liste d’articles, ou de breves, .. (un squelette rubrique, mot, auteur qui fait cela), et jamais aux squelettes article ou breve. Donc $idtype=#ID_ARTICLE;$type="article"; ou $idtype=#ID_BREVE;$type="breve"; n’aura jamais de sens.


        Dans un squelette rubrique, pour sélectioner sur un mot clé, il faut inclure dans la boucle spip un critère sur le mot clé choisi {titre_mot=xxxx} ou {type_mot=yyyy}. Dans un squelette "mot", ce sera plutôt {id_mot} ou {id_groupe}. Mais tout cela n’est-il pas déjà dans la doc de spip à http://www.spip.net/fr_rubrique143.html ? ;-)

        Cordialement

        Robert

        Répondre à ce message

        • > Pagination 20 février 2004 10:07, par franz

          C’est pas très cliar !!! Autant je comprends bien que #IDRUBRIQUE se retorte à une terminologine typiquement spipienne, autant "rubrique" non. Est ce le nom du couple php3/squlette ? Si par exemple je fais une rubrique spéciale metier avec un couple metier.php3/metier.html, le $type = "metier" ?

          Entre autres ?

          Amicalement

          François

          Répondre à ce message

    • > Pagination 18 décembre 2003 13:38, par Robert

      C’est dans ton squelette, tout près du "#TOTAL_BOUCLE" qui n’est pas entre des balise php.

      Cordialement, Robert.

      Répondre à ce message

    Retour au début des forums

  • > Pagination

    18 février 2004 18:49

    Désolé, mais je n’arrive absolument pas à faire marcher ce système de pagination :
    - en SPIP 1.5.2, la page est blanche (développement local) et
    - en SPIP 1.7, ... j’ai des rubrique vides, ce qui n’est absolument pas le cas. J’ajouterai que les commentaires et l’aide sont insuffisants.

    J’adore SPIP, et j’aimerais pouvoir utiliser des trucs comme ça, mais ... malgré tous mes essais d’une journée, ma compréhension partielle mais suffisante de SPIP et php, rien n’y fait. Développons SPIP, mais développons vraiment pour tous !!!

    Sans rancune ;-o) François

    Répondre à ce message

    • > Pagination 18 février 2004 21:03, par Robert

      J’ajouterai que les commentaires et l’aide sont insuffisants. ...
      Développons SPIP, mais développons vraiment pour tous ! ! !

      Je ne peux que souscrire au "NOUS". Qu’attends-tu pour t’y mettre ?

      Sans rancune ;-o) François

      Pareillement,
      Robert.

      Répondre à ce message

      • > Pagination 20 février 2004 10:04, par franz

        Aucun problème pour moi ... d’autant que je suis formateur et tuteur sur des plate formes d’apprentissage à distance, ce serait avec joie. Mais il faut que je comprenne comment ça fonctionne précisément, pour pouvoir localiser toutes les bêtises qu’on peut faire. Ce qui ne marche pas avec.

        Tiens, par exemple, je fais une pagination avec des boucle articles : Il y a un tableau autour et dedans et une autre boucle dont surtout une documents absolument nécessaire : est ce que ça perturbe ?

        Les incompatibilités avec les différentes versions de SPIP sont à peine listées. Qu’est ce qui perturbe ? J’ai essayé en 1.5.2 et en 1.7, sur un serveur distant et en local ... Faire un tutoriel vraiment efficace nécessite de faire un véritable plan de test en amon ... et je n’arrive pas à faire le plus petit début de fonctionnement.

        Alors voilà, j’aimerais bien aider, mais j’peux point (tzoin tzoin tzoin).

        Amicalement

        françois

        Répondre à ce message

    Retour au début des forums

  • > Pagination —> Xpagination

    12 février 2004 22:13, par Grégoire

    Quelqu’un aurait-il Xpagination ? Le site de boomtchak étant fermé, le script n’y est plus.

    Amicalement Grégoire

    Répondre à ce message

    Retour au début des forums

  • > Pagination

    25 septembre 2003 17:52, par Dany

    Suite de la precedente demande :

    Pour utiliser cette boucle, je n’utilise pas rubrique.php3 mais mot.php3...

    Par ailleurs, quand j’affiche la page dans le navigateur avec une URL du type :

    .../mot.php3

    j’obtiens bien le resultat "il n’y a pas d’article dans cette rubrique"

    En revanche si l’URL est du type : .../mot.php3 ?id_mot=10

    alors j’obtiens le message d’erreur dont je parle dans le precedent message.

    Je ne sais pas si cela aidera...

    merci encore

    Répondre à ce message

    • > Pagination 25 septembre 2003 19:48, par DoriaN

      est-ce que tu as essayé la nouvelle version mise en ligne aujourd’hui ? ton problème ressemble à celui décrit dans l’article et qui est fixé depuis (ps : il semble cela dit qu’il s’agisse d’un problème spécifique a easyphp car je ne l’ai pas rencontré lors de mes tests (local sous mac os x et sur mon site)

      Répondre à ce message

      • > Pagination 26 septembre 2003 16:28, par dany

        Je suis passé ce jour de la version II à la III. Le problème reste inchangé.

        Répondre à ce message

        • > Pagination 26 septembre 2003 17:04

          Curieux, c’est pourtant cette version qui fonctionne ici : http://wb.attac.be/mot12.html

          Suggestions :
          - As-tu adapté le code de la boucle à l’option choisie ? pour une page mot, il faut bien sur mettre : $idtype=#ID_MOT; $type = "mot"; (à la place de $idtype=#ID_RUBRIQUE; $type = "rubrique";)
          - Penser à faire recalculer la page et à vider le cache du navigateur

          Répondre à ce message

          • > Pagination 29 septembre 2003 11:28

            Je l’avais pas fait (ignorant que je suis !!)...Ceci dit cela ne fonctionne toujours pas. J’ai refait toute la manip depuis le debut...rien n’y fait...toujours la même erreur...

            Répondre à ce message

            • > Pagination 29 septembre 2003 11:49, par Robert

              as-tu fais attention à ceci :


              A propos des squelette inclus : Si vous mettez la boucle dans un squelette inclus, il est nécessaire mais apparament pas suffisant d’appeler le squelette inclus avec <INCLURE(mon_squelette.php3){id_rubrique}>. Il faut en plus, ré-imbriquer la boucle dans une boucle rubriques et dans le squelette inclus lui-même. On ne sait pas pourquoi, mais on sait que sinon ca ne marche pas bien. Celui qui trouve va passer pour un fortiche ;-). En bref pour les squelettes inclus, ca donne ceci :

              <BOUCLE_rubrique(RUBRIQUES){id_rubrique}>
                      Le code et la boucle  ...
              </BOUCLE_rubrique>

              et d’ailleurs à tes boucles en général... car à ma connaissance, c l’origine typique d’un problème du type <blink> ... </blink> avec spip

              Répondre à ce message

              • > Pagination 30 septembre 2003 10:21, par dany

                Je ne suis pas dans cette configuration d’inclure. J’ai verifié mes boucles, refait même la manip depuis le depart avec les correction que vous m’avez tous suggérées. Rien n’y fait. En revanche tu fais reference à des blink /blink et en effet, la ligne sur laquelle l’erreur est mentionnée dans la page contient bien ces balises dont je n’ai aucune idée de la signification. En tout cas merci pour votre aide, si une idée vous vient, merci de m’en faire part !!

                Cordialement.

                Répondre à ce message

                • > Pagination 5 octobre 2003 10:55, par DoriaN

                  la mention des codes <blink>...</blink> te signale une erreur dans ton code spip, le problème n’est a priori pas lié à la contrib mais a tes boucles, je te suggére de repartir a zero et d’y aller par étapes simples.

                  Répondre à ce message

                • > Pagination 21 octobre 2003 20:20, par George

                  J’ai eu le meme probleme et je suis passe par tout ce qui s’est dit ici. Mais as-tu pense a remplace id_rubrique par id_mot dans la boucle compte_articles. Ca a resolu mes problemes

                  Répondre à ce message

    • > Pagination 15 janvier 2004 22:42, par Fabrice WANG

      Est que l’on peut avoir un affichage de type 1|2|3... Si oui comment faire ?

      Voir en ligne : Pagination

      Répondre à ce message

    Retour au début des forums

  • Mise à jour de cette contrib

    25 septembre 2003 09:20, par DoriaN

    Cet article a été mis à jour pour tenir compte des remarques et erreurs constatés par certains. C’est pourquoi, comme indiqué ici : « FAQ SPIP-Contrib », les messages des forums ont été supprimés.

    Notez, comme l’avait dit François, qu’il existe également une autre solution de pagination : Xpagination

    Répondre à ce message

    Retour au début des forums

  • > Pagination

    4 octobre 2003 20:49, par Francois

    Bonjour à tous, Comme Dany, j’utilise le script dans mot.php3, et aussi dans rubrique.php3. Dans cette dernière, pas de problème, cela fonctionne très bien. Par contre dans la page "mot" : aucune erreur mais la pagination ne s’affiche pas !!! La page se découpe bien à X articles mais sans pagination ? J’utilise une boucle "articles" avec id_mot. Avec les variables $idtype = #ID_MOT et $type = "mot" Si quelqu’un a une idée du problème !! Merci par avance. Francois.

    Répondre à ce message

    • > Pagination 5 octobre 2003 12:24, par Robert

      c’est pourtant cette version du script sur un squelette mot qui fonctionne ici

      Suggestions de vérification :
      - Vérifier le code spip
      - et surtout le code php (le code qui est entre <?php ... ?>. Par exemple, le nom des variables du script d’origine ne doit pas être changé ($total, $compteur, etc.). Le nom de la variable php $debut_article doit être le même que le paramètre de la boucle qui affiche les articles {debut_article, XX} (le mieux est de laisser debut_article comme dans le script original). Vérifier également s’il ne manque pas un ; (point-virgule) quelque part, ...

      Cordialement, Robert

      Répondre à ce message

    Retour au début des forums

0 | 25



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net