php分页函数
/**
* @param int $table 数据总数
* @param int $pageSize 每页显示几条数据
* @param int $showPage 显示几个页码数字 例如显示5个:12345...下一页 尾页 当前1页 共10页
* @return string
* 分页函数
*/
function pageBar($table,$pageSize,$showPage=5){
//当前页完整url
$url = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
//解析url
$pat = parse_url($url);
//重组url
$urls = $pat['scheme'].'://'.$pat['host'].$pat['path'];
$page = (!empty($_GET['page']))?$_GET['page']:1;
$total = $table;
$totalPage = ceil($total / $pageSize); //获取总页数
$pageOffset = ($showPage - 1) / 2; //页码偏移量
$pageBanner = "<div class='minicms-page'>";
$pageSelf = $_SERVER['PHP_SELF'];
$start = 1; //开始页码
$end = $totalPage; //结束页码
if($page > 1){
$pageBanner .= "<a href=".handlerUrl($urls,array_merge($_GET,['page'=>1,'limit'=>$pageSize]))."> 首页 </a>";
$pageBanner .= "<a href=".handlerUrl($urls,array_merge($_GET,['page'=>$page-1,'limit'=>$pageSize]))."> 上一页 </a>";
}
if($totalPage > $showPage){ //当总页数大于显示页数时
if($page > $pageOffset + 1){ //当当前页大于页码偏移量+1时,也就是当页码为4时 开始页码1替换为...
$pageBanner .= "...";
}
if($page > $pageOffset){ //当当前页大于页码偏移量时 开始页码变为当前页-偏移页码
$start = $page - $pageOffset;
$end = $totalPage > $page + $pageOffset ? $page + $pageOffset : $totalPage;
//如果当前页数+偏移量大于总页数 那么$end为总页数
}else{
$start = 1;
$end = $totalPage > $showPage ? $showPage : $totalPage;
}
if($page + $pageOffset > $totalPage){
$start = $start - ($page + $pageOffset - $end);
}
}
for($i = $start ; $i <= $end ; $i++){ //循环出页码
if($i == $page){
$pageBanner .= "<span class='minincms-curr'> ".$i." </span>";
}else{
$pageBanner .= "<a href=".handlerUrl($urls,array_merge($_GET,['page'=>$i,'limit'=>$pageSize])).">" .$i." </a>";
}
}
if($totalPage > $showPage && $totalPage > $page + $pageOffset){ //当总页数大于页码显示页数时 且总页数大于当前页+偏移量
$pageBanner .= "...";
}
if($page < $totalPage){
$pageBanner .= "<a href=".handlerUrl($urls,array_merge($_GET,['page'=>$page+1,'limit'=>$pageSize]))."> 下一页 </a>";
$pageBanner .= "<a href=".handlerUrl($urls,array_merge($_GET,['page'=>$totalPage,'limit'=>$pageSize]))."> 尾页 </a>";
}
$pageBanner .= " 当前".$page."页 ";
$pageBanner .= " 共".$totalPage."页 </div>";
return $pageBanner;
}
/**
* @param string $url 地址
* @param array $params 参数
* @return string
* 重组 url
*/
function handlerUrl($url, array $params): string
{
if (!$params) {
return $url;
}
$query = http_build_query($params);
if (strpos($url, '?')) {
$url = rtrim($url, '&') . '&' . $query;
} else {
$url = $url . '?' . $query;
}
return $url;
}
效果如下
首页 上一页 1 2 3 4 5 ... 下一页 尾页 当前3页 共6页
发表评论