一个简单且很好用的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 相关文章推荐
COM in PHP (winows only)
Oct 09 PHP
PHP编码规范的深入探讨
Jun 06 PHP
php数组去重实例及分析
Nov 26 PHP
浅谈discuz密码加密的方式
May 22 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
PHP实现递归无限级分类
Oct 22 PHP
Codeigniter中集成smarty和adodb的方法
Mar 04 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 PHP
php自动加载代码实例详解
Feb 26 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新手上路(三)
2006/10/09 PHP
PHP中读写文件实现代码
2011/10/20 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
Python中flatten( )函数及函数用法详解
2018/11/02 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
周鸿祎:教你写创业计划书
2013/12/30 职场文书
授权委托书格式模板
2014/04/03 职场文书
团日活动总结
2014/04/28 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书