TypechoJoeTheme

Dcr163的博客

统计

PHP 分页类笔记

2016-12-15
/
0 评论
/
724 阅读
/
正在检测是否收录...
12/15
<?php
/**
 *
 * 分页类
 * Date: 2016/11/13
 * Time: 14:52
 */
class Page{
    private $p;                     //当前页
    private $total;                 //总条数
    private $startPage=0;           //开始页数
    private $pageSize;              //分页条数
    private $limit;                 //分页sql字符
    private $totalPage;             //总页数
    private $pageOffset;            //页码的偏移量
    public function __construct($total,$pageSize){
        $this->total=$total ? $total : 1;                                            //初始化总页数
        $this->pageSize=$pageSize;                                      //初始化分页条数
        $this->p=$this->pageCheck();                                    //初始化单前页
        $this->pageOffset=2;                                            //初始化偏移量
        $this->startPage=($this->pageCheck()-1)*$this->pageSize;
        $this->limit=" LIMIT $this->startPage,$this->pageSize";
    }

    //取得保护对象的值
    public function __get($key){
        return $this->$key;
    }

    //获取当前页码
    public function pageCheck(){
        $_GET['p']=isset($_GET['p'])?intval($_GET['p']):1;
        $this->totalPage=ceil($this->total / $this->pageSize);     //计算总页数
        if(!$_GET['p'] || $_GET['p']<0){
            return 1;
        }
        if($_GET['p'] > $this->totalPage){
            return $this->totalPage;
        }
        return $_GET['p'];
    }
    //前台分页
    public function pages(){
        $pages='';
        $pages.='<ul class="pager">';
        $pages.=$this->firstPage();
        $pages.=$this->prevPage();
        $pages.=$this->numPage();
        $pages.=$this->nextPage();
        $pages.=$this->lastPage();
        $pages.='</ul>';
        return $pages;
    }

    //首页
    private function firstPage(){
        if($this->p-1 < 1){
            return '<li><a href="javascript:;" class="disabled">首页</a></li>';
        }else{
            return '<li><a href="'.$this->setUrl().'">首页</a></li>';
        }
    }
    //上一页
    private function prevPage(){
        if($this->p-1 < 1){
            return '<li><a href="javascript:;" class="disabled">上一页</a></li>';
        }else{
            return '<li><a href="'.$this->setUrl().'&p='.($this->p-1).'">上一页</a></li>';
        }
    }
    //下一页
    private function nextPage(){
        if(($this->p+1) > $this->totalPage){
            return '<li><a href="javascript:;" class="disabled">下一页</a></li>';
        }else {
            return '<li><a href="' . $this->setUrl() . '&p=' . ($this->p + 1) . '">下一页</a></li>';
        }
    }
    //最后一页
    private function lastPage(){
        if(($this->p+1) > $this->totalPage){
            return '<li><a href="javascript:;" class="disabled">尾页</a></li>';
        }else{
            return '<li><a href="'.$this->setUrl().'&p='.$this->totalPage.'">尾页</a></li>';
        }
    }

    //数字分页
    private function numPage(){
        $numPage='';
        if($this->p-$this->pageOffset>1){           //如果当前页间偏移量大于1的时候显示。。。
            $numPage.='<li><a href="javascript:;">..</a></li>';
        }
        for($i=$this->pageOffset;$i>=1;$i--){
            $page=$this->p-$i;
            if($page<1) continue;
            $numPage.='<li><a href="'.$this->setUrl().'&p='.$page.'">'.$page.'</a></li>';
        }
        $numPage.='<li><a class="active" href="javascript:;">'.$this->p.'</a></li>';
        for($i=1;$i<=$this->pageOffset;$i++){
            $page=$this->p+$i;                                  //当前页的下一页
            if($page > $this->totalPage) break;                 //如果下一页大于总页数,就跳出不执行
                $numPage.='<li><a href="'.$this->setUrl().'&p='.$page.'">'.$page.'</a></li>';
        }
        if($this->p+$this->pageOffset<$this->totalPage && $this->showPage<$this->totalPage){
            //如果当前页+偏移量 小于 总页数的时候显示 ...
            $numPage.='<li><a href="javascript:;">..</a></li>';
        }
        return $numPage;
    }

    //获取当前url,去掉P分页参数
    public function setUrl(){
        $url=parse_url($_SERVER['REQUEST_URI']);
        if($url['query']){
            parse_str($url['query'],$arr);
            unset($arr['p']);

            foreach($arr as $k =>$v){
                $arr2[]=$k.'='.$v;
            }
            if(is_array($arr2)){

                $urlStr=implode('&',$arr2);
            }
        }
        return  $url['path'].'?'.$urlStr;
    }

}


朗读
赞(0)
版权属于:

Dcr163的博客

本文链接:

https://dcr163.cn/109.html(转载时请注明本文出处及文章链接)

评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. William Tardent
    2024-02-27
  2. Maryann Hamer
    2024-02-27
  3. Sanora Pantano
    2024-02-24
  4. aa
    2024-02-21
  5. Kassie Baum
    2024-01-28

标签云