欢迎来到[自学php网] ①群 AG亚游集团

AG亚游集团 > php专栏 > php分页 >

PHP中常用的分页类总结 - php分页

来源:自学PHP网 ?? 时间:2014-11-30 14:41?作者:

[导读] php分页是目前在显示大量结果时所采用的最好的方式,有了下面这些代码的帮助,开发人员可以在多个页面中显示大量的数据,在互联网上,分?页是一般用于搜索结果或是浏览全部信息.ph...

PHP中常用的分页类总结

php分页是目前在显示大量结果时所采用的最好的方式,有了下面这些代码的帮助,开发人员可以在多个页面中显示大量的数据,在互联网上,分?页是一般用于搜索结果或是浏览全部信息.

php基本分页,代码如下:

  1. <?php 
  2. / database connection info 
  3. $conn = mysql_connect('localhost','dbusername','dbpass'or trigger_error("SQL", E_USER_ERROR); 
  4. $db = mysql_select_db('dbname',$connor trigger_error("SQL", E_USER_ERROR); 
  5.  
  6. / find out how many rows are in the table  
  7. $sql = "SELECT COUNT(*) FROM numbers"
  8. $result = mysql_query($sql$connor trigger_error("SQL", E_USER_ERROR); 
  9. $r = mysql_fetch_row($result); 
  10. $numrows = $r[0]; 
  11.  
  12. / number of rows to show per page 
  13. $rowsperpage = 10; 
  14. / find out total pages 
  15. $totalpages = ceil($numrows / $rowsperpage); 
  16.  
  17. / get the current page or set a default 
  18. if (isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) { 
  19. / cast var as int 
  20. $currentpage = (int) $_GET['currentpage']; 
  21. else { 
  22. / default page num 
  23. $currentpage = 1; 
  24. / end if 
  25.  
  26. / if current page is greater than total pages... 
  27. if ($currentpage > $totalpages) { 
  28. / set current page to last page 
  29. $currentpage = $totalpages
  30. / end if 
  31. / if current page is less than first page... 
  32. if ($currentpage < 1) { 
  33. / set current page to first page 
  34. $currentpage = 1; 
  35. / end if 
  36.  
  37. / the offset of the list, based on current page  
  38. $offset = ($currentpage - 1) * $rowsperpage
  39.  
  40. / get the info from the db  
  41. $sql = "SELECT id, number FROM numbers LIMIT $offset, $rowsperpage"
  42. $result = mysql_query($sql$connor trigger_error("SQL", E_USER_ERROR); 
  43.  
  44. / while there are rows to be fetched... 
  45. while ($list = mysql_fetch_assoc($result)) { 
  46. / echo data 
  47. echo $list['id'] . " : " . $list['number'] . "<br />"
  48. / end while 
  49.  
  50. /****** build the pagination links ******/ 
  51. / range of num links to show 
  52. $range = 3; 
  53.  
  54. / if not on page 1, don't show back links 
  55. if ($currentpage > 1) { 
  56. / show << link to go back to page 1 
  57. echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=1'><<</a> "
  58. / get previous page num 
  59. $prevpage = $currentpage - 1; 
  60. / show < link to go back to 1 page 
  61. echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'><</a> "
  62. / end if 
  63.  
  64. / loop to show links to range of pages around current page 
  65. for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) { 
  66. / if it's a valid page number... 
  67. if (($x > 0) && ($x <= $totalpages)) { 
  68. / if we're on current page... 
  69. if ($x == $currentpage) { 
  70. / 'highlight' it but don't make a link 
  71. echo " [<b>$x</b>] "
  72. / if not current page... 
  73. else { 
  74. / make it a link 
  75. echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x</a> "
  76. / end else 
  77. / end if  
  78. / end for 
  79.  
  80. / if not on last page, show forward and last page links  
  81. if ($currentpage != $totalpages) { 
  82. / get next page 
  83. $nextpage = $currentpage + 1; 
  84. / echo forward link for next page  
  85. echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'>></a> "
  86. / echo forward link for lastpage 
  87. echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'>>></a> "
  88. / end if 
  89. /****** end build pagination links ******/ 
  90. ?> 

先看一个常用的php分页类,代码如下:

  1. <?php 
  2.  /* 
  3.   Place code to connect to your DB here. 
  4.  */ 
  5.  include('config.php'); / include your code to connect to DB. 
  6.  
  7.  $tbl_name="";  /your table name 
  8.  / How many adjacent pages should be shown on each side? 
  9.  $adjacents = 3; 
  10.  
  11.  /*  
  12.     First get total number of rows in data table.  
  13.     If you have a WHERE clause in your query, make sure you mirror it here. 
  14.  */ 
  15.  $query = "SELECT COUNT(*) as num FROM $tbl_name"
  16.  $total_pages = mysql_fetch_array(mysql_query($query)); 
  17.  $total_pages = $total_pages[num]; 
  18.  
  19.  /* Setup vars for query. */ 
  20.  $targetpage = "filename.php";  /your file name  (the name of this file) 
  21.  $limit = 2;         /how many items to show per page 
  22.  $page = $_GET['page']; 
  23.  if($page)  
  24.   $start = ($page - 1) * $limit;    /first item to display on this page 
  25.  else 
  26.   $start = 0;        /if no page var is given, set start to 0 
  27.  
  28.  /* Get data. */ 
  29.  $sql = "SELECT column_name FROM $tbl_name LIMIT $start, $limit"
  30.  $result = mysql_query($sql); 
  31.  
  32.  /* Setup page vars for display. */ 
  33.  if ($page == 0) $page = 1;     /if no page var is given, default to 1. 
  34.  $prev = $page - 1;       /previous page is page - 1 
  35.  $next = $page + 1;       /next page is page + 1 
  36.  $lastpage = ceil($total_pages/$limit);  /lastpage is = total pages / items per page, rounded up. 
  37.  $lpm1 = $lastpage - 1;      /last page minus 1 
  38.  
  39.  /*  
  40.   Now we apply our rules and draw the pagination object.  
  41.   We're actually saving the code to a variable in case we want to draw it more than once. 
  42.  */ 
  43.  $pagination = ""
  44.  if($lastpage > 1) 
  45.  {  
  46.   $pagination .= "<div class="pagination">"
  47.   /previous button 
  48.   if ($page > 1)  
  49.    $pagination.= "<a href="$targetpage?page=$prev">? previous</a>"
  50.   else 
  51.    $pagination.= "<span class="disabled">? previous</span>";  
  52.    
  53.   /pages  
  54.   if ($lastpage < 7 + ($adjacents * 2)) /not enough pages to bother breaking it up 
  55.   {  
  56.    for ($counter = 1; $counter <= $lastpage$counter++) 
  57.    { 
  58.     if ($counter == $page
  59.      $pagination.= "<span class="current">$counter</span>"
  60.     else 
  61.      $pagination.= "<a href="$targetpage?page=$counter">$counter</a>";      
  62.    } 
  63.   } 
  64.   elseif($lastpage > 5 + ($adjacents * 2)) /enough pages to hide some 
  65.   { 
  66.    /close to beginning; only hide later pages 
  67.    if($page < 1 + ($adjacents * 2))   
  68.    { 
  69.     for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) 
  70.     { 
  71.      if ($counter == $page
  72.       $pagination.= "<span class="current">$counter</span>"
  73.      else 
  74.       $pagination.= "<a href="$targetpage?page=$counter">$counter</a>";      
  75.     } 
  76.     $pagination.= "..."
  77.     $pagination.= "<a href="$targetpage?page=$lpm1">$lpm1</a>"
  78.     $pagination.= "<a href="$targetpage?page=$lastpage">$lastpage</a>";   
  79.    } 
  80.    /in middle; hide some front and some back 
  81.    elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) 
  82.    { 
  83.     $pagination.= "<a href="$targetpage?page=1">1</a>"
  84.     $pagination.= "<a href="$targetpage?page=2">2</a>"
  85.     $pagination.= "..."
  86.     for ($counter = $page - $adjacents$counter <= $page + $adjacents$counter++) 
  87.     { 
  88.      if ($counter == $page
  89.       $pagination.= "<span class="current">$counter</span>"
  90.      else 
  91.       $pagination.= "<a href="$targetpage?page=$counter">$counter</a>";      
  92.     } 
  93.     $pagination.= "..."
  94.     $pagination.= "<a href="$targetpage?page=$lpm1">$lpm1</a>"
  95.     $pagination.= "<a href="$targetpage?page=$lastpage">$lastpage</a>";   
  96.    } 
  97.    /close to end; only hide early pages 
  98.    else 
  99.    { 
  100.     $pagination.= "<a href="$targetpage?page=1">1</a>"
  101.     $pagination.= "<a href="$targetpage?page=2">2</a>"
  102.     $pagination.= "..."
  103.     for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage$counter++) 
  104.     { 
  105.      if ($counter == $page
  106.       $pagination.= "<span class="current">$counter</span>"
  107.      else 
  108.       $pagination.= "<a href="$targetpage?page=$counter">$counter</a>";      
  109.     } 
  110.    } 
  111.   } 
  112.    
  113.   /next button 
  114.   if ($page < $counter - 1)  
  115.    $pagination.= "<a href="$targetpage?page=$next">next ?</a>"
  116.   else 
  117.    $pagination.= "<span class="disabled">next ?</span>"
  118.   $pagination.= "</div>n";   
  119.  }/开源代码phpfensi.com 
  120. ?> 
  121.  
  122.  <?php 
  123.   while($row = mysql_fetch_array($result)) 
  124.   { 
  125.  
  126.   / Your while loop here 
  127.  
  128.   } 
  129.  ?> 
  130.  
  131. <?=$pagination?> 

实例代码如下:

  1. <?php 
  2. class PageView{ 
  3.     /**页码**/ 
  4.     public $pageNo = 1; 
  5.     /**页大小**/ 
  6.     public $pageSize = 20; 
  7.     /**共多少页**/ 
  8.     public $pageCount = 0; 
  9.     /**总记录数**/ 
  10.     public $totalNum = 0; 
  11.     /**偏移量,当前页起始行**/ 
  12.     public $offSet = 0; 
  13.     /**每页数据**/ 
  14.     public $pageData = array(); 
  15.      
  16.     /**是否有上一页**/ 
  17.     public $hasPrePage = true; 
  18.     /**是否有下一页**/ 
  19.     public $hasNextPage = true; 
  20.      
  21.     public $pageNoList = array(); 
  22.      
  23.     public $jsFunction ='jsFunction'
  24.     /** 
  25.      *  
  26.      * @param unknown_type $count 总行数 
  27.      * @param unknown_type $size 分页大小 
  28.      * @param unknown_type $string 
  29.      */ 
  30.     public function __construct($count=0, $size=20,$pageNo=1,$pageData =array(),$jsFunction='jsFunction'){ 
  31.  
  32.         $this->totalNum = $count;/总记录数 
  33.         $this->pageSize = $size;/每页大小 
  34.         $this->pageNo = $pageNo
  35.         /计算总页数 
  36.         $this->pageCount = ceil($this->totalNum/$this->pageSize); 
  37.         $this->pageCount = ($this->pageCount<=0)?1:$this->pageCount; 
  38.         /检查pageNo 
  39.         $this->pageNo = $this->pageNo == 0 ? 1 : $this->pageNo; 
  40.         $this->pageNo = $this->pageNo > $this->pageCount? $this->pageCount : $this->pageNo; 
  41.          
  42.         /计算偏移 
  43.         $this->offset = ( $this->pageNo - 1 ) * $this->pageSize; 
  44.         /计算是否有上一页下一页 
  45.         $this->hasPrePage = $this->pageNo == 1 ?false:true; 
  46.  
  47.         $this->hasNextPage = $this->pageNo >= $this->pageCount ?false:true; 
  48.          
  49.         $this->pageData = $pageData
  50.         $this->jsFunction = $jsFunction
  51.          
  52.     } 
  53.     /** 
  54.      * 分页算法 
  55.      * @return 
  56.      */ 
  57.     private function generatePageList(){ 
  58.         $pageList = array(); 
  59.         if($this->pageCount <= 9){ 
  60.             for($i=0;$i<$this->pageCount;$i++){ 
  61.                 array_push($pageList,$i+1); 
  62.             } 
  63.         }else
  64.             if($this->pageNo <= 4){ 
  65.                 for($i=0;$i<5;$i++){ 
  66.                     array_push($pageList,$i+1); 
  67.                 } 
  68.                 array_push($pageList,-1); 
  69.                 array_push($pageList,$this->pageCount); 
  70.  
  71.             }else if($this->pageNo > $this->pageCount - 4){ 
  72.                 array_push($pageList,1); 
  73.                  
  74.                 array_push($pageList,-1); 
  75.                 for($i=5;$i>0;$i--){ 
  76.                     array_push($pageList,$this->pageCount - $i+1); 
  77.                 } 
  78.             }else if($this->pageNo > 4 && $this->pageNo <= $this->pageCount - 4){ 
  79.                 array_push($pageList,1); 
  80.                 array_push($pageList,-1); 
  81.                  
  82.                 array_push($pageList,$this->pageNo -2); 
  83.                 array_push($pageList,$this->pageNo -1); 
  84.                 array_push($pageList,$this->pageNo); 
  85.                 array_push($pageList,$this->pageNo + 1); 
  86.                 array_push($pageList,$this->pageNo + 2); 
  87.                  
  88.                 array_push($pageList,-1); 
  89.                 array_push($pageList,$this->pageCount); 
  90.                  
  91.             } 
  92.         } 
  93.         return $pageList
  94.     } 
  95.  
  96.     /*** 
  97.      * 创建分页控件 
  98.     * @param 
  99.     * @return String 
  100.     */ 
  101.     public function echoPageAsDiv(){ 
  102.         $pageList = $this->generatePageList(); 
  103.          
  104.         $pageString ="<div class='pagination'><div class='page-bottom'>"
  105.      
  106.         if(!emptyempty($pageList)){ 
  107.             if($this->pageCount >1){ 
  108.                 if($this->hasPrePage){ 
  109.                     $pageString = $pageString ."<a class='page-next' href="javascript:" .$this->jsFunction . "(" . ($this->pageNo-1) . ")">上一页</a>"
  110.                 } 
  111.                 foreach ($pageList as $k=>$p){ 
  112.                     if($this->pageNo == $p){ 
  113.                         $pageString = $pageString ."<span class='page-cur'>" . $this->pageNo . "</span>"
  114.                         continue
  115.                     } 
  116.                     if($p == -1){ 
  117.                         $pageString = $pageString ."<span class='page-break'>...</span>"
  118.                         continue
  119.                     } 
  120.                     $pageString = $pageString ."<a href="javascript:" .$this->jsFunction . "(" . $p . ")">" . $p . "</a>"
  121.                 } 
  122.                  
  123.                 if($this->hasNextPage){ 
  124.                     $pageString = $pageString ."<a class='page-next' href="javascript:" .$this->jsFunction . "(" . ($this->pageNo+1) . ")">下一页</a>"
  125.                 } 
  126.                  
  127.             } 
  128.         } 
  129.         $pageString = $pageString .("</div></div>"); 
  130.         return $pageString
  131.     } 
  132.  
  133. ?> 

css代码如下:

  1. <style type="text/css"
  2. <!-- 
  3. .pagination {font-familyTahoma;overflowhiddenpadding-top12pxtext-aligncenter;} 
  4. .pagination-tab { margin-bottom20px;} 
  5. .pagination a, .pagination .page-cur, .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g, .pagination .page-break, .pagination .page-skip { 
  6.     display: inline-block;font-familyTahoma,SimSun,Arialheight22px;line-height:22pxmargin0min-width16px;padding0 5pxtext-aligncentervertical-aligntopwhite-spacenowrap;} 
  7. .pagination a, .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g, .pagination .page-cur, .pagination .page-break { 
  8.     border1px solid #ed3d83color:#e9357dfont-weight:bold;} 
  9. .pagination a:hover { border1px solid #ed3d83;text-decorationnonebackground-color:#f95f9dcolor:#fff;} 
  10. .pagination .page-prev_g, .pagination .page-prev, .pagination .page-next, .pagination .page-next_g { width36pxbackground-imageurl(../static/img/page.gif);} 
  11. .pagination .page-prev { background-position-0px -38pxpadding-left16px;} 
  12. .pagination .page-prev_g { background-position:0px -59pxpadding-left16pxcolor:#cbcbcbfont-weight:normal;} 
  13. .pagination .page-next { background-position0px 0pxpadding-right16pxfont-weight:normal;} 
  14. .pagination .page-next_g { background-position-0px -19pxpadding-right16pxcolor:#cbcbcb;} 
  15. .pagination .page-cur {background-color#f95f9dborder1px solid #ed3d83;color#fff;font-weightbold;} 
  16. .pagination .page-break {bordermedium nonebackground:none transparentcolor:#333;} 
  17.  
  18. --> 
  19. </style> 

在php页面中的调用方法,代码如下:

  1. $pageNo = $_GET['pageNo']; 
  2.         if(emptyempty($pageNo)){ 
  3.             $pageNo = 1; 
  4.         } 
  5.         /分页数据 
  6.         $pageData = News::getNewsPage($pageNo,$pageSize); 
  7.        /取得总行数 
  8.         $count = News::getNewsCount(); 
  9.         /创建分页器 
  10.         $p = new PageView($count['0']['TOTAL'],$pageSize,$pageNo,$pageData); 
  11.      /生成页码 
  12.         $pageViewString = $p->echoPageAsDiv(); 

最新文章

点击排行

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号@版权所有AG亚游集团

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

训时肌肉意外拉伤 如何正确恢复跑步? 杨庆山任南开大学书记 魏大鹏不再担任(图/简历) 直击|淘宝将整顿电玩破解类商品 本月29日起处罚 世界杯最佳进球公布!冠军飞翼天外飞仙当选|gif 日国税厅长官因森友学园问题辞职 安倍政府受打击 中超-罗梅罗助攻莫雷诺冲顶 申花1-0斩贵州获首胜 当梅西也33岁时 他的状态能比现在的C罗更好吗? 波兰匈牙利总理:欧盟难民配额制度有损国家主权 虎牙等直播平台纷纷上市融资 但盈利困局仍未解 全国过半用户用上百兆宽带 降费举措年内将全部落实 英国为硬脱欧制订应急计划:必要时动用军队 日网民:以为武大靖是日本名字 堂堂正正的金牌
流量漫游费取消 地方运营商竞争从区域转向全国 统计:韩国老年人经济活动人口首超青年 韩朝首脑会谈主新闻中心开放 近三千名记者齐汇聚 记得10年前深入北川的那两条搜救犬吗?它们都走了 张仲灿任杭州市委副书记(图/简历) 马航MH370失踪1603天 仍然\"无法确认失联真正… 沙特吸引外资数量大降 关于汉密尔顿,你不知道的10件事儿…… 日企承认采购中国产品顶替本国货 未发现质量问题 “通俄门”检察官要求特朗普集团提供涉俄文件 福特森很强?疯起来的劳森一样能为所欲为! 超越界限!亚洲赛马会议聚焦培育优秀策骑人才
美军B52轰炸机飞冲绳 台媒:是在练习攻击大陆航母 特朗普连发四推指责FBI和希拉里:你们在针对我 内马尔曝光护腿板照片 满满都是对家人的爱|图 罢工9天27万学生停课 美国最穷州老师终获5%加薪 民进党一大问题困扰蔡英文 台湾作家:有点同情她 七旬老汉因丢钱大闹公交 抢夺方向盘持刀撒泼(图) 中学生泼汽油烧狗遭人肉 有人堵门声讨寄送花圈 金一南少将:美国在中东打开了潘多拉盒子 百日内5名将军密集跨军种“转战” 近2年均刚调岗 谁需要钱我借他100万 开什么店比较有市场 没钱怎么创业 如何创业白手起家 AG亚游集团