文档章节

php自适应分页类

宁少爷
 宁少爷
发布于 2016/04/22 01:37
字数 684
阅读 96
收藏 8
<?php
/*
*@Author: ray
*@E-mail: ningbo.zhang@qq.com
*@Date: 2016-3-29
*@Explain: 自适应分页类
**/

class Page {
    public $total;//总记录
    public $pageSize;//每页大小
    public $page;//当前页
    public $pages;//总页数
    public $link;//显示的页码数   1 2 3 4 5 6
    public $left;//显示页码的左边数目
    public $right;//显示页码的右边数目
    public $pageId;//传值的变量名
    public $prev;//上一页
    public $next;//下一页
    public $GP;//传值的方式  GET/POST
    public $start;//中间显示页码的开始页码数
    public $end;//中间显示页码的结束页码数
    
    //渲染主题
    public $theme=array('first','prev','link','next','last','total','info');
    
    //构造方法
    public function __construct($num, $pageSize, $link=7, $pageId='page', $GP='G'){
        $this->total=$num;
        $this->pageSize=$pageSize;
        $this->link=$link;
        $this->pageId=$pageId;
        $this->GP=$GP;
        
        $this->rule();
    }
    
    
    //计算页码
    public function rule(){
        //计算总页数
        $this->pages=ceil($this->total/$this->pageSize);
        
        //获得当前页
        if($this->GP=='G'){//GET
            $this->page=isset($_GET[$this->pageId])?$_GET[$this->pageId]:1;
        }else{//POST
            $this->page=isset($_POST[$this->pageId])?$_POST[$this->pageId]:1;
        }
        //约束当前页边界
        $this->constraint();
        
        //上下页
        $this->prev=$this->page-1;
        $this->next=$this->page+1;
        
        //计算中间页码的开始和结束的页码数
        //计算左右显示的页码数
        if($this->link%2){//link为奇数
            $this->left=$this->right=($this->link-1)/2;
        }else{//link为偶数
            $this->left=$this->link/2;
            $this->right=$this->link-$this->left-1;
        }
        //初始化
        $this->start=1;
        $this->end=$this->pages;
        
        if($this->pages>$this->link){
            //1.起始页为1
            if($this->page<=$this->left){
                $this->end=$this->link;
            }
            //2.中间
            if(($this->page>$this->left) && (($this->page+$this->right)<$this->pages)){
                $this->start=$this->page-$this->left+1;
                $this->end=$this->page+$this->right-1;
            }
            //3.结束页为pages
            if(($this->page+$this->right)>=$this->pages){
                $this->start=$this->pages-$this->link+1;
            }
        }
        
    }
    
    
    //边界约束
    public function constraint(){
        if($this->page<1) $this->page=1;
        if($this->page>$this->pages) $this->page=$this->pages;
    }
    
    //获取当前页面的url
    public function getUrl(){
        return "http://".$_SERVER['HTTP_HOST'].($_SERVER['SERVER_PORT']!='80'?(':'.$_SERVER['SERVER_PORT']):'').$_SERVER['PHP_SELF'];
    }
    
    //获取limit
    public function getLimit(){
        return ($this->page-1)*$this->pageSize;
    }
    
    //改变主题
    public function changeTheme(array $theme){
        $this->theme=$theme;
    }
    
    //渲染页码   <a>  <span name='now'>
    public function show(array $arr=array()){
        if(!count($arr)){
            $arr=$this->theme;
        }
        $url=$this->getUrl();
        //首页、上一页约束
        if($this->page==1){
            $html['first']="<span>首页</span>";
            $html['prev']="<span>上一页</span>";
            
        }else{
            $html['first']="<a href='".$url."?".$this->pageId."=1'>首页</a>";
            $html['prev']="<a href='".$url."?".$this->pageId."=".$this->prev."'>上一页</a>";
            
        }
        
        $str='';
        //起始点页码
        if($this->start!=1){
            $str='<span>...</span>';
        }
        
        for($i=$this->start;$i<=$this->end;$i++){
            if($i==$this->page){
                $str.="<span name='now'>$i</span>";
                continue;
            }
            $str.="<a href='".$url."?".$this->pageId."=".$i."'>$i</a>";
        }
        //结束点页码
        if($this->end!=$this->pages){
            $str.='<span>...</span>';
        }
        
        $html['link']=$str;
        
        //下一页、末页约束
        if($this->page==$this->pages){
            $html['next']="<span>下一页</span>";
            $html['last']="<span>末页</span>";
            
        }else{
            $html['next']="<a href='".$url."?".$this->pageId."=".$this->next."'>下一页</a>";
            $html['last']="<a href='".$url."?".$this->pageId."=".$this->pages."'>末页</a>";
            
        }
        $html['total']="共有".$this->total."条结果 ";
        $html['info']="当前为第".$this->page."/".$this->pages."页";
        
        $res='';
        foreach($arr as $v){
            $res.=$html[$v];
        }
        return $res;
    }
}


© 著作权归作者所有

宁少爷

宁少爷

粉丝 1
博文 9
码字总数 2813
作品 0
合肥
程序员
私信 提问
加载中

评论(2)

php搬运工
php搬运工

引用来自“Loveni”的评论

mark
??
Loveni
Loveni
mark
PHP 分页类--PHPPage

一个简单好用的PHP分页类。多年前,我刚开始接触编程时,分页就是一个不小的挑战。还好很多框架都自带了分页类,帮我省去了很多麻烦。事实上,写好一个分页类不是那么容易,往往看起来简单的...

crazymus
2015/09/11
927
0
thinkphp简洁、美观、靠谱的分页类

废话不多说先上图预览下;即本博客的分页; 这个分页类是在thinkphp框架内置的分页类的基础上修改而来; 原分页类的一些设计,在实际运用中感觉不是很方便; 1:只有一页内容时不显示分页; ...

白俊遥
2016/03/06
19
0
关于ThinkPHP的一点小小知识点的补充

1.首先将模板加载到模板引擎中去,然后模板开始解析(优先级是:首先解析内置函数(就是模板引擎的内置函数),然后在解析定义函数(如ThinkPHP内置的U,F函数)),最后再返回到模 板。 如果...

笨小熊
2015/09/23
135
0
开源PHP框架-CodeIgniter分页教程

有些时候,你可能需要把数据库查询所得到的一篇文章或一组结果拆分成多页。在这时,你将需要写某种分页脚本。这对于从没有做过这个的开发者来说还是有一点难度的,但使用 CodeIgniter 却是轻...

万里虎
2014/12/03
378
0
yaf 工程结构

根目录下新建一个public 目录 E:codeyaf_demopublicindex.php index.php移动到public 目录下 define('APPLICATIONPATH', dirname(DIR_)); E:codeyaf_demotesting 测试的入口(做单元测试时用......

skinglzw
2017/08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

搭建高可用MongoDB集群(分片)

搭建高可用MongoDB集群(分片) MongoDB基础请参考:https://blog.51cto.com/kaliarch/2044423 MongoDB(replica set)请参考:https://blog.51cto.com/kaliarch/2044618 一、概述 1.1 背景 ......

linjin200
8分钟前
1
0
CDH6.0.1集成tez-0.9.1计算引擎

参考文章: https://www.jianshu.com/p/9fb9f32e1f0f https://www.baidu.com/link?url=OgpwasnZi7H1dySN2T111sseEWDBaCCTC3DFV61G7756YbrkJCA8Y3UFaueyqnfN&wd=&eqid=daeb8b3500049cf3000000......

Sheav
10分钟前
1
0
Vue内置指令的使用

v-model(数据绑定) v-model常用于表单数据的双向绑定,它本质上是一个语法糖。它主要的有两种应用: 在文本框、多行文本、input的下拉框、单选按钮、复选框中的应用 <div id="app"> ...

凌兮洛
10分钟前
1
0
外部来源应用检查-烦死了,终于找到解决设置了

Android 连接usb调试应用的时候: 华为关闭方法:1、设置-安全-更多安全设置,关掉外部来源应用检查。2、设置-系统-开发人员选项-关闭“监控ADB安装应用” 不知道OPPO 怎么关闭的?...

QGlaunch
11分钟前
2
0
6个K8s日志系统建设中的典型问题,你遇到过几个?

作者 | 元乙 阿里云日志服务数据采集客户端负责人,目前采集客户端 logtail 在集团百万规模部署,每天采集上万应用数 PB 数据,经历多次双 11、双 12 考验。 导读:随着 K8s 不断更新迭代,使...

阿里云官方博客
13分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部