Une classe de pagination en Php - bientôt...

14/04/2006 19:22
1.072 lectures
Après quelques recherches infructueuses sur le web pour mon travail, j'ai développé ma propre classe de pagination en Php.
Pour ceux qui l'ignore, la pagination permet de présenter de façon plus claire un grand nombre d'informations en limitant la taille des données que l'on va afficher à chaque page. En effet, au lieu de présenter une liste de 500 liens les uns derrière les autres et d'user du temps serveur pour rien, une pagination de 50 éléments diminuera considérablement le temps d'affichage.
Après ce rappel en forme de lieu commun, qui me permet de meubler ce billet, passons aux divers éléments de cette classe.

Différents formes de pagination.
L'avantage de l'objet c'est que l'on va pouvoir facilement générer des types de pagination différents sans avoir à gérer un code complexe à chaque fois. Ainsi j'ai pour le moment dans la version beta de la classe, 3 types de pagination.

La pagination totale :
Forme : Page 1 2 3 4 5 6
Description : Affichage les uns derrière les autres des différentes numéros de pages

La pagination partielle :
Forme : << < Page 5 6 7 > [html]TAG_HTML_02TAG_HTML_02[/html]
Description : Ici les numéros de page sont affichés par groupe de X éléments des liens permettant d'accéder aux groupes d'éléments précédent, suivant, premier et dernier.

La pagination par liste déroulante :
Forme : Page [liste déroulante des n° de page] / 10
Description : Contenus dans un formulaire, les numéros de pages sont affichés dans une liste déroulante.

Chaque pagination est assortie d'un nombre croissant et non exhaustif de paramètres.
Exemples au hasard :
- Le nombre d'éléments pour chaque groupe de la pagination partielle.
- Le texte à mettre devant les numéros de page (Par défaut : 'Page')
- le caractère de séparation entre les numéros de page (Par défaut : '|')

Comment ça marche ton truc ?
Les différentes classes existantes sur le net, faisait passer la ressource contenant les résultats de requête dans l'objet de pagination.
J'ai pour ma part opté pour ne transmettre que le numéro de la page en cours, charge au développeur de calculer l'offset et la limite de sa requête.

Exemple :

// on admets qu'on a un tableau composé de 500 éléments
// on veut afficher 50 éléments par page
// par défaut la pagination commence à 1

// inclusion de la classe
require ('phpBarre.php');
// instanciation du nouvel objet
$oBarre = new BarreNavigation($nElement /*500*/, $nElementParPage/*50*/, $nPageEnCours);
// création du code XHTML de la barre
$oBarre->createSelectBarre();
// Affichage de la barre
$oBarre->showBarre();


A cela s'ajoute la possibilité de transmettre des paramètres avec chaque page si par exemple on a des éléments qui rentre en compte dans l'affichage (comme pour une recherche)

// on ajoute un paramètre et sa valeur
$oBarre->AddParam('g_typerecherche', 1);
// cela générera une url de type '?page=1&g_typerecherche=1' pour chaque numéro de page


Pour le cas où c'est un système de template qui est utilisé et on veut juste récupéré le code XHTML de la barre et non l'afficher on utilisera :

$sTexteBarre = $oBarre->getBarre();
// puis association entre la balise de template et le code généré

Super, où est dispo cette merveille ?
Comme le titre l'annonce, ma classe est disponible bientôt, je dois encore faire quelques modifications pour pouvoir la distribuer. Notamment, je dois commenter et rajouter certaines fonctionnalités. De plus, j'utilise cette classe à mon travail et je dois encore obtenir l'autorisation de la distribuer. A noter, que la plupart des nouveaux sites de ma boîte l'utilise : http://www.medietas.com (si par hasard ce lien est considéré comme une publicité illégale, prévenez moi je le retirerai sans faute).

Commentaires (0)

Flux RSS
  • Aucun message pour l'instant.

Commenter

Flux RSS Que du sexe, des femmes nues, des hommes nus, des animaux nus, bref le blog le plus intéressant du monde... et un poil de football et d'informatique aussi... mais nus évidemment.
teuh1308510950.jpg

teuh

Voir son profil complet

Chargement... Chargement...