封装分页类需要拼接url,下图为需要用到的函数和数组键名。
调用Page类,里面的test方法为测试方法,会输出上一页,下一页,首页,末页的url。具体要用是在改
<?php
$page=new Page(5,60);
echo "<pre>";
var_dump($page->test());
echo "<pre>";
效果如图:
具体实现的代码如下:
<?php
Class Page{
//每页需要显示的条数
protected $number;
//总数据条数
protected $totalCount;
//当前页
protected $page;
//总页数
protected $totalPage;
//当前url
protected $url;
public function __construct($number,$totalCount)
{
$this->number=$number;
$this->totalCount=$totalCount;
$this->totalPage=ceil($this->totalCount/$this->number);
//得到当前页
$this->page=$this->getPage();
//拼接得到url
$this->url=$this->getUrl();
}
protected function getPage(){
if(empty($_GET['page'])){
$page=1;
}else if($_GET['page']>$this->totalPage) {
$page=$this->totalPage;
}else if($_GET['page']<1){
$page=1;
}else{
$page=$_GET['page'];
}
return $page;
}
protected function getUrl(){
$scheme=$_SERVER['REQUEST_SCHEME'];//协议
$host=$_SERVER['SERVER_NAME'];//主机
$port=$_SERVER['SERVER_PORT'];//端口号
$uri=$_SERVER['REQUEST_URI'];//路径和字符串
//将原来的page清空
$uriArray=parse_url($uri);
$path=$uriArray['path'];
if(!empty($uriArray['query'])){
//将字符串变为关联数组
parse_str($uriArray['query'],$array);
//清除page
unset($array['page']);
$query=http_build_query($array);
if(!empty($query)){
$path=$path.'?'.$query;
}
}
return $scheme.'://'.$host.':'.$port.$path;
}
protected function setUrl($str){
if(strstr($this->url,'?')){
$url=$this->url.'&'.$str;
}else{
$url=$this->url.'?'.$str;
}
return $url;
}
public function test(){
return[
'first'=>$this->firstUrl(),
'last'=>$this->lastUrl(),
'next'=>$this->nextUrl(),
'prev'=>$this->prevUrl()
];
}
public function firstUrl(){
return $this->setUrl('page=1');
}
public function lastUrl(){
return $this->setUrl('page='.$this->totalPage);
}
public function nextUrl(){
if($this->page+1>$this->totalPage){
$page=$this->totalPage;
}else{
$page=$this->page+1;
}
return $this->setUrl('page='.$page);
}
public function prevUrl(){
if($this->page-1<1){
$page=1;
}else{
$page=$this->page-1;
}
return $this->setUrl('page='.$page);
}