调用方法:
$a = new Paging(29, 5); var_dump($a->allMessage());
代码:
<?php
/**
* Created by PhpStorm.
* User: ming
* Date: 2018/7/16
* Time: 上午11:07
*/
class Paging
{
//总数据量
protected $totalCount;
//每页数据
protected $number;
//总页数
protected $totalPage;
//当前页
protected $page;
//url
protected $url;
/**
* Paging constructor.
* @param $totalCount:数据总数
* @param $number:每页显示数
*/
public function __construct($totalCount, $number)
{
$this->totalCount = $totalCount;
$this->number = $number;
$this->totalPage = $this->getTotalPage();
$this->page = $this->getPage();
$this->url = $this->getUrl();
}
protected function getTotalPage()
{
$totalPage = ceil($this->totalCount / $this->number);
return $totalPage;
}
protected function getPage()
{
if (empty($_GET['page'])) {
$page = 1;
} elseif ($_GET['page'] > $this->totalPage) {
$page = $this->totalPage;
} elseif ($_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'];
//url
$flawUrl = $scheme.'://'.$host.':'.$port;
//去除uri[query]中的page
$uriArray = parse_url($uri);
$path = $uriArray['path'];
$query = $uriArray['query'];
parse_str($query, $array);
if (empty($array['page'])) {
$url = $flawUrl.$path;
} else {
unset($array['page']);
$query = http_build_query($array);
if (empty($query)) {
$url = $flawUrl.$path;
} else {
$url = $flawUrl.$path.'?'.$query;
}
}
return $url;
}
public function first()
{
$str = 'page=1';
return $this->setUrl($str);
}
public function prev()
{
$page = $this->page - 1;
if ($page < 1) {
$str = 'page=1';
} else {
$str = 'page='.$page;
}
return $this->setUrl($str);
}
public function next()
{
$page = $this->page + 1;
if ($page > $this->totalPage) {
$str = 'page='.$this->totalPage;
} else {
$str = 'page='.$page;
}
return $this->setUrl($str);
}
public function end()
{
$str = 'page='.$this->totalPage;
return $this->setUrl($str);
}
public function allMessage()
{
return [
'first'=>$this->first(),
'prev'=>$this->prev(),
'next'=>$this->next(),
'end'=>$this->end()
];
}
protected function setUrl($str)
{
if (strstr($this->url, '?')) {
return $this->url.'&'.$str;
} else {
return $this->url.'?'.$str;
}
}
public function limit()
{
$offset = ($this->page - 1) * $this->number;
return $offset.','.$this->number;
}
}