php分页函数

admin 2019-05-28 764 阅读 1评论
/**
* @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页


发表评论

快捷回复: 表情:
Addoil Applause Badlaugh Bomb Coffee Fabulous Facepalm Feces Frown Heyha Insidious KeepFighting NoProb PigHead Shocked Sinistersmile Slap Social Sweat Tolaugh Watermelon Witty Wow Yeah Yellowdog
提交
评论列表 (有 1 条评论, 764人围观)