begin process at 2012 05 27 20:31:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > SYSTÈME DE PAGINATION COMPLET

SYSTÈME DE PAGINATION COMPLET


 Information sur la source

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :pagination, pager, php 5, poo, paginer Niveau :Initié Date de création :26/04/2010 Date de mise à jour :02/06/2011 22:13:12 Vu / téléchargé :7 672 / 785

Auteur : genetApt151

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

 Description

Cliquez pour voir la capture en taille normale
Bonjour, PHPPager est une implémentation d'un système de pagination en PHP 5 (5.3.0 minimum) entièrement modulable avec spéparation complète de la partie algorithme de la partie présentation, il est alors très facile de personnaliser l'affichage.

Je fournis des exemples avec plusieurs modèle de template d'affichage.
Merci commenter cette source pour donner votre avis, pour toutes suggestions d'amélioration, correction de bug...

demo et documentation :

http://www.guillaume-genet.fr/phpPager

install ation (pour les pages de test) :
- créer une base de données (ex: pager)
- exécuter le script pager.sql pour créer le jeu de test
- configurer la connexion à la page de données dans le fichier connexion.php

Source

  • //index.php
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • <html xmlns="http://www.w3.org/1999/xhtml">
  • <?php
  • require_once __DIR__.'/../../../lib/autoload.php';
  • require_once __DIR__."/../../../connexion.php";
  • ?>
  • <head>
  • <meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
  • <link href="pager.css" rel="stylesheet" type="text/css" />
  • <script src="../../../jquery-1.6.1.min.js"></script>
  • </head>
  • <body>
  • <h1> Exemple sliding </h1>
  • <?php require_once(__DIR__.'/../../getSource.php');?><br /><br />
  • <a href="../../../index.php">Retour</a>
  • <?php
  • $query = "select count(*) as total from article";
  • $stm = $bdd->query($query);
  • $result = $stm->fetch();
  • $stm->closeCursor();
  • $stm = null;
  • $pager = new Pager\Pager(new \Pager\Scrolling\Sliding(5));
  • $pager->setItemCount($result['total']);
  • $pager->setItemCountPerPage(6);
  • $pager->setUrl("index.php?page=%d%");
  • if(isset($_GET["page"]))
  • {
  • //setPage renvoie une erreur si le numéro de page est incorrecte ou si on a pas passé un entier ->
  • //cela permet de prévenir le cas où l'utilisateur tente d'accéder à une page qui n'existe pas.
  • //Il faut donc catcher l'exception et renvoyer sur la page d'ereur du site, voir logger l'erreur dans un fichier
  • try
  • {
  • $pager->setPage(intval($_GET["page"])) ;
  • }
  • catch(Exception $e)
  • {
  • echo "erreur:".$e->getCode()." : ".$e->getMessage();
  • //echo "La page ".$_GET["page"]." n'existe pas <br/>";
  • die();
  • }
  • }
  • //construction de la requête
  • $query = "select * from article limit ".$pager->getLeftLimit().", ".$pager->getRightLimit();
  • $stm = $bdd->query($query);
  • $stm->setFetchMode(PDO::FETCH_OBJ);
  • $articles = $stm->fetchAll();
  • ?>
  • <!-- affichage des articles -->
  • <?php foreach ($articles as $article): ?>
  • <p>
  • Titre : <?php echo $article->titre; ?>
  • <br/>
  • Texte: <?php echo $article->contenu; ?>
  • </p>
  • <?php endforeach; ?>
  • <?php
  • if($pager->haveToPaginate())
  • include "pager.php"; //inclusion du template
  • ?>
  • </body>
  • </html>
  • // pager.php
  • <div id="pager">
  • Page <?php echo $pager->getCurrentPage();?> sur <?php echo $pager->getLastPage();?>,
  • De <?php echo $pager->getFirstIndice()+1;?> à <?php echo $pager->getLastIndice()+1;?>
  • <br/>
  • <!-- première page-->
  • <a href="<?php echo $pager->rewriteUrl($pager->getFirstPage()); ?>" > &lt;&lt; </a>
  • <!-- page précédente -->
  • <?php if($pager->getPreviousPage() !== null) : ?>
  • <a href="<?php echo $pager->rewriteUrl($pager->getPreviousPage()); ?>" > &lt; </a>
  • <?php endif; ?>
  • &nbsp;
  • <!-- liste les pages -->
  • <?php foreach($pager->getPages() as $numPage): ?>
  • <?php if($numPage == $pager->getCurrentPage()): ?>
  • [<?php echo $numPage; ?>]
  • <?php else : ?>
  • <a href="<?php echo $pager->rewriteUrl($numPage)?>"><?php echo $numPage; ?></a>
  • <?php endif; ?>
  • <?php endforeach; ?>
  • &nbsp;
  • <!-- page suivante -->
  • <?php if($pager->getNextPage() !== null) : ?>
  • <a href="<?php echo $pager->rewriteUrl($pager->getNextPage()); ?>" > &gt; </a>
  • <?php endif; ?>
  • <!-- dernière page-->
  • <a href="<?php echo $pager->rewriteUrl($pager->getLastPage()); ?>" > &gt;&gt; </a>
  • </div>
//index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<?php
	  require_once __DIR__.'/../../../lib/autoload.php';
	  require_once __DIR__."/../../../connexion.php";
	?>

	<head>
		<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
	    <link href="pager.css" rel="stylesheet" type="text/css" />
	    <script src="../../../jquery-1.6.1.min.js"></script>
	</head>
	<body>

		<h1> Exemple sliding </h1>
		<?php require_once(__DIR__.'/../../getSource.php');?><br /><br />
		<a href="../../../index.php">Retour</a>
		<?php  
		  $query = "select count(*) as total from article";
		  $stm = $bdd->query($query);
		  
		  $result = $stm->fetch();
		  $stm->closeCursor();
		  $stm = null;
	
		  $pager = new Pager\Pager(new \Pager\Scrolling\Sliding(5));
		  $pager->setItemCount($result['total']);
		  $pager->setItemCountPerPage(6); 
		  $pager->setUrl("index.php?page=%d%"); 

		  if(isset($_GET["page"]))  
		  {
		  		//setPage renvoie une erreur si le numéro de page est incorrecte ou si on a pas passé un entier -> 
		    	//cela permet de prévenir le cas où l'utilisateur tente d'accéder à une page qui n'existe pas.
			    //Il faut donc catcher l'exception et renvoyer sur la page d'ereur du site, voir logger l'erreur dans un fichier
			    try 
			    {
			        $pager->setPage(intval($_GET["page"])) ;
			    }
			    catch(Exception $e) 
			    {
			        echo "erreur:".$e->getCode()." : ".$e->getMessage();
			        //echo "La page ".$_GET["page"]." n'existe pas <br/>";
		       		die();
		   	 	}
	  	  }
	  	  
		  //construction de la requête
	  	  $query = "select * from article limit ".$pager->getLeftLimit().", ".$pager->getRightLimit();

		  $stm = $bdd->query($query);
		  $stm->setFetchMode(PDO::FETCH_OBJ);
		  $articles = $stm->fetchAll();
	  	?>
	  	
		<!-- affichage des articles -->
		<?php foreach ($articles as $article): ?>
		   <p>
		      Titre : <?php echo $article->titre; ?>
		      <br/>
		      Texte:  <?php echo $article->contenu; ?>
		   </p>    
		   
		<?php endforeach; ?>
			  
		<?php 
		  	if($pager->haveToPaginate())
		  		include "pager.php"; //inclusion du template 
		?>	
	</body>
</html>


// pager.php

<div id="pager">
    Page <?php echo $pager->getCurrentPage();?> sur  <?php echo $pager->getLastPage();?>, 
    De <?php echo $pager->getFirstIndice()+1;?> à <?php echo $pager->getLastIndice()+1;?>
    <br/>  
    
    <!-- première page-->
    <a href="<?php echo $pager->rewriteUrl($pager->getFirstPage()); ?>" > &lt;&lt; </a>
    
    <!-- page précédente -->  
    <?php if($pager->getPreviousPage() !== null) : ?>
      	<a href="<?php echo $pager->rewriteUrl($pager->getPreviousPage()); ?>" > &lt; </a>
    <?php endif; ?>
    &nbsp; 
    
    <!-- liste les pages -->   
   <?php foreach($pager->getPages() as $numPage): ?>
       <?php if($numPage == $pager->getCurrentPage()): ?>
          [<?php echo $numPage; ?>]
       <?php else : ?>
          <a href="<?php echo $pager->rewriteUrl($numPage)?>"><?php echo $numPage; ?></a>
       <?php endif; ?>
    <?php endforeach; ?>
    
    &nbsp;
    <!-- page suivante -->  
    <?php if($pager->getNextPage() !== null) : ?>
      	<a href="<?php echo $pager->rewriteUrl($pager->getNextPage()); ?>" > &gt; </a>
    <?php endif; ?>
    
    <!-- dernière page-->
    <a href="<?php echo $pager->rewriteUrl($pager->getLastPage()); ?>" > &gt;&gt; </a>     
</div>


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 avril 2010 21:44:53 :
Correction description
27 avril 2010 00:12:01 :
Correction variable non initialisée dans listPage() de MyCustomPager. erreur paramètre dans setCurrentPage de Pager. renomme MyCustomPager.php en MyCustomPager.class.php
27 avril 2010 00:23:51 :
/
28 avril 2010 21:01:27 :
-correction du calcul de la plage de valeur dans MyCustomPager.class -ajout de paramètres par défaut -contrôle des paramètres plus poussé -enlever la connexion de PagerSql.class -remplacement de in_array par mb_eregi pour tester la requête sql -ajout setters protected dans Pager.class pour accéder à tous les attributs -remplacement de str_replace par str_ireplace(insensible à la casse) pour %numPage%
29 avril 2010 22:42:44 :
modif la méthode listPage() de .
29 avril 2010 22:43:52 :
/
01 mai 2010 01:01:39 :
ajout du zip
01 mai 2010 11:17:46 :
//
01 mai 2010 11:18:49 :
/
01 mai 2010 11:21:34 :
/
01 mai 2010 11:44:14 :
/
01 mai 2010 11:46:11 :
/
01 mai 2010 11:50:50 :
/
08 mai 2010 15:37:12 :
ajout d'un exemple. modif dans MycustomPager
12 mai 2010 20:03:14 :
correction du template.
29 mai 2010 18:51:17 :
modif présentation
04 août 2010 23:07:34 :
ajout d'une classe d'exception (PHPPagerException.class). modification de l'architecture des classes (PHPSlidingPager.class hérite de BasePager.class au lieu de SQLPager). changement nom des classes, nom de méthodes. ajout require_once dirname(__FILE__) pour les inclusions.
19 septembre 2010 22:33:07 :
ajout namespace ajout documentation modifications exemple template
05 décembre 2010 11:33:10 :
update doc, exemples...
05 décembre 2010 11:37:37 :
update
12 décembre 2010 20:48:35 :
update doc
12 décembre 2010 20:50:01 :
update doc
02 juin 2011 22:13:16 :
sortie de la version 2 : refonte complète du code et de l'architecture.

 Sources du même auteur

Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO......
Source avec Zip GÉRER LES ACCÈS À UNE BASE DE DONNÉES VIA UNE DAO

 Sources de la même categorie

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip POO - FORMULAIRE NEWSLETTER PHP - PROFESSEUR-PHP.COM par mtrix000
Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
CLASS PAGINATION PHP5 POO par mtrix000
PHP5 - CLASSE DE PAGINATION MODULABLE par FhX

Commentaires et avis

Commentaire de webdeb le 27/04/2010 09:23:31 8/10

Hello,

Ta source est plutôt bien faite, bravo. Au niveau améliorations et simplification tu peux retirer le __construct() ne contenant qu'un appel au constructeur parent. Par défaut, PHP appel le constructeur parent donc on peut se passer de réimplémenter le constructeur si c'est uniquement pour appeler celui du parent. D'autre part, tu devrais retirer les commentaires de séparation de tes méthodes. Ils ne servent à rien si ce n'est d'alourdir la lecture du code.

Je te conseille plutôt d'avoir recours au mot-clé protected plutôt que private pour faciliter les héritages de tes classes. Dans tes constructeurs, il serait judicieux de passer au moins paramètre (obligatoire ou facultatifà : le nombre d'éléments par page:

public function __construct($nbByPage = 10)
{
  $this->nbByPage = (int) $nbByPage;
}

Enfin pour le pager SQL, ton objet PDO je ne devrait pas être instancié directement dans ta méthode mais plutôt passé par dépendance au constructeur par exemple. Ca te permettra deux choses :

* Pouvoir réutiliser un objet PDO existant
* Faciliter les tests unitaires de tes classes en "mockant (simulant)" l'objet PDO avec un objet qui se comporte comme lui sans faire les requêtes SQL sur la base.

Ce qui donne :

class PagerSql extends Pager
{
    protected $pdo, $table;
    
    public function __construct(PDO $pdo, $table = null, $nbByPage = 10)
    {
        parent::__construct($nbByPage);
        
        $this->pdo = $pdo;
        $this->table = $table;
    }
}

Je te laisse améliorer ton code en conséquence ;)

Hugo.

Commentaire de genetApt151 le 28/04/2010 19:13:20

Merci d'avoir répondu.

Effectivement, la classe PagerSql n'est pas très bien implémentée. Je vais passer l'objet pdo en paramètre pour abstraire la partie connexion à la base de données.

Passer des paramètres par défaut, j'y avais pas pensé. C'est un truc que je n'utilise jamais d'habitude. En fait, le problème avec PHP est qu'on ne peut pas définir plusieurs méthodes de même nom de prototype différent comme en java, c++.

Et enfin je ne vois pas l'intérêt d'avoir recours au mot-clé protected plutôt que private. ça sert à rien à part de permettre de faire n'importe quoi dans les classes filles et entrainer des erreurs.

Si on veut accéder aux attributs, il y a les setters et getters pour cela.  

Commentaire de mouloudia16 le 03/05/2010 10:07:16

Bonjour GENETAPT151,
Le lien ne fonctionne pas.
Bon courage.
Cordialement

Commentaire de genetApt151 le 03/05/2010 10:14:42

Salut, si le lien fonctionne mais il faut enlever l'espace 'exemplePage r'. j'ai tout essayé mais cette espace est toujours rajouté automatiquement dans la description.

lien : http://guillaume-genet.100webspace.net/exemplePager/index.php

  

Commentaire de bj33 le 03/05/2010 17:22:50 8/10

salut

<< webdeb

Non, le constructeur parent doit être explicitement appellé dans la classe fille si la classe mère définie un constructeur. c'est bien spécifié içi :

http://fr2.php.net/manual/fr/language.oop5.decon.php

<< GENETAPT151

Pour une première, chapeau! çà remonte le niveau débutant. Merci pour eux.

Commentaire de dfs le 04/05/2010 13:40:18

bonjour a tous
j'essaie d debute avec php et cette erreur me survient lors de ce script quelqu'un peut m'aider
//---------------------------------


Catchable fatal error: Argument 1 passed to PagerSql::setPdo() must be an instance of PDO, null given, called in C:\EasyPHP\www\exemplePager\pager\PagerSql.class.php on line 19 and defined in C:\EasyPHP\www\exemplePager\pager\PagerSql.class.php on line 59

Commentaire de genetApt151 le 04/05/2010 15:05:06

Cela veut dire que tu passes null à la méthode setPdo(); et pas un objet pdo. soit tu as fait une erreur de programmation ou soit tu n'a pas activé PDO. Je ne connais pas spécialement EasyPhp. Il faut déjà activer l'extension pdo correspondant à ta base de données dans php.ini
ex : extension=php_pdo_mysql.dll pour mysql

Commentaire de mahmoudimohamed le 07/05/2010 12:50:39

Bonjour,

Ta source est vraiment intéressante, bien faite. Mon besoin est de paginer ma page en trois parties. Comment peux je l'adapter pour faire ça. Merci pour la réponse.

Commentaire de zouax le 15/03/2011 10:34:28

bonjour,
cette source est excellente, mais hélas, je n'arrive pas à trouver pourquoi j'ai un "echec connexion" en local avec easyphp5.3.1.0...
j'ai tenté de changer le port 3306 en 8888 ou 80 ou même le supprimer
<code>$bdd = new PDO('mysql:host='.$host.';dbname='.$db.';port=3306', $login, $pass);</code>
un coup de main serait bienvenue, j'aimerais devenir un vrai débutant svp
merci

Commentaire de genetApt151 le 15/03/2011 23:27:15

Problème de connexion à la base de données, Faire un $e->getMessage() dans le bloc catch et vérifier les identifiants dans connexion.php

Commentaire de zouax le 16/03/2011 10:27:45

j'ai installé la dernière version d'easyphp et le message était :
Warning: PDO::__construct() [pdo.--construct]: [2002] Aucune connexion n?a pu ?tre ?tablie car l?ordinateur cible l?a (trying to connect via tcp://localhost:3306) in C:\Program Files (x86)\EasyPHP-5.3.5.0\www\...\index.php on line 20
echec connexion
puis apres ajout du $e->getMessage(); echo($e); die("echec connexion <br/>"); le message ajouté est :
exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Aucune connexion n?a pu ?tre ?tablie car l?ordinateur cible l?a express?ment refus?e. ' in C:\Program Files (x86)\EasyPHP-5.3.5.0\www\a_x_i_b_l_e\phpPager\modeleIntermediaire\index.php:20 Stack trace: #0 C:\Program Files (x86)\EasyPHP-5.3.5.0\www\a_x_i_b_l_e\phpPager\modeleIntermediaire\index.php(20): PDO->__construct('mysql:host=loca...', 'root', '') #1 {main}echec connexion
avec :
$bdd = new PDO('mysql:host='.$host.';dbname='.$db, $login, $pass);
merci de votre aide

Commentaire de genetApt151 le 18/03/2011 20:53:17

Je sais pas, il faudrait poster l'erreur dans la section forum. Moi je n'utilise pas EasyPHP, je préfère Wampserver qui pose moins de problème.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Pagination de page... [ par AgentSmith ] Salut à tous,Je souhaiterai avoir quelque indicationpour savoir si il y a une possibilité depaginer des pages avec la sortie de la base de donnée. Exe Pagination ??? [ par rich25200 ] Bonjour !!Comment fait une pagination ????? quelqu'un a-t-il un exemple ??????merci pagination sur une page php [ par hbib ] salut,je souhaiterai savoir comment faire pour faire une pagination sur une page phpen effet jai un tableau qui affiche differente infos de ma base de Problème de pagination [ par iomega ] Bonjour à tous j'ai un problème de pagination j'ai récuperer un script de "pagination" et cela marche très bien mais lorsque j'utilise une liste dérou Pagination ... [ par Benjamin G ] Bonjour,Je voulais savoir comment on fait pour faire un affichage page/page sans MySQL ?? Pagination avec PHP/MSAccess [ par le_freeman ] Bonjour,je voulais savoir si certains d'entre vous pourraient me dire comment je pourrais faire un affichage page par page de données récupérées via P 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 pb pagination de resultats [ par yulrick ] bjs a tous , qui va pouvoir me sauvez????mon pbma pagination est en resultat de 3 requetes et mon code me donne soit 4 requete ou 6 enfin ca merde don icq pager [ par Pretender ] Bonjour, j'ai le script suivant:&lt;?mail("73496888@pager.icq.com", "LE_SUJET", "LE_MESSAGE", "From: icq pager");?&gt;ce que ce script devrait faire, icq pager [ par Pretender ] Bonjour, j'ai le script suivant:&lt;?mail("73496888@pager.icq.com", "LE_SUJET", "LE_MESSAGE", "From: icq pager");?&gt;ce que ce script devrait faire,


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,920 sec (3)

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