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

Code

 > 

Class et Objet ( POO )

 > CLASS PAGINATION PHP5 POO

CLASS PAGINATION PHP5 POO


 Information sur la source



 Description

Voici une petite class en php qui permet de créer un système de pagination, elle est assez propre je pense, je m'en sert et elle est stable alors j'espère qu'elle vous sera utile.

Source

  • <?php
  • //*** CREE PAR MOUNIR R'QUIBA (MOON AIR) (cosmoswarez@msn.com) ********
  • // 31/08/2009 !! COPYRIGHT !!
  • //--------A utiliser sans moderation :D -------------------------------
  • * Class qui met automatiquement en forme la pagination
  • */
  • class Page{
  • static function pagination($nbFields,$pos=1,$nbCount=10,$path){
  • $cPage = ceil($nbFields/$nbCount);
  • $cBy = 0;
  • $cStart = ($pos < 3 and $pos > 1)? $pos-1 : $pos-2;
  • if($pos == 1){$cStart = 1;}
  • if($pos == $cPage){$cStart = $pos - 4;}
  • if($pos == $cPage-1){$cStart = $pos - 3;}
  • $posPlus = $pos+1;
  • $posMoins = $pos-1;
  • if($cPage > 5){
  • $link = ($pos < 4)? "" : " <a href=\"".$path."1\" ><<</a> |";
  • }
  • $linkp = ($pos < 2)? "" : " <a href=\"$path$posMoins\" ><</a> |";
  • $link .= $linkp;
  • for($i=$cStart;$i<=$cPage;$i++){
  • $cBy++;
  • if($cBy > 0 and $cBy < 6){
  • if($pos == $i){
  • $link .= " <font color=\"red\">$i/$cPage</font> |";
  • }else{
  • if($i >= 1){
  • $link .= " <a href=\"$path$i\" >$i</a> |";
  • }
  • }
  • }
  • }
  • $link = substr($link,0,-1);
  • $vlink = ($pos > ($cPage-1))? "" : " | <a href=\"$path$posPlus\" >></a>";
  • if($cPage > 5){
  • $flink = ($pos > ($cPage-3))? "" : " | <a href=\"$path$cPage\" >>></a>";
  • }
  • $link .= $vlink;
  • $link .= $flink;
  • return $link;
  • }
  • }
  • /*
  • * Affichage du système de pagination
  • */
  • $nbFields = 1000;
  • $nbCount = 10;
  • $nbPage = $nbFields / $nbCount;
  • $path = "./?pos=";
  • if(isset($_GET['pos'])){
  • $pos = trim(htmlentities($_GET['pos'], ENT_QUOTES));
  • if($pos > $nbPage or $pos <= 0 ){ $pos = 1; }
  • }else{ $pos = 1; }
  • $print_page = Page::pagination($nbFields,$pos,$nbCount,$path);
  • echo $print_page;
  • ?>
<?php
//*** CREE PAR MOUNIR R'QUIBA (MOON AIR) (cosmoswarez@msn.com) ********
//          31/08/2009 !! COPYRIGHT !!
//--------A utiliser sans moderation :D -------------------------------
* Class qui met automatiquement en forme la pagination
*/

class Page{  
 static function pagination($nbFields,$pos=1,$nbCount=10,$path){
       $cPage = ceil($nbFields/$nbCount);
       $cBy = 0;
       $cStart = ($pos < 3 and $pos > 1)? $pos-1 : $pos-2;
       if($pos == 1){$cStart = 1;}
       if($pos == $cPage){$cStart = $pos - 4;}
       if($pos == $cPage-1){$cStart = $pos - 3;}
       $posPlus = $pos+1;
       $posMoins = $pos-1;
       if($cPage > 5){
          $link = ($pos < 4)? "" : " <a href=\"".$path."1\" ><<</a> |";
       }
       $linkp = ($pos < 2)? "" : " <a href=\"$path$posMoins\" ><</a> |";
       $link .= $linkp;
         for($i=$cStart;$i<=$cPage;$i++){
           $cBy++;
           if($cBy > 0 and $cBy < 6){ 
             if($pos == $i){
               $link .= " <font color=\"red\">$i/$cPage</font> |";  
             }else{
              if($i >= 1){
               $link .= " <a href=\"$path$i\" >$i</a> |";
               }
             }
           }
         }
       
       
       $link = substr($link,0,-1);
       $vlink = ($pos > ($cPage-1))? "" : " | <a href=\"$path$posPlus\" >></a>";
       if($cPage > 5){
          $flink = ($pos > ($cPage-3))? "" : " | <a href=\"$path$cPage\" >>></a>";
       }
       $link .= $vlink;
       $link .= $flink;
       return $link;
    
    }
}

/*
* Affichage du système de pagination
*/

$nbFields = 1000;
$nbCount = 10;
$nbPage = $nbFields / $nbCount;
$path = "./?pos=";
 
if(isset($_GET['pos'])){ 
   $pos = trim(htmlentities($_GET['pos'], ENT_QUOTES)); 
   if($pos > $nbPage or $pos <= 0 ){ $pos = 1; } 
}else{ $pos = 1; }

$print_page = Page::pagination($nbFields,$pos,$nbCount,$path);
echo $print_page;
?>

 Conclusion

Bon je pense que vous allé la trouvé assez simple alors utilisé la ;)


 Sources du même auteur

Source avec Zip POO - FORMULAIRE NEWSLETTER PHP - PROFESSEUR-PHP.COM
Source avec Zip FORMULAIRE DE CONTACT PHP + ENVOI MAIL - PROFESSEUR-PHP.COM
Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER
Source avec Zip Source avec une capture MOTEUR DE RECHERCHE YOUTUBE API
Source avec Zip Source avec une capture SIMPLE EMAILING SERVICE

 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

CLASS RECHERCHE PHP5 POO par mtrix000
CLASS AUTHENTIFICATION PHP5 POO par mtrix000
CLASS DE PAGINATION par NainPuissant
[PHP5] CLASSE DE NEWS par FhX
PHP5 - CLASSE DE PAGINATION MODULABLE par FhX

Commentaires et avis

Commentaire de neigedhiver le 08/01/2010 08:48:29

Salut,

[préambule]
Je vais essayer de ne pas être trop sévère et de choisir correctement les mots que j'utilise...
[/préambule]

Il y a beaucoup de choses qui ne sont pas très bonnes dans ton code.
Le fait que ta classe affiche du HTML ne me plaît pas du tout : ce n'est pas uniquement un problème de goût personnel, car si elle affiche du HTML, l'utilisateur de ta classe ne peut pas choisir ce qui est affiché, il est obligé de prendre ce qu'on lui donne. Parfois, on peut avoir envie de faire autrement, là, on ne peut pas. Il reste la possibilité de surcharger ta classe, mais vu comment elle est écrite, cela revient à réécrire ton code. En plus, je constate l'utilisation de la balise font dans le code HTML, ce qui est fortement déprécié au profit de feuilles de styles.
Ta classe n'a pas lieu d'être une classe : une simple fonction suffit.
Ton code n'est pas très clair : personnellement, je n'ai pas fait l'effort de chercher à comprendre tout le fonctionnement, chaque ligne de code. Un code propre me parle tout de suite : je n'ai pas besoin de faire d'effort pour comprendre, là, il faudrait que je me mette en situation et que je fasse des simulations mentales pour comprendre beaucoup de choses ($pos - 3 ou $pos - 4, mais beaucoup d'autres lignes aussi).

Le sujet de la pagination fait partie de ceux qui sont récurrents (lister un répertoire, authentification utilisateur, etc) et qu'on trouve en de nombreux exemplaires, de qualité très variable. Par exemple, je t'invite à jeter un oeil à la classe proposée par NainPuissant il y a plus de 3 ans maintenant, en PHP5 : http://www.phpcs.com/code.aspx?ID=40881
Rien qu'un premier coup d'oeil, je vois que le code est clair, correctement documenté, je constate aussi que le HTML produit est entièrement personnalisable, qu'il y a des méthodes spécifiques pour l'affichage, etc...

Commentaire de mtrix000 le 08/01/2010 17:54:37

Merci pour l'info, mais bon chacun son style,
tu l'as pas tester et tu te permet de la critiqué,
je sais que le html dans une class n'é pas apprécié et encore moin la balise font,
a vrai dire tu ne m'apprend rien et c'est a cause des commentaires comme le tien que beaucoup de dévolppeur ne partage pas leur source,

"neigedhiver" tu devrais arrété de faire des commentaire et commencé a partager des sources,
car j'ai plus l'impression que tu n'est la que pour faire fuire les nouveaux, surtout quand on voi la qualité insatisfesante de tes sources, sa me fait assez rire.

Allé la prochaine fois évite de faire des commentaires quand ta pas tester la source et encore moins quand tu n'arrives pas a la comprendre, sa tévitera de salir les pages de cs!!!

Commentaire de neigedhiver le 08/01/2010 21:15:15

Non, je n'ai pas testé ta source. Ce n'est d'ailleurs pas en la testant que je peux me rendre compte que je n'arrive pas à lire le code.
Il n'est pas nécessaire de tester une source pour exprimer le fait qu'elle est mal codée.
Si je ne t'apprends rien quant au HTML inclus dans ta classe, pourquoi est-ce que tu le fais quand même ?

Quant à mes sources, je t'en prie, va donc y faire des commentaires. Toutes ne sont pas de qualité, je le reconnais. Ce n'est pas ce que je dirais de la dernière que j'ai partagée et que je mets régulièrement à jour : je t'invite à y jeter un oeil de manière approfondie avant de me dire que ce que je produis n'est pas de qualité.

Maintenant, parlons un peu de mes commentaires. Est-ce de ma faute si de nombreuses personnes partagent des sources d'une qualité plus que déplorable ? Là, je ne parle pas de toi, mais d'une manière générale. Est-ce pour autant que je dois fermer ma gueule et laisser des codes de merde pourrir le site ? Des codes qui seront utilisés par des utilisateurs novices, qui ne sont pas capables d'évaluer la qualité d'une source, et du fait qu'ils utilisent des codes de merde, mal codés, pas sécurisés, ne progresseront jamais. Désolé, mais j'estime de mon devoir, pour que TOUT LE MONDE puisse progresser, de dire quand une source n'est pas bonne : autant pour l'auteur que pour les utilisateurs potentiels.

Je t'ai indiqué une source qui fait de la pagination également, en soulignant ses points forts comparés à la tienne. C'est ce que je peux faire de mieux comme propositions d'améliorations. Si tu refuses d'aller y jeter un oeil pour voir en quoi elle est mieux que la tienne, ce n'est pas mon problème. Si tu préfères t'arrêter au fait que je critique négativement ta source, ce n'est pas mon problème non plus.
Et ne viens pas me dire que mon premier commentaire n'était pas constructif : j'ai souligné les points négatifs et je t'ai proposé des améliorations (via une source de qualité supérieur).

Et j'ai été sympa, j'ai pas commenté ta source d'authentification qui souffre de nombreux défauts (mais si tu y tiens, je peux faire l'effort d'y laisser un commentaire).

Commentaire de kohntark le 08/01/2010 23:41:10

Salut,

Je déplore qu'une fois de plus les commentaires d'une source partent "en live". Ca relève du systématique et c'est particulièrement gonflant.
Je crois qu'il serait bon d'instaurer, ou plus exactement d'imposer (allo les admins ??) un climat plus fraternel, basé sur le partage de compétences, sur l'esprit communautaire et sur le respect de chacun, débutants comme initiés.

J'en ai franchement ras le bol, comme beaucoup ici, de voir ces "combats", qui dans de nombreux cas n'apportent qu'une mauvaise ambiance qui se fait de plus en plus présente sur le réseau CS.

Ne sommes nous pas ici pour partager et progresser chacun à notre niveau ?

En ce qui concerne ce thread :
Je ne peux que saluer que tu postes une source mtrix000, c'est en accord avec cet esprit de partage.
Là où je n'y suis plus c'est dans ta réponse à Neigedhiver.
Je pense que Neige a, comme à son habitude, apporté des critiques constructives, en argumentant et en donnant des axes d'améliorations.
Considérant cela ta réponse me semble fort déplacée.
Autant je suis d'accord lorsque tu dis que certains commentaires incitent à ne pas poster de sources, autant je ne le suis pas dans le cas présent, ni pour les nombreux commentaires de Neigedhiver que j'ai pu lire.

"tu l'as pas tester et tu te permet de la critiqué"
=> il ne suffit pas qu'une source "fonctionne" pour qu'elle prétende être une bonne source.

""neigedhiver" tu devrais arrété de faire des commentaire et commencé a partager des sources,
car j'ai plus l'impression que tu n'est la que pour faire fuire les nouveaux, surtout quand on voi la qualité insatisfesante de tes sources, sa me fait assez rire."
=>
perso c'est ton propos qui me fais particulièrement marré, et pas qu'un peu :D
Je pense que Neige fait partie des intervenants les plus constructifs et les plus calés de PHPCS et que contrairement à d'autres il ne prend pas la grosse tête en descendant les gens.

Mention particulière à "quand on voi la qualité insatisfesante de tes sources" et "quand tu n'arrives pas a la comprendre" ... fallait oser !! :D

Bref, du haut de tes ["même pas"] 10 interventions en ces lieux tu aurais sans doute mieux fait de considérer les remarques de Neigedhiver et de lire quelques unes de ses contributions, ça t'aurait évité de dire des âneries.

Je n'ai fait que réagir aux messages et n'ai pas testé, ni trop regardé la source, mais à vu de nez je ne pourrai tenir meilleurs propos que Neige.

Je teste avant lundi, promis :)


Cordialement,

Kohntark-








Commentaire de NeoUmbrella le 09/01/2010 00:12:44

Bonjour, je suis entièrement d'accord avec kohntark.

Commentaire de nashouille le 11/01/2010 02:59:07

salut
Je ne vois rien dans ce qui est de la POO ! Il y a simplement une méthode déclaré dans un nom qui renvoi un formatage HTML de balise. J'aurais simplement appelé cela méthode static de pagination.

voici un exemple
<?php

/**
* class dataPager
*
* Description for class dataPager
*
* @author: NASHOUILLE
*/
class DataPager  {

private $_fieldindex = 1;

private $_pagesize;
private $_totalrowcount;

//Premiere page
public function firstPage(){
//Si derniere page egale 0
if( $this->lastPage() == 0)
return 0;

return 1;
}

//Page precedente
public function previousPage(){
//Si derniere page egale 0
if( $this->lastPage() == 0)
return 0;

if($this->_fieldindex == 1)
return $this->_fieldindex;

$prev = $this->_fieldindex;
return $prev - 1;
}

//Page suivante
public function nextPage(){
if($this->_fieldindex >= ceil($this->_totalrowcount/$this->_pagesize))
return ceil($this->_totalrowcount/$this->_pagesize);

$next = $this->_fieldindex;
return $next + 1;
}

//Derniere page
public function lastPage(){
return ceil($this->_totalrowcount/$this->_pagesize);
}

//Obtient ou définit le nombre d'enregistrements affichés pour chaque page de données.
public function pageSize($value = ""){

if(strlen(trim($value)) == 0)
return (int)$this->_pagesize;

$this->_pagesize = (int)$value;
}

//Obtient la page en cours affiché dans une page de données.
public function pageField(){
if( $this->lastPage() == 0)
return 0;

return $this->_fieldindex;
}

//Obtient ou definit le nombre total des enregistrements extraits par l'objet
//de source de données sous-jacent référencé par le contrôle lié aux données associé.
public function TotalRowCount($value = ""){
if(strlen(trim($value)) == 0)
return (int)$this->_totalrowcount;

if(!is_numeric($value))
throw new exception("Format incorrect.");

$this->_totalrowcount = (int)$value;
}

//Obtient l'index du premier enregistrement affiché dans une page de données.
public function StartRowIndex(){
//On multiplie page en court par nombre de page moins monbre de page
return $this->_fieldindex * $this->_pagesize - $this->_pagesize;
}

function __construct($value){
if($value > 1)
$this->_fieldindex = $value;
}

}

?>

pour l'utilisation c'est simple
instance du pager
$pager = new DataPager($page);

nombre page
$pager->pageSize(10);

object ou requete pour comptage des ligne
$pager->TotalRowCount($contact->dbCount());

instantation de la class de gestion SQL et utilisation des methodes $pager->StartRowIndex(),  $pager->pageSize() dans la clause sql LIMIT

Méthode de pagination
<a href="{$_SERVER['PHP_SELF']}?page=".$pager->firstPage().">Premier</a>
<a href="{$_SERVER['PHP_SELF']}?page=".$pager->previousPage().">Precedent</a>
<a href=\"{$_SERVER['PHP_SELF']}?page=".$pager->nextPage().">Suivant</a>
<a href=\"{$_SERVER['PHP_SELF']}?page=".$pager->lastPage().">Dernier</a>






 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

[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 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 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 Pb passage PHP4 -> PHP5 [ par Galmiza ] Salut,J'ai acheté un bouquin pour débuter le PHP.J'ai suivi a la lettre les instructions du livre:-installer EasyPHP 1.7-installer PHP 5.0..-lancer Ea Include, class et array [ par Hades5k ] Bonjour! J'ai un petit problème à utiliser un array dans un fichier que j'inclus... voici un peu le code : &lt;?php $classNames = array(); include_onc Cohabitation PHP4 PHP5 sur même serveur ! [ par Zacland ] Ce n'est pas une question, mais je me doute que certaines personnes veulent essayer de faire cohabiter 2 versions de PHP sur un même serveur Apache... Un caractére se trouve t'il dans ma chaîne... [ par juki_webmaster ] Bonsoir,Je travaille depuis 14h cette apres-midi sur une fonction alternative d'une fonction connu et disponible uniquement sur php5, je fait cette fo Problem d'affichage de resultat de requete sous forme de tableau [ par jbcaiz ] explication : je fais un requete de recherche dans ma base, qui doit normalement me sortir plusieur résultat.je veux que ces résultat s'affiche dans u PHP5 en PHP3 [ par el shaddai ] J'ai développé une partie de site en PHP5. MAlheureusement , chargé chez FREE, ils n'utilisent que PHP3. Y a t-il une manip simple pour qur du PHP5 pa


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

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