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页,测试结果如下:

图片

图片

 

你可能感兴趣的:(PHP)