Home  >  Article  >  Backend Development  >  A PHP paging class code (compatible with url routing)

A PHP paging class code (compatible with url routing)

WBOY
WBOYOriginal
2016-07-25 08:52:37826browse
  1. class Page{
  2. private $total; //数据表中总记录数
  3. private $listRows; //每页显示的条数
  4. private $limit; //SQL语句中使用limit从句,限制获取记录数
  5. private $uri; //自动获取url的请求地址
  6. private $pageNum; //总页数
  7. private $page; //当前页
  8. private $config = array(
  9. 'head' => '条记录',
  10. 'prev' => '上一页',
  11. 'next' => '下一页',
  12. 'first' => '首页',
  13. 'last' => '末页'
  14. );//在分页信息中显示内容,可以自己通过set()方法设置
  15. private $listNum = 5; //默认分页列表显示的个数
  16. /**
  17. * 构造方法,可以设置分页类的属性
  18. * @param int $total计算分页的总记录数
  19. * @param int $listRows 可选的,设置每页显示的记录数,默认25
  20. * @param mixed $query可选的,为向目标页面传递参数,可以是数组,也可以是查询字符串格式
  21. * @param bool $ord 默认是true,页面从第一页开始显示,false则从最后一页开始显示
  22. */ bbs.it-home.org
  23. public function __construct($total, $listRows=25, $query='', $ord=true){
  24. $this->total = $total;
  25. $this->listRows = $listRows;
  26. $this->uri = $this->getUri($query);
  27. $this->pageNum = ceil($this->total/$this->listRows);
  28. /*以下判断用来设置当前页*/
  29. if(!empty($_GET['page'])){
  30. $page = $_GET['page'];
  31. }else{
  32. if($ord){
  33. $page = 1;
  34. }else{
  35. $page = $this->pageNum;
  36. }
  37. }
  38. if($total > 0){
  39. if(preg_match('/\D/', $page)){
  40. $this->page = 1;
  41. }else{
  42. $this->page = $page;
  43. }
  44. }
  45. //$this->limit = 'LIMIT '.$this->setLimit();
  46. $this->limit = $this->setLimit();
  47. }
  48. /**
  49. * 用于设置显示分页的信息,可以进行连贯操作
  50. * @param string $param 成员属性数组config的下表
  51. * @param string $value 用于设置config下标对应的元素值
  52. * @return object 返回本对象自己$this,用于连贯操作
  53. */
  54. function __set($param, $value){
  55. if(array_key_exists($param, $this->config)){
  56. $this->config[$param] = $value;
  57. }
  58. //return $this;
  59. }
  60. /*可以使用在对象外部,直接获取私有成员属性limit和page的值*/
  61. function __get($args){
  62. if($args == 'limit' || $args == 'page'){
  63. return $this->$args;
  64. }else{
  65. return null;
  66. }
  67. }
  68. /**
  69. * 按指定的格式输出分页
  70. * @param int 0-7的数字分别作为参数,用于自定义输出分页结构和调整结构的顺序,默认输出全部结构
  71. * @return string 分页信息内容
  72. */
  73. function fpage(){
  74. $arr = func_get_args();
  75. $html[0] = " 共 {$this->total} {$this->config['head']} ";
  76. $html[1] = " 本页".$this->disnum()."条 ";
  77. $html[2] = " 本页从{$this->start()} - {$this->end()}条 ";
  78. $html[3] = " {$this->page}/{$this->pageNum}页 ";
  79. $html[4] = $this->firstprev();
  80. $html[5] = $this->pageList();
  81. $html[6] = $this->nextlast();
  82. $html[7] = $this->goPage();
  83. $fpage = '
    ';
  84. if(count($arr)<1){
  85. $arr = array(0,1,2,3,4,5,6,7);
  86. }
  87. for($i=0; $i$fpage .= $html[$arr[$i]];
  88. }
  89. $fpage .= '
';
  • return $fpage;
  • }
  • /*Used inside the object to automatically obtain the current url accessed*/
  • private function getUri($query){
  • $request_uri = $_SERVER['REQUEST_URI'];
  • $url = strstr($request_uri, '?') ? $request_uri : $request_uri.'?';
  • if(is_array($query)){
  • $url .= http_build_query($query);
  • }else if ($query != ''){
  • $url .= '&'.trim($query, '?&');
  • }
  • $arr = parse_url($url);
  • if(isset($arr ['query'])){
  • parse_str($arr['query'], $arrs);
  • unset($arrs['page']);
  • $url = $arr['path'].'?' .http_build_query($arrs);
  • }
  • if(strstr($url, '?')){
  • if(substr($url, -1) != '?'){
  • $url = $url.' &';
  • }
  • }else{
  • $url .= '?';
  • }
  • return $url;
  • }
  • /*Private method, set limit*/
  • private function setLimit(){
  • if($this ->page > 0){
  • return ($this->page - 1)*$this->listRows.", {$this->listRows}";
  • }else{
  • return 0;
  • }
  • }
  • /*Private method used inside the object to get the number of records at the beginning of the current page*/
  • private function start(){
  • if($this->total == 0){
  • return 0 ;
  • }else{
  • return ($this->page-1) * $this->listRows + 1;
  • }
  • }
  • /*Used to get the number of records at the end of the current page*/
  • private function end (){
  • return min($this->page * $this->listRows, $this->total);
  • }
  • /*Used to get the number of records displayed on this page*/
  • private function disnum(){
  • if($this->total > 0){
  • return $this->end() - $this->start() + 1;
  • }else{
  • return 0;
  • }
  • }
  • /*Used to get the operation information of the previous page and home page*/
  • private function firstprev(){
  • if($this->page > 1){
  • $str = " {$this->config['first']} ";
  • $str .= "{$this->config['prev']} ";
  • return $str;
  • }
  • }
  • private function pageList(){
  • $linkPage = ' ';
  • $pageSub = $this->page%$this->listNum;
  • if($pageSub==0 && $ this->page>0){
  • $pageSub = $this->listNum;
  • }
  • /*The list in front of the current page*/
  • for($i=$pageSub-1; $i >= 1; $i--){
  • $page = $this->page-$i;
  • if($page >= 1){
  • $linkPage .= "{$page} ";
  • }
  • }
  • /*Information of the current page*/
  • if($this->pageNum > 1){
  • $linkPage .= "{$this->page} ";
  • }
  • /*Current List after page*/
  • for($i=1; $i<=$this->listNum-$pageSub; $i++){
  • $page = $this->page + $i;
  • if($ page<=$this->pageNum){
  • $linkPage .= "{$page} " ;
  • }else{
  • break;
  • }
  • }
  • $linkPage .= '';
  • return $linkPage;
  • }
  • /*Used to get page list information*/
  • private function pageListBak (){
  • $linkPage = ' ';
  • $inum = floor($this->listNum/2);
  • /*The list in front of the current page*/
  • for($i=$inum; $i >= 1; $i--){
  • $page = $this->page-$i;
  • if($page >= 1){
  • $linkPage .= "{$page} ";
  • }
  • }
  • /*Information of the current page*/
  • if($this-> pageNum > 1){
  • $linkPage .= "{$this->page} ";
  • }
  • /*List behind the current page*/
  • for($i=1; $i<=$inum; $i++){
  • $page = $this->page + $i;
  • if($ page<=$this->pageNum){
  • $linkPage .= "{$page} " ;
  • }else{
  • break;
  • }
  • }
  • $linkPage .= '';
  • return $linkPage;
  • }
  • /*Get the operation information of the next page and the last page*/
  • private function nextlast(){
  • if($this->page != $this->pageNum){
  • $str = " {$this->config['next']} ";
  • $str .= " {$this->config['last']} ";
  • return $str;
  • }
  • }
  • /*用于显示和处理表单跳转页面*/
  • private function goPage(){
  • if($this->pageNum > 1){
  • return ' ';
  • }
  • }
  • }
  • 复制代码


    Statement:
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn