当前位置:首页 > PHP教程 > php分页 > 列表

PHP中常用的分页类总结

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-28 11:27:14 浏览: 评论:0 

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(); 

Tags: PHP常用分页 PHP分页类

分享到: