begin process at 2010 02 10 01:00:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > PHP5 - CLASSE DE PAGINATION MODULABLE

PHP5 - CLASSE DE PAGINATION MODULABLE


 Information sur la source

Note :
7,75 / 10 - par 4 personnes
7,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :php5, pagination, class, poo, news Niveau :Débutant Date de création :17/04/2006 Date de mise à jour :17/04/2006 01:44:48 Vu :10 859

Auteur : FhX

Ecrire un message privé
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

 Description

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

  • <?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.
  • ?>
<?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).


 Historique

17 avril 2006 01:44:48 :
Update mineur, sans importance (compatibilité entre ma classe d'origine et celle la pour que ca puisse marcher chez tout le monde :) )

 Sources du même auteur

PHP5 - UTILISATION DES ITÉRATEURS ET DE LA RÉFLECTION.
PHP 5 - CLASSE MYSQL (STYLE MYSQLI)
[PHP5] CLASSE DATE/HEURE
PHP5 - GESTION DE MODULES EN OBJET
PHP5 - CLASSE DE NEWS ET DE COMMENTAIRES

 Sources de la même categorie

Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan
Source avec Zip POO - FACTORY CLASS par Waredan
POO - SINGLETON CLASS par Waredan
POO - PARAMETERHOLDER CLASS par Waredan

 Sources en rapport avec celle ci

CLASS RECHERCHE PHP5 POO par mtrix000
CLASS AUTHENTIFICATION PHP5 POO par mtrix000
CLASS PAGINATION PHP5 POO par mtrix000
[PHP5] CLASSE DE NEWS par FhX
Source avec Zip SYSTEME DE NOUVELLE POO par hametsu21

Commentaires et avis

Commentaire de iomega le 18/04/2006 08:47:21

Bonjour FhX et bravo pour ce code.
Malheureusement je n'ai pas une version php5 mais php4.2.0  donc je voudrai savoir ce qu'il faut changer pour que cela marche dans une version antérieur car ce code m'intéresse.
Merci beaucoup

Commentaire de kiki2sirom le 18/04/2006 10:57:27

heu il me semble bien que les classes en PHP, c'est PHP5 si je ne m'abuse...

iomega ta version de PHP 4.2.0 commence à dater un peu.

un conseil : www.php.net

kiki

Commentaire de iomega le 18/04/2006 11:03:49

Hello merci du conseil mais cela ne dépend pas de moi et non les classes en PHP sont depuis cette version

Commentaire de kiki2sirom le 18/04/2006 11:38:46

ok muff autant pour moi, là j'ai pas vérifié mes sources
je sors ! et bim !
ça m'apprendra à vouloir faire le malin ;)

Commentaire de FhX le 18/04/2006 13:07:22

Voui voui c'est du PHP5 :)
Pour la rendre compatible PHP4, il faut enlever tous les "public/private/protected" de ma classe.

Je n'utilise pas de fonction spécialement concu pour PHP5, donc suffit d'enlever que ce que je t'ai mis plus haut et ca fonctionne :)

Commentaire de GRenard le 18/04/2006 13:56:48

+ Remplacer les public/private/protected par "var" pour les variables.
+ Remplacer __construct par Pagination

Commentaire de iomega le 18/04/2006 14:16:19

Re hello j'ai essayé et je n'ai plus de message d'erreur donc merci. Par contre cela ne m'affiche rien.
Voici ce que j'ai fait

$query = mysql_query('SELECT count(*) FROM demande');
$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['id_demande'] ) {
                     $var .= '<a href="./news.php&'.$Pagination->_getName.'='.$key['nom_demande'].'">'.$key['nom_demande'].'</a> ';
                } else {
                     $var .= $key['nom_demande'].' '; // Si on est sur la bonne page, on met pas de lien.
                }
      }
      $var .= '</span>';
}
  
if ( isset($var) ) echo $var; // On affiche le tout.
  

Commentaire de FhX le 18/04/2006 14:36:19

Voila, GRenard a été plus précis que moi sur le portage PHP5 vers PHP4.

Commentaire de malalam le 21/04/2006 10:05:24 administrateur CS

Hello,

j'ai du retard dans les commentaires et les notes lol...et comme je pars 3 jours, là...
je commente TRES vite et mets une tite note TRES vite :-)
C'est sympa! Je serais toi, je pousserai un peu plus en proposant des options (pas de display...non) : renvoie des numéros de page précédente et suivante, voire de 2 ou 3...ajout de filtres sur la page courante, etc...
mais bon, c'est sympa comme ça :-) Comme tjrs.

Commentaire de hametsu21 le 24/04/2006 18:46:06

De même, rien ne s'affiche... et pas de message d'erreur.

Commentaire de Franquito le 22/09/2006 11:02:23

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();

Commentaire de beejeridou le 15/09/2008 11:27:47 5/10

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!

Commentaire de finestlyker le 05/12/2008 22:41: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 !

Commentaire de PIM44 le 16/06/2009 00:41:14 8/10

Remplie parfaitement son rôle le tout proprement en php5, merci :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Class POO retourné le nom de l'objet [ par MeTh ] Bonjour,Comment retourné le nom de l'objet déclaré?exemple :$monobjet = new GridR();comment recuperé $monobjet dans ma class?Merci news [ par tomm123456 ] bonjour et joyeuses fetes . voil&#224; j'ai un probleme de mise &#224; jour de news .Quand je veux modifier une news , il me renvoie bien les vale templates avec poo [ par lesnes ] bonjours je reprogramme totalement mon site en poo et je souhaiterai utiliser les templates mais l'on ne peut pas faire appel a une class exterieur a Découverte POO [ par kyript ] Bonjour à tousje post ici afin que vous donniez un avis sur la méthode utiliser...Je tente d'afficher des news sur mon site, j'ai donc les pages suiva problème pagination [ par NAMB ] Bonjour,j'ai trouvé un script de news sur un site (il marche très bien) sauf qu'il n'y a pas de système de paginationvoici le script de news:&lt;?phpm Pb avec la class de news de FhX [ par acidline ] Bonjour à tous,Je me présente, je m'appelle Nicolas, j'ai 24ans et la POO en PHP est nouveau pour moi.Je me suis mis en tête d'utiliser la class de ne Ancre et pagination [ par loxa ] Bonjour a tous, voila j'ai un systeme de news avec pagination.Pour faciliter l'acces au news j'ai créé un sommaire, mon probleme et que l'ancre vers u [POO] Une classe dans une classe [ par Mrreivax ] Bonsoir.Et bien voila. J'ai créé une classe de gestion des images.J'ai par la suité créé une autre classe de gestion de banières.Mais, cette dernière probleme avec php photo modules [ par mellekristel ] Bonjour, je suis débutante en php. j'ai créer un site pour une artiste peintre, et j'ai utilisé et modifié le script "php photo module", Ce script est PHP5 -> SPL , tri sur DirectoryIterator [ par stailer ] Bonjour, J'utilise la classe DirectoryIterator pour lister tous les répertoires et fichiers d'un chemin. Grâce à isFile je peux lister uniquement les


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales