PHP分页导航页码类实现

<?php
define('ACC')||exit('Permision Denied');
 
 
//总条数  $total
//每页条数 $perpage
//总页数 $cnt = ceil($total/$perpage);      //相除,向上取整
//第page页 显示 (page-1)*$perpage + 1 条 ~~~ page*$perpage 条
 
//c.php
//c.php?cat_id = 3
//c.php?cat_id =3 $page = 1
//page 参数,应根据页码来生成,但同时不能把其他参数搞丢
//先把地址栏的获取并且保存起来
 
class PageTool{
    protected $total = 0;
    protected $perpage = 10;
    protected $page = 1;
 
    public function __construct($total,$page=false,$perpage=false){
        $this->total = $total;
        if($perpage){
            $this->perpage = $perpage;
        }
        if($page){
            $this->page=$page;
        }
    }
 
    //主要函数
    public function show(){
        $cnt = ceil($this->total / $this->perpage);     //得到总页数
        $url = ($_SERVER['REQUEST_URI']);
 
        $parse = parse_url($url);   //分出  path   query 两个数组类型
        //print_r($parse);
        //讲param 拆成数组
        $param = array();
        if(isset($parse['query'])){
            parse_str($parse['query'],$param);  
        }
        //print_r($param);
        //不管$param数组有没有page单元,都unset一下,即保存除了page之外的page单元
        unset($param['page']);
        //print_r($param);
        //下一个关键,计算页码导航
        
        $url = $parse['path'].'?';
        if(!empty($param)){
            $param = http_build_query($param);
            $url = $url.$param.'&';
            echo $url,"<br/>";
        }
        //计算页面导航
        $nav = array();
        $nav[] = '<span class="page_now">' . $this->page .'</span>';    
        for($left=$this->page-1,$right = $this->page+1 ;($left>=1 || $right<=$cnt)&&count($nav)<=5 ;){
            if($left >= 1){
                array_unshift($nav,'<a href="'.$url.'page='.$left.'">['.$left.']</a>');//放到数组的开头
                $left--;
            }
            if($right <= $cnt){
                array_push($nav,'<a href="'.$url.'page='.$right.'">['.$right.']</a>');//放到数组的尾部
                $right++;
            }
        }
        //print_r($nav);  //查看源代码
        return implode('',$nav);
    }
 
}
//$p = NEW PageTool(50,2,6);    //总共50个商品,当前为第2页,每页6条商品
//print_r($p->show());
 
//分页类调用测试
//new PageTool( 总条数,当前页, 每页条数 );
//echo $p->show();  //返回分页代码
 
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$p = NEW PageTool(50,$page,6);  //总共50个商品,当前为第2页,每页6条商品
echo $p->show();
 
 
?>


分别点击第6页,第7页,测试结果如下:

图片

图片

原文地址:https://www.cnblogs.com/lihaiyan/p/4274380.html