php简单分页类|page.class.php
使用方法:
$p = new page;
$list = $p->getPage($sql, $page, 10);
说明:$sql 需要查询的sql语句,$page表示当前页数,补始时,请设定$page = 1,最后一个参数10则表示每一页的记录数量
$page = $p->setPage('/news/list/?page=', 6);
'/news/list/?page=' 表示翻页要链接到的地方,后面这个参数6则表示翻页按钮有6个(会根据当前翻页情况自动变化),不过最好设置成奇数,比如7 个的时候,则前后各3个,加中间一个(当前)。
不足的地方:每次统计总记录数是比较浪费资源的,还有就是记录数据过少时(不足以指定翻页数量时)会出现负的翻页数
<?php class page extends db{ public function getPage($sql, $page, $size){ $this->page = $page; $this->pageAll = ceil($this->numrows($sql) / $size); return $this->fetchAll($sql.' LIMIT '.($this->page - 1) * $size.' , '.$size); } public function setPage($uri, $offset){ if($this->page < 2){ return $this->leftPage($uri, $this->page, $offset); }elseif($this->page > 1 && $this->page < $this->pageAll){ return $this->middlePage($uri, $this->page, $offset); }elseif($this->page > $this->pageAll - 1){ return $this->rightPage($uri, $this->page, $offset); } } private function leftPage($uri, $page, $offset){ $first = ''; $last = '<a href="'.$uri.$this->pageAll.'">>></a>'; $current = '<a class="current">'.$page.'</a>'; $prev = ''; $next = ''; for($i = 1; $i < $offset; $i++){ $nextNum = $page + $i; $next .= '<a href="'.$uri.$nextNum.'">'.$nextNum.'</a>'; } $next .= '<a href="'.$uri.($page + 1).'">></a>'; return '<div class="page">'.$first.$prev.$current.$next.$last.'</div>'; } private function middlePage($uri, $page, $offset){ $diff = $this->pageAll - $page; $first = '<a href="'.$uri.'1"><<</a>'; $last = '<a href="'.$uri.$this->pageAll.'">>></a>'; $current = '<a class="current">'.$page.'</a>'; $prev = ''; $next = ''; if($diff < ceil($offset/2)){ for($i = 1; $i < $offset-$diff; $i++){ $prevNum = $page - $i; $prev = '<a href="'.$uri.$prevNum.'">'.$prevNum.'</a>'.$prev; } for($i = 1; $i <= $diff; $i++){ $nextNum = $page + $i; $next .= '<a href="'.$uri.$nextNum.'">'.$nextNum.'</a>'; } }elseif($page > ceil($offset/2)){ for($i = 1; $i < ceil($offset/2); $i++){ $prevNum = $page - $i; $prev = '<a href="'.$uri.$prevNum.'">'.$prevNum.'</a>'.$prev; $nextNum = $page + $i; $next .= '<a href="'.$uri.$nextNum.'">'.$nextNum.'</a>'; } }elseif($page < $offset){ for($i = 1; $i < $page; $i++){ $prevNum = $page - $i; $prev = '<a href="'.$uri.$prevNum.'">'.$prevNum.'</a>'.$prev; } for($i = 1; $i <= $offset - $page; $i++){ $nextNum = $page + $i; $next .= '<a href="'.$uri.$nextNum.'">'.$nextNum.'</a>'; } } $prev = '<a href="'.$uri.($page - 1).'"><</a>'.$prev; $next .= '<a href="'.$uri.($page + 1).'">></a>'; return '<div class="page">'.$first.$prev.$current.$next.$last.'</div>'; } private function rightPage($uri, $page, $offset){ $first = '<a href="'.$uri.'1"><<</a>'; $last = ''; $current = '<a class="current">'.$page.'</a>'; $prev = ''; $next = ''; for($i = 1; $i < $offset; $i++){ $prevNum = $page - $i; $prev = '<a href="'.$uri.$prevNum.'">'.$prevNum.'</a>'.$prev; } $prev = '<a href="'.$uri.($page - 1).'"><</a>'.$prev; return '<div class="page">'.$first.$prev.$current.$next.$last.'</div>'; } } //该片段来自于http://outofmemory.cn