Php5 - classe de pagination modulable

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 614 fois - Téléchargée 29 fois


Contenu du snippet

Bon dans ma continuité de bouts de class-codes en PHP5, voici donc ma classe de pagination.
Tout standard, elle ne produit aucune sortie HTML ! Donc utilisable n'importe comment, n'importe où, n'importe quand ! :)

Voici comment elle se présente :

Source / Exemple :


<?php
class Pagination {

 public $output; // Sortie HTML;
 public $nbtotal; // Nombre total de liens, de news, de n'importe quoi :)
 public $_getName; // Nom du _GET pour l'affichage des pages !
 
 public $nbmaxparpage;  // Nombre d'affichage par page
 private $nbdepages;    // Nombre de pages nécessaires
 public $minid;         // Retourne l'ID du premier enregistrement pour la page en cours
 
 public function __construct( $nbtotal, $nbmaxparpage = 10, $getName = 'page') {
 
  $this->nbtotal = (int) $nbtotal;   
  $this->nbmaxparpage = (int) $nbmaxparpage;
  $this->nbdepages = ceil($this->nbtotal / $this->nbmaxparpage);
  $this->_getName = $getName;
  
 }

 public function Generate() {
 
  unset($this->output);
  
  $pageencours = ( isset($_GET[$this->_getName]) && (int) $_GET[$this->_getName] > 1 ) ? (int) $_GET[$this->_getName] : 1;
  $this->minid = ( $pageencours - 1 ) * $this->nbmaxparpage;
   if ( $this->nbdepages > 1 ) {
        for ( $i=1; $i <= $this->nbdepages; $i++ ) {
              if ( $i === $pageencours ) {
                    $this->output[] = array('link' => FALSE, 'page' => $i);
              } else {
                    $this->output[] = array('link' => TRUE, 'page' => $i);
              }
        }
   } else {
        $this->output = NULL;
   }
    
 }
 
}
?>
<?php
//L'utilisation ?

$query = mysql_query('SELECT COUNT(*) FROM news');
$data = mysql_fetch_row($query); // Supposons que vous récupérer le nombre max de news
$num_rows = (int) $data[0]; 

$Pagination = new Pagination ( $num_rows, 10 ); // Affichera 10 news par page
$Pagination->Generate; // Génére la pagination (peut y avoir d'autres options à changer avant, c'est vous qui voyez !)

 if ( isset($Pagination->output) && is_array($Pagination->output) ) { // On vérifie que y'a bien un output, sinon on zap !
      $var = '<span> Page : ';
      foreach ( $Pagination->output as $key ) { // On parcours le tableau
                if ( $key['link'] ) {
                     $var .= '<a href="./news.php&'.$Pagination->_getName.'='.$key['page'].'">'.$key['page'].'</a> ';
                } else {
                     $var .= $key['page'].' '; // Si on est sur la bonne page, on met pas de lien.
                }
      }
      $var .= '</span>';
 }

 if ( isset($var) ) echo $var; // On affiche le tout.

?>

Conclusion :


Simple, rapide et efficace.
Suffit d'adapter l'HTML comme vous le voulez !

La classe gère aussi la gestion du ?page=xx. Si vous préférez autre chose que ?page=xx, spécifiez le dans le __construct() ou alors via $Pagination->_getName = 'nomdelavariable';
Ex: (je veux un ?mypage=xx au lieu de ?page=xx)
$Pagination = new Pagination($num_rows, 10, 'mypage');

Et voila c'est reglé :)

Si y'a de l'amélioration, je prend note (mais aucun HTML ou mise en forme, simplement que du code PHP pur).

A voir également

Ajouter un commentaire Commentaires
midouni
Messages postés
3
Date d'inscription
samedi 17 octobre 2009
Statut
Membre
Dernière intervention
20 avril 2012

20 avril 2012 à 16:51
lorsque vous maite une condition where dans la raquette alors sa marche pas!!!!!
cs_PIM44
Messages postés
3
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
16 juin 2009

16 juin 2009 à 00:41
Remplie parfaitement son rôle le tout proprement en php5, merci :)
finestlyker
Messages postés
3
Date d'inscription
jeudi 7 février 2008
Statut
Membre
Dernière intervention
6 décembre 2009

5 déc. 2008 à 22:41
eh comment on insère ton code source car je cherche depuis un bout une source a explorer et apprendre sur la pagination et j'ai trouver la tienne excellente sauf que je trouve pas ou et comment tu dois faire avec ta fonction qu'est que je met exemple $sql = "SELECT * FROM list WHERE id='$id' AND cat='1'";

merci de ton aide ! je suis pas expert mais intermédiaire dans le PHP !
beejeridou
Messages postés
35
Date d'inscription
lundi 10 avril 2006
Statut
Membre
Dernière intervention
21 mai 2010

15 sept. 2008 à 11:27
Si aucun message ne s'affiche, c'est tout simplement que tu n'as pas assez de résultats dans ta BDD!
pour tes essais, essaye ça:

$Pagination = new Pagination ( $num_rows, 1 );

Sinon, je trouve que c'est une bonne classe, evidemment à améliorer pour n'afficher par exemple, en cas de nombreux résultats, que les 5 premiers résultats, la page courante et les 5 derniers^^

Bye!
cs_Franquito
Messages postés
61
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
23 décembre 2006

22 sept. 2006 à 11:02
Salut FHX !

Trés jolie classe !!!

Pour ceux a qui cela n'affiche rien, c'est parce qu'il manque les parentheses a generate :

$Pagination->Generate();
Afficher les 15 commentaires

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.