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

PHP实现的简单分页类及用法示例

发布:smiling 来源: PHP粉丝网  添加日期:2019-07-28 16:00:16 浏览: 评论:0 

本文实例讲述了PHP实现的简单分页类及用法。分享给大家供大家参考,具体如下:

  1. <?php 
  2.  
  3. /* 
  4.  
  5.  * 使用: 
  6.  
  7.  * $page = new Page(连接符,查询语句,当前页码,每页大小,页码符) 
  8.  
  9.  * 连接符:一个MYSQL连接标识符,如果该参数留空,则使用最近一个连接 
  10.  
  11.  * 查询语句:SQL语句 
  12.  
  13.  * 当前页码:指定当前是第几页 
  14.  
  15.  * 每页大小:每页显示的记录数 
  16.  
  17.  * 页码符:指定当前页面URL格式 
  18.  
  19.  * 
  20.  
  21.  * 使用例子: 
  22.  
  23.  * $sql = "select * from aa"; 
  24.  
  25.  * $page = new Page($conn,$sql,$_GET['page'],4,"?page="); 
  26.  
  27.  * 
  28.  
  29.  * 获得当前页码 
  30.  
  31.  * $page->page; 
  32.  
  33.  * 
  34.  
  35.  * 获得总页数 
  36.  
  37.  * $page->pageCount; 
  38.  
  39.  * 
  40.  
  41.  * 获得总记录数 
  42.  
  43.  * $page->rowCount; 
  44.  
  45.  * 
  46.  
  47.  * 获得本页记录数 
  48.  
  49.  * $page->listSize; 
  50.  
  51.  * 
  52.  
  53.  * 获得记录集 
  54.  
  55.  * $page->list; 
  56.  
  57.  * 记录集是一个2维数组,例:list[0]['id']访问第一条记录的id字段值. 
  58.  
  59.  * 
  60.  
  61.  * 获得页码列表 
  62.  
  63.  * $page->getPageList(); 
  64.  
  65.  */ 
  66.  
  67. class Page 
  68.  
  69.  
  70.   //基础数据 
  71.  
  72.   var $sql
  73.  
  74.   var $page
  75.  
  76.   var $pageSize
  77.  
  78.   var $pageStr
  79.  
  80.   //统计数据 
  81.  
  82.   var $pageCount//页数 
  83.  
  84.   var $rowCount//记录数 
  85.  
  86.   //结果数据 
  87.  
  88.   var $list = array(); //结果行数组 
  89.  
  90.   var $listSize ; 
  91.  
  92.   //构造函数 
  93.  
  94.   function Page($conn,$sql_in,$page_in,$pageSize_in,$pageStr_in
  95.  
  96.   { 
  97.  
  98.     $this->sql = $sql_in
  99.  
  100.     $this->page = intval($page_in); 
  101.  
  102.     $this->pageSize = $pageSize_in
  103.  
  104.     $this->pageStr = $pageStr_in
  105.  
  106.     //页码为空或小于1的处理 
  107.  
  108.     if(!$this->page||$this->page<1) 
  109.  
  110.     { 
  111.  
  112.       $this->page = 1; 
  113.  
  114.     } 
  115.  
  116.     //查询总记录数 
  117.  
  118.     $rowCountSql = preg_replace("/([\w\W]*?select)([\w\W]*?)(from[\w\W]*?)/i","$1 count(0) $3",$this->sql); 
  119.  
  120.     if(!$conn
  121.  
  122.       $rs = mysql_query($rowCountSqlor die("bnc.page: error on getting rowCount."); 
  123.  
  124.     else 
  125.  
  126.       $rs = mysql_query($rowCountSql,$connor die("bnc.page: error on getting rowCount."); 
  127.  
  128.     $rowCountRow = mysql_fetch_row($rs); 
  129.  
  130.     $this->rowCount=$rowCountRow[0]; 
  131.  
  132.     //计算总页数 
  133.  
  134.     if($this->rowCount%$this->pageSize==0) 
  135.  
  136.       $this->pageCount = intval($this->rowCount/$this->pageSize); 
  137.  
  138.     else 
  139.  
  140.       $this->pageCount = intval($this->rowCount/$this->pageSize)+1; 
  141.  
  142.     //SQL偏移量 
  143.  
  144.     $offset = ($this->page-1)*$this->pageSize; 
  145.  
  146.     if(!$conn
  147.  
  148.       $rs = mysql_query($this->sql." limit $offset,".$this->pageSize) or die("bnc.page: error on listing."); 
  149.  
  150.     else 
  151.  
  152.       $rs = mysql_query($this->sql." limit $offset,".$this->pageSize,$connor die("bnc.page: error on listing."); 
  153.  
  154.     while($row=mysql_fetch_array($rs)) 
  155.  
  156.     { 
  157.  
  158.       $this->list[]=$row
  159.  
  160.     } 
  161.  
  162.     $this->listSize = count($this->list); 
  163.  
  164.   } 
  165.  
  166.   /* 
  167.  
  168.    * getPageList方法生成一个较简单的页码列表 
  169.  
  170.    * 如果需要定制页码列表,可以修改这里的代码,或者使用总页数/总记录数等信息进行计算生成. 
  171.  
  172.    */ 
  173.  
  174.   function getPageList() 
  175.  
  176.   { 
  177.  
  178.     $firstPage
  179.  
  180.     $previousPage
  181.  
  182.     $pageList
  183.  
  184.     $nextPage
  185.  
  186.     $lastPage
  187.  
  188.     $currentPage
  189.  
  190.     //如果页码>1则显示首页连接 
  191.  
  192.     if($this->page>1) 
  193.  
  194.     { 
  195.  
  196.       $firstPage = "<a href="\"".$this-">pageStr."1\">首页</a>"
  197.  
  198.     } 
  199.  
  200.     //如果页码>1则显示上一页连接 
  201.  
  202.     if($this->page>1) 
  203.  
  204.     { 
  205.  
  206.       $previousPage = "<a href="\"".$this-">pageStr.($this->page-1)."\">上一页</a>"
  207.  
  208.     } 
  209.  
  210.     //如果没到尾页则显示下一页连接 
  211.  
  212.     if($this->page<$this->pageCount) 
  213.  
  214.     { 
  215.  
  216.       $nextPage = "<a href="\"".$this-">pageStr.($this->page+1)."\">下一页</a>"
  217.  
  218.     } 
  219.  
  220.     //如果没到尾页则显示尾页连接 
  221.  
  222.     if($this->page<$this->pageCount) 
  223.  
  224.     { 
  225.  
  226.       $lastPage = "<a href="\"".$this-">pageStr.$this->pageCount."\">尾页</a>"
  227.  
  228.     } 
  229.  
  230.     //所有页码列表 
  231.  
  232.     for($counter=1;$counter<=$this->pageCount;$counter++) 
  233.  
  234.     { 
  235.  
  236.       if($this->page == $counter
  237.  
  238.       { 
  239.  
  240.         $currentPage = "<b>".$counter."</b>"
  241.  
  242.       } 
  243.  
  244.       else 
  245.  
  246.       { 
  247.  
  248.         $currentPage = " "."<a href="\"".$this-">pageStr.$counter."\">".$counter."</a>"." "
  249.  
  250.       } 
  251.  
  252.       $pageList .= $currentPage
  253. //phpfensi.com 
  254.     } 
  255.  
  256.     return $firstPage." ".$previousPage." ".$pageList." ".$nextPage." ".$lastPage." "
  257.  
  258.   } 
  259.  
  260.  
  261. ?> 

用法示例:

  1. <?php 
  2.  
  3. @$db = mysql_connect('localhost''root''123456'or 
  4.  
  5.     die("Could not connect to database.");//连接数据库 
  6.  
  7. mysql_query("set names 'utf8'");//输出中文 
  8.  
  9. mysql_select_db('test');    //选择数据库 
  10.  
  11. $sql = "select * from `users`"//一个简单的查询 
  12.  
  13. $page = new Page('',$sql,$_GET['page'],5,"?page="); 
  14.  
  15. $rows = $page->list; 
  16.  
  17. foreach($rows as $row
  18.  
  19.  
  20.   echo $row['UserName']."<br>"
  21.  
  22.  
  23. echo $page->getPageList(); //输出分页列表 
  24.  
  25. ?> 

Tags: PHP简单分页

分享到: