分页类

<?php
/*
 * 该工具类是分页技术
 * 默认每页显示10条信息,显示列表数为8
 */

//Tools名称与上一级名称相同,
namespace  Tools;
class Page{
    private $total;     //数据表中的总记录数
    private $listRows;  //每页显示行数
    private $limit;     //每页显示的条数
    private $uri;       //URL地址
    private $pageNum;   //页数
    //配置
    private $config = array('header'=>"个记录",'prev'=>"上一页",'next'=>"下一页",'first'=>"首页",'list'=>"尾页");
    private $listNum = 8;//限制页码列表数目
    /*
     * $total       总记录条数
     * $listRows    每页显示条数 
     */
    public function __construct($total,$ListRows = 10,$pa="") {
        $this ->total = $total;
        $this ->listRows = $ListRows;
        $this ->uri = $this ->getUri($pa);
        $this ->page = !empty($_GET['page'])? $_GET['page'] : 1;           
        $this ->pageNum = ceil($this->total/$this->listRows);
        $this ->limit = $this ->setLimit();
    }
   
    //设置每页显示的条数
    private function setLimit(){
        return " Limit ".($this->page -1) * $this->listRows.",{$this->listRows}";
    }
   
    //获得请求URL地址
    private function getUri($pa){
        $url = $_SERVER["REQUEST_URI"].(strpos($SERVER["REQUEST_URI"], '?')?'':"?").$pa;
        $parse = parse_url($url);
        if(isset($parse['query'])){
            parse_str($parse['query'],$params);
            unset($params['page']);
            $url = $parse['path'].'?'.http_build_query($params);
        }
        return $url;
    }
   
    //魔术方法,作用:只允许调用私有成员
    function __get($args) {
        if($args == "limit"){
            return $this->limit;
        }else{
            return null;
        }
    }
   
    //当前页面从第几条信息开始显示
    private function start(){
        if($this->total == 0){
            return 0;
        }else{
            return ($this->page - 1 ) * $this->listRows + 1;
        }
    }
   
    //当前页面到第几条结束
    private function end(){
        return min($this->page*$this->listRows, $this->total);
    }
   
    //首页超链接
    private function first(){
        $html = "";
        if($this->page==1){
            $html.='';
        } else {
            $html.="&nbsp;&nbsp;<a href='{$this->uri}&page=1'>{$this->config["first"]}</a>&nbsp;&nbsp;";
        }
        return $html;
    }
   
    //上一页
    private function  prev(){
        $html.='';
        if($this->page == 1){
            $html.='';
        }else{
            $html.="&nbsp;&nbsp;<a href ='{$this->uri}&page=" . ($this->page - 1)."'>{$this->config["prev"]}</a>&nbsp;&nbsp;";
        }
        return $html;
    }
   
    //具体数字列表链接
    private function pageList(){
        $linkPage = "";
        $inum = floor($this->listNum/2);
        for($i = $inum;$i>=1;$i--){
            $page = $this->page - $i;
            if($page<1){
                continue;
            }
            $linkPage.="&nbsp;<a href='{$this->uri}&page={$page}'>{$page}</a>&nbsp;";
        }
        $linkPage.="&nbsp;{$this->page}&nbsp;";
        //页数链接
        for ($i=1 ;$i<=$inum;$i++){
            $page = $this->page + $i;
            if($page<= $this->pageNum){
                $linkPage.="&nbsp:<a href = '{$this->uri}&page={$page}'>{$page}</a>&nbsp;";
            }else{
                break;
            }
        }
        return $linkPage;
    }
   
    //跳转到下一页
    private function next(){
        $html="";
        if($this->page == $this->pageNum){
            $html='';
        }else{
            $html.="&nbsp;&nbsp;<a href='{$this->uri}&page=".($this->page+1)."'>{$this->config["next"]}</a>&nbsp;&nbsp;";
        }
        return $html ;
    }
   
    //调到最后一页
    private function last(){
        $html="";
        if($this->page == $this->pageNum){
            $html.='';
        } else {
            $html.="&nbsp;&nbsp;<a href='{$this->uri}&page=".($this->pageNum)."'>{$this->config["last"]}</a>&nbsp;&nbsp;";
        }
        return $html ;
    }
   
    //跳转到指定的一页
    private function goPage(){
        return  '&nbsp;&nbsp;<input type="text" onkeydown="javascript:if(evebt.keyCode==13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;localtion=\''.$this->uri.'&page=\'+page+\'\'}" value="'.$this->page.'"style="width:25px"><input type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':    this.previousSbling.value;locction=\''.$this->uri.'&page=\'+page+\'\">&nbsp;&nbsp;';
    }
   
   
    function fpage($display = array(0,1,2,3,4,5,6,7,8)){
        $html[0] = "&nbsp;&nbsp;共有<b>{$this->total}</b>{$this->config["header"]}&nbsp;&nbsp;";
        $html[1] = "&nbsp;&nbsp;每页显示<b>".($this->end() - $this->start() + 1 )."</b>条,本页<b>{$this->start()}-{$this->end()}</b>条&nbsp;&nbsp;";
        $html[2] = "&nbsp;&nbsp;<b>{$this->page}/{$this->pageNum}</b>页&nbsp;&nbsp;";
        $html[3] = $this->first();
        $html[4] = $this->prev();
        $html[5] = $this->pageList();
        $html[6] = $this->next();
        $html[7] = $this->last();
        $html[8] = $this->goPage();
        $fpage='';
        foreach ($display as $index){
            $fpage.=$html[$index];
        }
        return $fpage;
    }
}

posted @ 2017-04-28 22:50  zhanghd  阅读(168)  评论(0编辑  收藏  举报