php分页函数

admin 2019-05-28 2304 阅读 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页


喜欢就支持以下吧
点赞 0

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 1 条评论, 2304人围观)

最近发表

热门文章

最新留言

热门推荐

标签列表