一个简单且很好用的php分页类


Posted in PHP onOctober 26, 2013
class Page {
    // 分页栏每页显示的页数
    public $rollPage = 6;
    // 页数跳转时要带的参数
    public $parameter  ;
    // 默认列表每页显示行数
    public $listRows = 20;
    // 起始行数
    public $firstRow ;
    // 分页总页面数
    protected $totalPages  ;
    // 总行数
    protected $totalRows  ;
    // 当前页数
    protected $nowPage    ;
    // 分页的栏的总页数
    protected $coolPages   ;
    // 分页显示定制
    protected $config  = array(
     'redirect'=>false,
     'header'=>'条记录',
     'prev'=>'上一页',
     'next'=>'下一页',
     'first'=>'1',
     'last'=>'最后一页',
     'theme'=>' <div class="part1">%upPage% %first%  %prePage%  %linkPage%  %nextPage% %downPage%</div> <div class="part2">共  %totalPage% 页');
    // 默认分页变量名
    protected $varPage;
    /**
     +----------------------------------------------------------
     * 架构函数
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param array $totalRows  总的记录数
     * @param array $listRows  每页显示记录数
     * @param array $parameter  分页跳转的参数
     +----------------------------------------------------------
     */
    public function __construct($totalRows,$listRows='',$parameter='') {
        $this->totalRows = $totalRows;
        $this->parameter = $parameter;
        $this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'p' ;
        if(!empty($listRows)) {
            $this->listRows = intval($listRows);
        }
        $this->totalPages = ceil($this->totalRows/$this->listRows);     //总页数
        $this->coolPages  = ceil($this->totalPages/$this->rollPage);
        //$_GET验证
        $this->nowPage = intval($_GET[$this->varPage]);
        $this->nowPage = $this->nowPage > 0 ? $this->nowPage : 1;
        if(!empty($this->totalPages) && $this->nowPage>$this->totalPages) {
            $this->nowPage = $this->totalPages;
        }
        $this->firstRow = $this->listRows*($this->nowPage-1);
    }
    public function setConfig($name,$value) {
        if(isset($this->config[$name])) {
            $this->config[$name]    =   $value;
        }
    }
    /**
     +----------------------------------------------------------
     * 分页显示输出
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     */
    public function show() {
     if(0 == $this->totalRows) return '';
     //处理参数
        $p = $this->varPage;
        $url  =  $_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],'?')?'':"?").$this->parameter;
        $parse = parse_url($url);
        if(isset($parse['query'])) {
            parse_str($parse['query'],$params);
            unset($params[$p]);
            $url   =  $parse['path'].'?'.http_build_query($params);
        }
        /* 分页逻辑  */       
        //当总数小于显示的页码数
        if ($this->totalPages <= $this->rollPage) {
         $start = 1;
         $end   = $this->totalPages;
        }
        else{
         //
         if  ($this->nowPage <= $this->rollPage - 1) {
          $start = 1;
          $end   = $this->rollPage;
          $islast = true;
         }  
         else if ($this->nowPage > $this->totalPages - $this->rollPage + 1) {
          $start = $this->totalPages - ($this->rollPage - 1);
          $end   = $this->totalPages;
          $isfirst = true;
         }
         else{
          //浮动数
          $size = floor($this->rollPage / 2);
          $start = $this->nowPage - $size;
          $end   = $this->nowPage + $size;
          $isfirst = true;
          $islast = true;
         }
        }
        //上下翻页字符串
        $upRow   = $this->nowPage - 1;
        $downRow = $this->nowPage + 1;
        
        /* 拼装HTML */
        //< 1...     ...last >
        if ($isfirst){
         $theFirst = "<a class='firstPage' href='".$url."&".$p."=1' >".$this->config['first']."</a>";
        }
        if ($islast){
         $theEnd = "<a class='lastPage' href='".$url."&".$p."=$this->totalPages' >".$this->config['last']."</a>";
        }
        if ($upRow > 0){
         $upPage = "<a class='upPage' href='".$url."&".$p."=$upRow'>".$this->config['prev']."</a>";
        }
        if ($downRow <= $this->totalPages){
         $downPage = "<a class='downPage' href='".$url."&".$p."=$downRow'>".$this->config['next']."</a>";
        }
       if($start==3){
         $linkPage .= "<a href='".$url."&".$p."=2'>2</a>";
        }
        if($start>=4){
         $linkPage .= "<a href='".$url."&".$p."=2'>2</a> <span class='noEndClass'>...</span>";
        }
        //1 2 3 4 5
        for($i=$start;$i<=$end;$i++){
         if($i!=$this->nowPage){
          $linkPage .= " <a href='".$url."&".$p."=$i'> ".$i." </a>";
         }else{
          $linkPage .= " <span class='current'>".$i."</span>";
         }
         if($i==$end){
          if($i<$this->totalRows){
           $linkPage .= " <span class='noEndClass'>...</span>";
          }
         }
        }
        $pageStr = str_replace(
            array('%header%','%nowPage%','%totalRow%','%totalPage%','%upPage%','%first%','%prePage%','%linkPage%','%nextPage%','%downPage%','%end%'),
            array($this->config['header'],$this->nowPage,$this->totalRows,$this->totalPages,$upPage,$theFirst,$prePage,$linkPage,$nextPage,$downPage,$theEnd),$this->config['theme']);
        //显示模式  普通false 带跳转ture
        if (!empty($this->config['redirect'])){
         $html = $pageStr;
        }else{
         //传递参数
         if($this->totalPages > 1){
          $redirect = " 到第 <form method='get' action=''><input name=".$p." type='text' class='page_text' size='3' maxlength='3' value='" . $this->nowPage ."'/> 页 <input type='submit' class='page_btn' value='确定' />";
          if ($params){
           foreach($params as $k => $v){
            $string .= "<input type='hidden' name='" . $k . "' value='" . $v . "'/>";
           }
           $redirect = $redirect . $string . '</form></div>';
          }else{
           $redirect = $redirect . '</form></div>';
          }
         }
         //生成Html字符串
         $html = $pageStr . $redirect;       
        }  
        return $html;
    }
}
PHP 相关文章推荐
PHP的面向对象编程
Oct 09 PHP
生成php程序的php代码
Apr 07 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
destoon实现公司新闻详细页添加评论功能的方法
Jul 15 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 PHP
学习php设计模式 php实现适配器模式
Dec 07 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
May 29 PHP
php多进程应用场景实例详解
Jul 22 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
Oct 26 #PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 #PHP
php批量更改数据库表前缀实现方法
Oct 26 #PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 #PHP
学习php过程中的一些注意点的总结
Oct 25 #PHP
php模拟ping命令(php exec函数的使用方法)
Oct 25 #PHP
php导入导出excel实例
Oct 25 #PHP
You might like
php输入流php://input使用浅析
2014/09/02 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
详解vue 组件
2020/06/11 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
Python中的装饰器用法详解
2015/01/14 Python
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
Python实现的简单计算器功能详解
2018/08/25 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Python while循环使用else语句代码实例
2020/02/07 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
pandas分组聚合详解
2020/04/10 Python
美术国培研修感言
2014/02/12 职场文书
诚信考试承诺书
2014/03/27 职场文书
司法建议书范文
2014/05/13 职场文书
男方婚礼答谢词
2015/01/20 职场文书
在人间读书笔记
2015/06/30 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
Python  lambda匿名函数和三元运算符
2022/04/19 Python