分页类原理及所需变量:
原理的3个变量:
总条数 $total
每月条数 $perpage
当前 $page
原理公式
$cont = ceil($total/$perpage); // 相除,向上取整
明白如果是第$page页,那么应该显示第几条到第几条?
第$page页,说明前面已经跳过了$page-1页,每页又是$perpage条
跳过了($page-1)*$perpage条,即从第($page-1)*$perpage+1条开始取,取$perpage条出来
分页导航的生成
例:
c.php?page=1
分页导航里
[1] [2] [3] [4]
page参数,应该根据当前的页码来生成,但同时不能把其他参数搞丢
所以,我们先把地址栏的参数获取并保存起来
下面看具体代码:
class PageTool {
protected $total = 0; // 总条数
protected $perpage = 5; // 每页条数
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); // 总页数
$uri = $_SERVER['REQUEST_URI']; // 获取地址栏上的地址
$parse = parse_url($uri); // 把地址栏上的地址信息转换成数组 如:Array ( [path] => /bool/tool/PageTool.class.php [query] => cat_id=10&page=11 )
$param = array();
if(isset($parse['query'])) {
parse_str($parse['query'],$param); // 把字符串转换成数组
}
// 不管$param数组里有没有page单元,都unset一下,确保没有page单元
unset($param['page']);
$url = $parse['path'] . '?';
if(!empty($param)) {
$param = http_build_query($param);
$url = $url . $param . '&';
}
// 计算页码导航
$nav = array();
$nav[0] = '<span class="page_naow"> ' . $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 -= 1;
}
if($right<=$cnt) {
array_push($nav,'<a href="' . $url . 'page=' . $right . '"> [' . $right . '] </a>');
$right += 1;
}
}
return implode('',$nav);
}
}
/*
分页调用测试
new pagetool(总条数,当前页,每页条数);
show() 返回分页代码
$page = $_GET['page']?$_GET['page']:1;
$p = new PageTool(20,$page,6);
echo $p->show();
*/
一个简单的分页类就搞定了!!!