一个优秀php分页类和大家分享

以前写的一个php分页类,基本上能实现大家一些分页功能的实现,具体关于怎么使用大家可以看看我空间的另一篇关于,记录ip和pv的博文,主要是在查询数据库时当我们组织sql语句的时候,加上 limit 就可以了,如果表单使用get方式也可以实现搜索结果的分页显示,因为在类中已经组织好了URL地址。

  
  
  
  
  1. <?php  
  2. class Page{  
  3.     private $total_rows;   //总记录数  
  4.     private $total_page;   //总页数  
  5.     private $onepage_rows//每页显示行数  
  6.     private $self_page;    //当前页  
  7.     private $url;          //URL地址  
  8.     private $page_rows;    //页码数量  
  9.     private $start_id;     //当前页起始ID  
  10.     private $end_id;       //当前页结束ID  
  11.     private $desc=array();  
  12.  
  13.     /**  
  14.      * 构造函数  
  15.      *   
  16.      * @access  public  
  17.      * @param   integer  $total             总条数  
  18.      * @param   integer  $rows              每页显示行数  
  19.      * @param   integer  $page_rows         页码数量  
  20.      * @param   string   $desc              分页文字描述  
  21.      */ 
  22.     function __construct($total,$rows=10,$page_rows=8,$desc=''){  
  23.         $this->total_rows = $total;//总条数  
  24.         $this->onepage_rows = $rows;//每页显示行数  
  25.         $this->page_rows = $page_rows;//页码数量  
  26.         $this->total_page = ceil($this->total_rows/$this->onepage_rows);//总页数  
  27.         $this->self_page = min($this->total_page,max((int)@$_GET['page'],1));//当前页  
  28.         $this->start_id = ($this->self_page-1)*$this->onepage_rows+1;//起始ID  
  29.         $this->end_id = min($this->total_rows,$this->self_page*$this->onepage_rows);  
  30.         $this->url = $this->requestUrl();//配置URL地址  
  31.         $this->desc = $this->desc($desc);//分页文字描述  
  32.         //var_dump($this->desc);  
  33.     }  
  34.       
  35.     /**  
  36.      * 配置url地址  
  37.      *   
  38.      * @access    private   
  39.      * @return    string       返回配置好的url地址  
  40.      */ 
  41.     private function requestUrl(){  
  42.         /* echo "<pre>";  
  43.           //print_r($_SERVER);  
  44.         echo "</pre>";  
  45.          */ 
  46.         $url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING'];  
  47.         //解析url地址,返回数组  
  48.         $request_arr = parse_url$url );  
  49.         if( isset($request_arr['query']) ){  
  50.             //解析请求参数  
  51.             parse_str($request_arr['query'],$arr);  
  52.             //删除参数中的page元素  
  53.             unset($arr['page']);  
  54.             //合并路径及请求参数为标准的URL地址  
  55.             $url = $request_arr['path'].'?'.http_build_query($arr).'&page=';  
  56.         }else{  
  57.             //没有请求参数GET的情况  
  58.             $url = strstr($url'?') ? $url."page=" : $url."?page=";  
  59.         }  
  60.         return $url;  
  61.     }  
  62.       
  63.     /**  
  64.      * 配置 分页文字描述方法  
  65.      *   
  66.      * @access   private  
  67.      * @param    array     $desc  分页的描述  
  68.      * @return   array              
  69.      */ 
  70.     private function desc($desc){  
  71.         //默认文字描述  
  72.         $d = array(  
  73.                 "pre"=>"上一页",  
  74.                 "next"=>"下一页",  
  75.                 "first"=>"首页",  
  76.                 "end"=>"末页",  
  77.                 "unit"=>"条",);  
  78.         ifemptyempty($desc) || !is_array($desc) ){  
  79.             return $d;  
  80.         }  
  81.         //过滤没有值的数组   
  82.         function filter($v){  
  83.             return !emptyempty($v);  
  84.         }  
  85.         //合并数组  
  86.         return array_merge$d , array_filter($desc,"filter") );  
  87.     }  
  88.     /**  
  89.      * SQL limit语句,控制每页显示行数  
  90.      *   
  91.      * @access    public   
  92.      * @return    string  
  93.      */ 
  94.     function limit(){  
  95.         return "LIMIT ".max( 0 , ($this->self_page-1)*$this->onepage_rows ).",".$this->onepage_rows;  
  96.     }   
  97.       
  98.     /**  
  99.      * 上一页  
  100.      *   
  101.      * @access    public  
  102.      * @return    string  
  103.      */ 
  104.     function pre(){  
  105.         return $this->self_page > 1 ? "<a href='".$this->url.($this->self_page-1)."'>".$this->desc['pre']."</a>" : "";  
  106.     }  
  107.       
  108.  
  109.     /**  
  110.      * 下一页  
  111.      *  
  112.      * @access    public  
  113.      * @return    string  
  114.      */ 
  115.       
  116.     function next(){  
  117.         return $this->self_page < $this->total_page ? "<a href='".$this->url.($this->self_page+1)."'>".$this->desc['next']."</a>" : "";  
  118.     }  
  119.       
  120.     /**  
  121.      * 首页  
  122.      *  
  123.      * @access    public  
  124.      * @return    string  
  125.      */ 
  126.     function first(){  
  127.         return $this->self_page > 1 ? "<a href='{$this->url}1'>{$this->desc['first']}</a>" : "";  
  128.     }  
  129.       
  130.     /**  
  131.      * 尾页  
  132.      *  
  133.      * @access    public  
  134.      * @return    string  
  135.      */ 
  136.     function end(){  
  137.         return $this->self_page < $this->total_page ? "<a href='{$this->url}{$this->total_page}'>{$this->desc['end']}</a>" : "";  
  138.     }  
  139.       
  140.     /**  
  141.      * 当前记录数  
  142.      *  
  143.      * @access    public  
  144.      * @return    string  
  145.      */ 
  146.     function nowPage(){  
  147.         return "第".$this->start_id."{$this->desc['unit']}-{$this->end_id}{$this->desc['unit']}";  
  148.     }  
  149.       
  150.     /**  
  151.      * 返回当前页码  
  152.      *  
  153.      * @access    public  
  154.      * @return    string  
  155.      */ 
  156.     function selfnum(){  
  157.         return $this->self_page;  
  158.     }  
  159.       
  160.     /**  
  161.      * 统计数据信息  
  162.      *  
  163.      * @access    public  
  164.      * @return    string  
  165.      */ 
  166.     function count(){  
  167.         return "<span>总共有: {$this->total_page} 页&nbsp;&nbsp;总计: {$this->total_rows} 条</span>";  
  168.     }     
  169.       
  170.     /**  
  171.      * 前几页  
  172.      *  
  173.      * @access    public  
  174.      * @return    string  
  175.      */ 
  176.     function pres(){  
  177.         $num = $this->self_page - $this->page_rows;  
  178.         return $this->self_page > $this->page_rows ? "<a href='".$this->url.$num."'>".'前'.$this->page_rows.'页'."</a>" :"";  
  179.     }  
  180.       
  181.     /**  
  182.      * 后几页  
  183.      *  
  184.      * @access    public  
  185.      * @return    string  
  186.      */ 
  187.     function nests(){  
  188.         $num = $this->self_page + $this->page_rows;  
  189.         return $this->self_page < $this->total_page - $this->page_rows ? "<a href='{$this->url}$num'>后{$this->page_rows}页</a>" : "";  
  190.     }  
  191.     /**  
  192.      * 获得页面数组  
  193.      *  
  194.      * @access    private  
  195.      * @return    string  
  196.      */ 
  197.     private  function pagelist(){  
  198.         $pageList = array();  
  199.         $start = max( 1 , min( $this->self_page - ceil($this->page_rows/2), $this->total_page - $this->page_rows ));  
  200.         $end = min( $this->total_page , $start+$this->page_rows );  
  201.         for$i=$start;$i<=$end;$i++ ){  
  202.             if$i == $this->self_page ){  
  203.                 //变量是当前页时,去掉链接  
  204.                 $pageList[$i]['url'] = "";  
  205.                 $pageList[$i]['str'] = $i;  
  206.                 continue;  
  207.             }   
  208.             $pageList[$i]['url'] = $this->url.$i;  
  209.             $pageList[$i]['str'] = $i;  
  210.         }  
  211.         return $pageList;  
  212.      }  
  213.        
  214.      /**  
  215.       * 字符串分页  
  216.       *  
  217.       * @access    public  
  218.       * @return    string  
  219.       */ 
  220.      function strList(){  
  221.          $arr = $this->pagelist();  
  222.          $pageList = "";  
  223.          foreach$arr as $v ){  
  224.              $pageList .= emptyempty($v['url']) ? "<strong>".$v['str']."</strong>" : "<a class='alink' href='{$v['url']}'>{$v['str']}</a>";  
  225.          }  
  226.          return $pageList;  
  227.      }  
  228.        
  229.      /**  
  230.       * 下拉列表分页  
  231.       *  
  232.       * @access    public  
  233.       * @return    string  
  234.       */ 
  235.      function selectList(){  
  236.         $arr = $this->pagelist();  
  237.         $pageList = "";  
  238.         $pageList .= "<select class='sel' onchange='javascript:location.href = this.options[selectedIndex].value'>";  
  239.         foreach$arr as $v ){  
  240.             $pageList .= emptyempty($v['url']) ? "<option value='{$v['url']}{$v['str']}' selected='selected'>{$v['str']}</option>" : "<option value='{$v['url']}'>{$v['str']}</option>";  
  241.         }  
  242.         $pageList .= "</select>";  
  243.         return $pageList;  
  244.      }   
  245.        
  246.      /**  
  247.       * 直接输入 跳转分页  
  248.       *  
  249.       * @access    public  
  250.       * @return    string  
  251.       */ 
  252.      function inputList(){  
  253.         //相应 enter 键盘事件  
  254.         $pageList = "<input type='text' value = '{$this->self_page}' id='pageinput' class='pageinput' onkeydown=\" 
  255.         javascript:if(event.keyCode==13){  
  256.         location.href='{$this->url}'+this.value;  
  257.         };\"/>  
  258.         <button   
  259.         var url = document.getElementById('pageinput').value;  
  260.         location.href='{$this->url}'+url;  
  261.         \"/>  
  262.         跳转</button>  
  263.         ";  
  264.         return $pageList;  
  265.      }  
  266.        
  267.      /**  
  268.       * 分页几种组合样式  
  269.       *   
  270.       * @param    integer   $style_id   样式的编号  
  271.       * @return   string  
  272.       */ 
  273.      public function styleList($style_id){  
  274.         switch ($style_id){  
  275.             case 1:  
  276.                 return $this->pre().$this->strlist().$this->next();  
  277.             case 2:  
  278.                 return $this->pre().$this->strlist().$this->next().$this->count();  
  279.             case 3:  
  280.                 return $this->pres().$this->select().$this->nexts();  
  281.         }  
  282.      }  
  283.        

 

你可能感兴趣的:(分页,php分页,php分页类)