<?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页,测试结果如下:
原文:http://www.cnblogs.com/lihaiyan/p/4274380.html