Php5 - classe de pagination modulable


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

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.