一个简单且很好用的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 03 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 PHP
深入理解require与require_once与include以及include_once的区别
Jun 05 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
Jul 08 PHP
phpstorm编辑器乱码问题解决
Dec 01 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
PHP实现的json类实例
Jul 28 PHP
利用PHP实现开心消消乐的算法示例
Oct 12 PHP
Laravel框架控制器的request与response用法示例
Sep 30 PHP
php+laravel依赖注入知识点总结
Nov 04 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 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
解析argc argv在php中的应用
2013/06/24 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
thinkphp5引入公共部分header、footer的方法详解
2018/09/14 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
javascript之AJAX框架使用说明
2010/04/24 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
jquery的each方法使用示例分享
2014/03/25 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
中国医药集团国药在线:国药网
2017/02/06 全球购物
工商管理专业应届生求职信
2013/11/04 职场文书
会计专业个人求职信范文
2014/01/08 职场文书
儿媳婚宴答谢词
2014/01/14 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
七一建党节演讲稿
2014/09/11 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis
详解Vue3使用axios的配置教程
2022/04/29 Vue.js