class Page
{
//信息总条数
protected $total;
//当前页数
protected $page;
//每页显示条数
public $num;
//开始搜索的位置
public $start;
//当前url
protected $url;
//分页链接
protected $result;
/**
* 构造函数
* @param int $total
* @param int $page
* @param int $num
*/
public function __construct($total,$page,$num)
{
$this->total = $total;
$this->page = $page;
$this->num = $num;
}
/**
* 获取分页链接
*/
public function getPage()
{
//分析当前路径,获取参数
$this->anaylistUrl();
//获取路径信息
$this->makeLinks();
//计算开始查询位置
$this->start = ($this->page-1)*$this->num;
return $this->result;
}
/**
* 分析当前url
*/
private function anaylistUrl()
{
$param = $_SERVER["QUERY_STRING"];
if(empty($param)){
$this->url = '?';
return ;
}
$paramArr = explode('&',$param);
$param = '?';
foreach($paramArr as $val){
$valArr = explode('=',$val);
if('p'!=$valArr[0]){
$param .= "{$valArr[0]}={$valArr[1]}&";
}
}
$this->url = $param;
}
/**
* 生成链接数组
*/
protected function makeLinks()
{
$before = array();
$after = array();
$totalPage = (0 == $this->total)?1:ceil($this->total/$this->num);
if(1 != $this->page){
$before[] = '<a href="'.$this->url.'p=1" title="首页">首页</a>';
}
if($this->page > 3){
$before[] = '<a href="'.$this->url.'p='.($this->page-3).'" title="前三页"><<</a>';
}
for($i = (($this->page-3)<=1?1:($this->page-3));$i<$this->page;$i++){
$before[] = '<a href="'.$this->url.'p='.$i.'">'.$i.'</a>';
}
if($this->page != $totalPage){
$after[] = '<a href="'.$this->url.'p='.$totalPage.'" title="末页">末页</a>';
}
if(($totalPage-$this->page) >= 3){
$after[] = '<a href="'.$this->url.'p='.($this->page+3).'" title="后三页">>></a>';
}
for($i = ($this->page+3>$totalPage?$totalPage:($this->page+3));$i>$this->page;$i--){
$after[] = '<a href="'.$this->url.'p='.$i.'">'.$i.'</a>';
}
$after = array_reverse($after);
$this->result = array_merge($before,array("<li>{$this->page}</li>"),$after);
}
}
使用方法:
$count --- 总条目数
$page --- 当前页数
$num ---- 一页显示的行数
$page = new page($count,$page,$num);
$pageLinks = $page->getPage();