SPIP - Contrib

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



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

Pagination

samedi 28 août 2004, par James. Dernier ajout lundi 3 juillet 2006


Filtre générique et paramétrable permettant l’affichage de la liste des pages d’une boucle contenant un critère de limite du type {debut_xxx, yyy}

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.


Répondre à cet article

  • Pagination

    9 avril 2008 18:45, par emic78

    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!=''){
                        
    ?>

  • [(#TITRE|supprimer_numero)]

  • <?
                        
    }else{
                        
    ?>
  • [(#TITRE|supprimer_numero)]

  • <?php
                        
    }
                        
    ?>
    /B_articles> [

    (#PAGINATION)

    ]

    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 ?

    Répondre à ce message

Retour au début des forums

  • Pagination

    17 octobre 2006 17:02, par shu

    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...

    Répondre à ce message

    Retour au début des forums

  • Pagination

    13 mai 2006 19:42, par Phil

    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...).

    Répondre à ce message

    Retour au début des forums

  • Pagination

    10 juillet 2006 11:57, par takamo

    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 ^.^

    Répondre à ce message

    Retour au début des forums

  • Pagination

    27 juin 2006 11:00, par valery

    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 !

    Voir en ligne : www.taurillon.fr

    Répondre à ce message

    Retour au début des forums

  • Pagination

    15 juin 2006 22:11, par smellup

    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.

    Répondre à ce message

    Retour au début des forums

  • 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 :)

    Répondre à ce message

    Retour au début des forums

  • Pagination dans la version 1.9

    5 juin 2006 23:21, par Fil

    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).

    Répondre à ce message

    Retour au début des forums

  • Pagination

    2 juin 2006 22:29, par pat26

    J’ai essayé de mettre en place la pagination. J’ai l’erreur suivante

    Fatal error : Call to undefined function : self() in c :\program files\easyphp1-8\www\club26allan\mes_fonctions.php3 on line 5

    A quoi correspond cette fonction ? Merci

    Répondre à ce message

    Retour au début des forums

  • Pagination

    8 mai 2006 10:38, par germond

    BONJOUR,

    Je travaille avce SPIP 1.8.3 et je voudrais utiliser le filtre pagination pour visualiser les différents documents liés à un article. Je pense avoir suivi les différentes étapes d’installation ( à savoir : créations d’un fichier mes_fonctions.php3 à la racine du site SPIP, création d’un fichier pagination.php au même endroit) mais en local, visiblement ça ne marche pas... Quelqu’un peut m’aider ?

    Répondre à ce message

    Retour au début des forums

  • Pagination

    26 avril 2006 10:38, par fredbref

    J’ai un soucis, ça marche "des fois"... je m’explique : j’utilise le script pour lister un certain nombre d’articles dans une rubrique qui évolue chaque jour (retrait/ ajout d’articles), il s’agit d’une revue de presse... certains jours, en fonction du nombre d’articles, le script m’affiche une page 4 à cliquer mais qui n’ouvre sur aucun résultat...

    Voir en ligne : revue de presse du couac

    Répondre à ce message

    Retour au début des forums

  • 0 | 25 | 50 | 75 | 100



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