Classe pagination

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 867 fois - Téléchargée 18 fois

Contenu du snippet

La classe a besoin de connaître la page en cours pour construire correctement le système de pagination.

Source / Exemple :


<?php
/******************************************************************
   Projectname:   Panigate Class
   Version:       1.0b
   Author:        Oussi Yassine <darkinux@gmail.com>
   Last modified: 25 Avril 2009
   Copyright (C): 2009 Boxcreation, All Rights Reserved

                                                                                                                                    • /
class paginate { public $output; public $nbTotal; private $_getPage; public $nbPerPage; public $currentPage; public $nbPages; public $firstId; public $preview; public $next; public $first; public $last; public function generate($nbTotal, $nbPerPage = 1, &$getPage) { $this->nbTotal = (int) $nbTotal; $this->nbPerPage = (int) $nbPerPage; $this->nbPages = ceil($this->nbTotal / $this->nbPerPage); $this->_getPage = (int) $getPage; unset($this->output); $this->currentPage = ( !empty($this->_getPage) && ($this->_getPage > 1) && ($this->_getPage <= $this->nbPages ) ) ? $this->_getPage : 1; $this->firstId = ( $this->currentPage - 1 ) * $this->nbPerPage; if ( $this->nbPages > 1 ) { if($this->currentPage+4 > $this->nbPages) { $this->last = $this->nbPages; } elseif($this->currentPage-4 > 1) { $this->last = $this->currentPage+4; } else { $this->last = $this->currentPage+4; } if($this->currentPage-6 <= 0) { $this->first = 1; } elseif($this->currentPage+4 < $this->nbPages) { $this->first = $this->currentPage-4; } else { $this->first = $this->currentPage-6; } for ( $i=$this->first; $i <= $this->last; $i++ ) { if( $this->currentPage != $i ) { $this->output[$i] = 1; } else { $this->output[$i] = 2; } } if($this->last < $this->nbPages) { $this->output[$i] = 3; } } else { $this->output = NULL; } } public function nbPages() { return $this->nbPages; } public function currentPage() { return $this->currentPage; } public function getPaginate() { return $this->output; } public function firstId() { return $this->firstId; } } ?> Exemple d'utilisation: // Calculate Result if($search->search($tag) > $nbPerpage) { $paginate = new paginate(); // Paginate if(isset($_GET["page"]) && !empty($_GET["page"])) { $page = $_GET["page"]; } $nbResult = $search->search($tag); $oS->assign("total",$nbResult); $paginate->generate($nbResult, $nbPerpage, $page); if (is_array($paginate->getPaginate()) ) { if($paginate->currentPage() > 1 ) { $oS->assign("preview",$paginate->currentPage()-1); } $oS->assign("paginate",$paginate->getPaginate()); if($paginate->currentPage() < $paginate->nbPages()) { $oS->assign("next",$paginate->currentPage()+1); } } $oS->assign("firstId",$paginate->firstId); $lastentry = ($paginate->firstId+$nbPerpage)-$nbResult; $oS->assign("lastentry",($paginate->firstId+$nbPerpage)-$lastentry); $firstId = $paginate->firstId; } Exemple d'utilisateur avec smarty : <div id="paginate"> {if $preview neq NULL} <a href="/search/{$preview}/?tag={$tag}">« Preview</a> {/if} {foreach from=$paginate key=id item=page} {if $page eq 1} <a href="/search/{$id}/?tag={$tag}">{$id}</a> {elseif $page eq 2} <span class="selectednow">{$id}</span> {elseif $page eq 3} ... {/if} {/foreach} {if $next neq NULL} <a href="/search/{$next}/?tag={$tag}">Next »</a> {/if} </div> Une bref explication : la method $paginate->getPaginate() renvoi un tableau : array(6) { [1]=> int(2) [2]=> int(1) [3]=> int(1) [4]=> int(1) [5]=> int(1) [6]=> int(3) } Et quand une clé [X]=> int(1) >> Les autres Pages; Et quand une clé [X]=> int(2) >> Page actuel; Et quand une clé [X]=> int(3) >> Afficher les trois points (...); Si vous avez des suggestions n'hesité pas.

Conclusion :


J'ai besoin de vos suggestions.

A voir également

Ajouter un commentaire

Commentaires

tyranausor
Messages postés
3544
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
11 janvier 2020
1
Bonjour, il manque quelques explication sur tes fonctions (au moins les documenter) et sur les variables. De plus, je ne comprends pas grand chose à ton exemple
cs_darkis
Messages postés
1
Date d'inscription
samedi 27 mai 2006
Statut
Membre
Dernière intervention
12 octobre 2009

J'ai mis un peu de temps avant de r?pondre et donner des explications d?sole,

Et pour voila pour pgassie pour etre honnete avec vous je suis la pour prendre et pour corriger mes fautes,
Merci pour tes conseils
pgassie
Messages postés
12
Date d'inscription
mardi 28 octobre 2003
Statut
Membre
Dernière intervention
13 décembre 2006

Salut darkis,

Je n'ai pas l'habitude de me gausser.

Mais là, c'est tendre des verges pour se faire battre.

"phpcs.com" n'est pas un site pour spécialistes abscons ( ce n'est pas une injure ), mais de jeunes qui veulent apprendre par l'exemple.

Les cuistres n'y sont pas les bienvenus.

La seule chose à retenir de ce post est dans la présentation d'un code à l'usage de l'enseignant futile.

Cela te dérangerait-il beaucoup de donner une description courte de ce qu'est supposé faire ton code ?
Quelle en est l'entrée, qu'est-ce qu'on récupère en sortie ?

Lignes 12 à 22, tu déclares des attributs "public" rien que pour mettre dans le vent PHP4, la suite du code ne le justifie pas, et jusqu'à plus ample informé PHP5 considère un attribut comme public par défaut.

De la ligne 121 à 147, grâce à des sauts de ligne qui certes ne pèsent pas dans le fichier, mais qui ne rajoutent rien à la lecture ni sur l'écran ni sur papier, tu nous assassines de fonctions inutiles :
expliques-moi l'intérêt d'avoir "$page.nbPadges()" au lieu de "$page->nbPadges"

Si tu veux faire du POO (programmation orienté objet) pur et dur, pour chaque attribut X (private), tu fais un setX() et un getX(), si c'est utile. Si tu n'as pas de constructeur; au moins mets des valeurs par défaut (0,chaîne vide, array()).

Ta classe n'a qu'une seule fonction exploitable "generate(X,Y,Z)", vire ta classe; en ne gardant que la fonction "generate(X,Y,Z)", ça marche tout aussi bien pareil ; là dis donc!

Encore que...

On ne sait toujours pas à quoi ça sert !

Bravo les modérateurs qui mettent "initié" à ce code qui sert à... prochain épisode.

Bonjour chez toi.
testabc
Messages postés
33
Date d'inscription
jeudi 17 juillet 2008
Statut
Membre
Dernière intervention
23 juillet 2014

le code est clair pour un dev
moi je suis graphiste mais j'apprends vite
sauf que les classes ca reste encore abstrait...

j'ai besoin d'exemple(s) concret pour comprendre !
echo 'merci'
cs_hornetbzz
Messages postés
60
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
3 janvier 2011

Je n'ai pas testé mais le code est clair et compréhensible.

Dommage, je viens juste de passer la nuit à faire la même chose !

Justement, la comparaison me fait penser que tu pourrais gérer un incrément/décrément variable, dépendant du nbre total de pages. C'est plus sympa de naviguer par bloc de 50 pages s'il y en a 500 au total :-)

Et encore plus sympa, ça serait bien de balancer 2 autres classes, par exemple des objets et une mise en page html, sinon l'intérêt d'avoir une classe pagination seule est mineur.

Merci donc.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_darkis)