begin process at 2012 05 27 22:16:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > CLASSE PAGINATION

CLASSE PAGINATION


 Information sur la source

Note :
Aucune note
Catégorie :Application Classé sous :pariganation, php5, classe Niveau :Initié Date de création :17/09/2009 Date de mise à jour :12/10/2009 15:54:04 Vu :2 826

Auteur : darkis

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

 Description

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

Source

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


 Historique

17 septembre 2009 19:42:09 :
Je viens d'ajouter un exemple d'utilisation.
12 octobre 2009 15:54:09 :
J'ai ajouté des exemple pour mieux expliquer

 Sources du même auteur

Source avec Zip GDATA CLASS

 Sources de la même categorie

Source avec une capture PHPREPOGENERATOR + REPO (WIN) par alvinp
Source avec Zip IPHONE - ICÔNE D'APPEL TÉLÉPHONIQUE SUR L'ÉCRAN D'ACCUEIL par Rainbow
Source avec Zip Source avec une capture [APP WEB]SERVEUREXPLOREUR par thematrix01
Source avec Zip Source avec une capture MY.BOOKMARKS par inwebo
Source avec Zip M.V.C M.E.D par faceme

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GÉNÉRATION DE FORMULAIRES HTML PERSONNALISÉS. par beejeridou
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip [POO][PHP5]UN SITE MULTILANGUE VIA XML par destinyfr
Source avec Zip PHP5 MY EXPLORER : AFFICHE L'ARBORESCENCE DE DOSSIERS par ranouf
Source avec Zip Source avec une capture CLASSE CALENDRIER par Mister Jingles

Commentaires et avis

Commentaire de testabc le 21/09/2009 10:23:36

C'est exactement ce que je cherchais...

Cependant, vu mon faible niveau, j'aurais besoin pour comprendre
d'un exemple avec une requete sql
et un peu d'html pour le rendu.

Ensuite je pourrais te donner mes retours !
Merci darkis

Commentaire de hornetbzz le 21/09/2009 15:44:40

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.

Commentaire de testabc le 21/09/2009 18:52:50

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'

Commentaire de pgassie le 12/10/2009 02:32:22

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.

Commentaire de darkis le 12/10/2009 16:00:11

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Fonctionnement SDO [ par guill76 ] Bonjour,Je viens de découvrir un petit peu l'extension SDO de PHP5 que j'ai récupérée en installant PHP5.2.5 il ya environ un semaine et dans cette ex [PHP5] Etendre une classe prédéfinie [ par ZuGbEn ] Bonjour !Je débute plus ou moins dans la programmation orientée objet, et je souhaite faire une classe qui, à partir d'un DomNode existant, ajoute des inclusion d'une classe provenant d'un autre fichier [ par lilippx ] salut, je me suis mis au php ce matin mais je bute sur un petit truc (dès le premier jour, ce n'est pas motivant...)je n'arrive pas à instancier un ob utilisation de ereg_replace php5 [ par NINI49 ] Bonjour, Ce code marchait sous PHP4 Il supprimait tout les liens d'une page récupérée sur un site de résultat de sport (basketfrance.fr en l'occurence net_ping et windows [ par Lyche ] Bonjour à tous.Je suis en train de travailler sur un petit projet de monitoring, j'ai trouvé la classe net_ping() qui me parait idéale pour ce que sou Classes et vérification des données [ par TTMan ] Bonjour à tous,Je viens pour poser une question peut-être stupide, mais je voudrais savoir s'il est plus intelligent et maintenable de vérifier les do Refonte de mon site en objet AIDE conception [ par vega11 ] Bonjour à tous, je suis actuellement en BTS informatique 2ème année et je m'amuse à créer pour une de mes activités un site de rencontre.Je suis très Site sur php5, Mysql5 [ par laaouar_ibtissem ] Bonjour, Est ce que possible de me donner un site de debutant concernant php5, Mysql5. Merci Classe fpdf et limitation du temps d'execution à 30 secondes [ par stevenleferran ] Bonjour,voilà, j'ai développé un site web gérant des articles de presse scannés.A l'aide de formulaire et de notre bdd, nous pouvons générer un fichie Boutique en ligne [ par Foxhive ] Bonjour à tous,Je voudrais creer une boutique en ligne et j'ai regardé cette classe : http://www.phpcs.com/codes/CLASSE-PHP5-PANIER-TOUTE-SIMPLE_34003


Nos sponsors


Sondage...

Comparez les prix

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,530 sec (4)

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