SPIP - Contrib

SPIP - Contrib

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

70 visiteurs en ce moment

fontsizeup fontsizedown
[106 commentaires]

Pagination

samedi 28 août 2004, par James

  • Digg
  • Del.icio.us
  • Facebook
  • Google
  • Technorati

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.

Retour en haut de la page

106 Messages de forum

Voir toute la discussion

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |...

  • Répondre à ce message

    13 avril 10:12

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

  • Répondre à ce message

    10 avril 10:31 , par emic78

    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.

  • Répondre à ce message

    10 avril 10:00 , par emic78

    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.

  • Répondre à ce message

    10 avril 08:45

    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 ?

  • Répondre à ce message

    9 avril 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

    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

    30 juillet 2006 23:10 , par smellup

    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+

  • Répondre à ce message

    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

    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

    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.

  • 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |...

    Répondre à cet article

    Retour en haut de la page

    Ça discute par ici

    Ça Spip par là

    1 | 2 | 3 | 4


    Plugins SPIP

    SPIP

    SPIP Blog

    SPIP Démo

    SPIP Doc

    SPIP Forums

    SPIP Herbier

    SPIP Irc

    SPIP Party

    SPIP Sedna

    SPIP Test-GrmlEU

    SPIP User

    SPIP Zone

    Vidéos [@spip.org]
    SPIP | Squelette | Se connecter | Plan du site | Suivre la vie du site RSS 2.0