Vous êtes sur la page 1sur 4

Tutoriel : Cre Un Systme De Pagination En Php Et RainTpl

Dans cet article je vais vous montrer comment cre un systme de pagination pour vos requtes MYSQL en utilisant php et raintpl(moteur de template en php simple et performant) , si vous navez jamais entendu parler de RainTpl je vous invite lire cet article afin que vous fassiez connaissance .

Pourquoi Un Systme De Pagination


La pagination cest (afficher des informations sur plusieurs pages) permet de faciliter la navigation et dconomiser les ressources systmes. Nous allons voir ici comment faire un systme de pagination facilement. dans cet article on va utiliser une fonction php que je vient de cre qui utilise 3 paramtres : 1 La requte MYSQL quon souhaite paginer. 2 Nombre darticle par page. 3 le range (cest le nombre de page a afficher gauche et droite de notre page actuelle).

on va commencer par cre un fichier fonction.php l ou on va mettre notre focntion de pagination .


1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. < ?php function paginer($requete,$parpage,$range=3) { // definir dou on va commencer notre requete pour la clause limit. if (isset($_GET[firstresult])) { $firstresult = (int) ($_GET[firstresult]); } else { $firstresult = 0; } //compter le nombre denregitrement dans la table et lassigner a $count $count = mysql_num_rows(mysql_query($requete)); //calculer le nombre des pages necessaires $pages = ceil($count/$parpage); //chercher le resultat de requete pour notre page $query=$requete." LIMIT ".$firstresult.",".$parpage; $results =mysql_query($query); //recuperer le resultat de notre page dans un tableau $data while ($list = mysql_fetch_array($results)) { $data[]=$list; }

24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.

// vrifier si on a besoin de suivant ou prcedant et afficher la liste des pages if ($pages > 1) { $pagecourante = ($firstresult/$parpage) + 1; $debut = (($pagecourante - $range) > 0) ? ($pagecourante - $range) : 1; $fin = (($pagecourante + $range) < $pages) ? ($pagecourante + $range) : $pages;

$compteur .= "<span class="count">Page $pagecourante sur $pages</span>"; if ($pagecourante > 1) { $precedant .= <a class="page" href=".$_SERVER[PHP_SELF].?firstresult= .($firstresult $parpage) . "><<</a>; 35. } 36. 37. for ($i = $debut; $i if($i==$pagecourante){ 38. $listepages .= <span class="page courante"><strong>.$i.</strong></span>; 39. } 40. else{ 41. 42. $listepages .= <a class="page" href=".$_SERVER[PHP_SELF].?firstresult= .($parpage * ($i 1)) . ">.$i.</a>; 43. } 44. } 45. if ($pagecourante < $pages) { 46. $suivant .= <a class="page" href=".$_SERVER[PHP_SELF].?firstresult= .($firstresult + $parpage) . ">>></a>; 47. } 48. } 49. 50. $premierepage.=<a class="page" href=".$_SERVER[PHP_SELF].?firstresult=0">1</a>; 51. $dernierepage.=<a class="page" href=".$_SERVER[PHP_SELF].?firstresult=.(($pages*$parpage)$parpage).">.$pages.</a>; 52. 53. // calcul du range 54. if ($pages-($pagecourante + $range) > 1) { 55. $listepages= $listepages.<span class="page"> </span>.$dernierepage; 56. } 57. elseif($pages-($pagecourante + $range) == 1) { 58. $listepages = $listepages.$dernierepage; 59. } 60. else{ 61. $listepages = $listepages; 62. } 63. if(($pagecourante - $range) > 1){ 64. $listepages = $premierepage.<span class="page"> </span>.$listepages; 65. } 66. elseif(($pagecourante - $range) == 1){ 67. $listepages = $listepages; 68. } 69. 70. // construire un tableau de reponse 71. $pagination=" 72. <div class="pagination">".$compteur.$listepages.$precedant.$suivant."</div> 73. "; 74. return $reponse=array("data"=>$data,"pagination"=>$pagination); 75. } 76. ?>

cette fonction retourne 2 tableaux $pagination['data'] celui qui contient les rsultats de notre requte mysql et $pagination['pagination'] celui qui contient la liste des pages . aprs on va cre un fichier index.php par exemple l ou on va appeler notre fonction et boucler sur $pagination['data'].
1. 2. 3. < ?php // inclure le moteur de template raintpl

4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.

include "inc/rain.tpl.class.php"; //include Rain TPL //se connecter notre base de donne $connexion=mysql_connect("localhost","root",""); mysql_select_db("pagination",$connexion); //inclure notre fichier fonction include fonction.php; // instancier le moteur de temlate $tpl = new raintpl(); //notre requete paginer $requete="select id,titre,corp from articles where status=active"; //on appelle la fonction paginer en lui passant la requete le nombre darticles par page et le range(par defaut vaut 3) $pagination=paginer($requete,3,4); //assigner nos variables de sortie et afficher le template listearticles.html //cre une varibale "pages" qui contient la liste des pages $tpl->assign("pages",$pagination[pagination]); //cre une variable "content" (array) quon va boucler aprs dans notre template $tpl->assign("content",$pagination[data]); //dessiner la template listearticle.html $tpl->draw(listarticles); ?>

et enfin dans le rpertoire tpl on va cre un fichier html listearticles.html l ou on va boucler et afficher nos articles
1. 2. 3. 4. 5. {loop="content"} <div class="titre"><strong>{$value.id}-{$value.titre}</strong></div> <div class="corp">{$value.corp}</div> {/loop} <div class="pagination">{$pages}</div>

{$value.id},{$value.titre} et {$value.corp} sont les champs utilis dans notre requte . et pour styler les pages voila un code css ajouter dans votre template .
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. .pagination{ background:#F9F9F9; display:inline-block; padding:5px; border:solid 1px #DDD; border-radius:3px; margin-top:20px; } .page{ color:#333333; text-shadow:0px 1px #F6F6F6; padding:2px 6px 2px 6px; border:solid 1px #B6B6B6; box-shadow:0px 1px #EFEFEF; -moz-box-shadow:0px 1px #EFEFEF; -webkit-box-shadow:0px 1px #EFEFEF; background:#E6E6E6; background:-moz-linear-gradient(top,#FFFFFF 1px,#F3F3F3 1px,#E6E6E6); background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#FFFFFF),color-stop(0.02,#F3F3F3),colorstop(1,#E6E6E6)); 20. margin:2px; 21. display:inline-block;

22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.

text-decoration:none; } .page:hover,.courante{ color:#FFFFFF; box-shadow:0px 1px #E7E7E7; -moz-box-shadow:0px 1px #E7E7E7; -webkit-box-shadow:0px 1px #E7E7E7; text-shadow:0px 1px #4E802C; border-color:#478223; background:#599F2F; background:-moz-linear-gradient(top,#9FE355 1px,#79BF4A 1px,#599F2F); background:-webkit-gradient(linear,0 0,0 100%,color-stop(0.02,#9FE355),color-stop(0.02,#79BF4A),colorstop(1,#599F2F)); } .titre{ border:solid 1px #DDD; background:#EEE; margin:10px;

Vous aimerez peut-être aussi