wordpress CMS主题 微信
Home > PHP开发 > 对前一篇PHP分页类的进一步完善

对前一篇PHP分页类的进一步完善

高时银博客 PHP开发 点击: 117 次 0 1
  • 标签:
  • 在前一篇分享一个简单实用的PHP列表分页类里,我们介绍了一个PHP列表分页类,实现了一个简单而实用的PHP分页。但美中不足的是:如果我们的网站的列表页有成千上万个分页,那在页面就会出面成千上万个分页的页码吗(如下图)?这样,虽然分页功能实现了,但是页面上确实不美观。

    对前一篇PHP分页类的进一步完善

    能不能只让页面上只显示10个分页页码按钮,而在进入不同的分页页面时,这10个分页页码会相应地发生变化,如:在第1页到第5页时,就显示 【1 2 3 4 5 6 7 8 9 10】这10个页码,在第6页时,就显示【2 3 4 5 6 7 8 9 10 11】,在第7页时,就显示【3 4 5 6 7 8 9 10 11 12】这几个页码,以此类推,效果如下图。

    对前一篇PHP分页类的进一步完善

    其实实现起来也不难,我们只需在这个分页类的代码中加入几个参数和一些判断,如下:

    //设置每页显示的页码的数量
    $maxPageCount = ($maxPageCount>$num) ? $num : $maxPageCount; //如果限制页码数 > 总页数
    $buffCount=5; //初始限制数
    $startPage=1; //开始的页码

    if($page< $buffCount){ //如果页码 < 5 时,
    $startPage=1; //for循环起始页为1
    $endPage=$startPage+$maxPageCount-1; //for循环结束页为 (起始页 + 每页显示页码数 -1)
    }else if($page>=$buffCount and $page<($total-$maxPageCount) ){
    //如果页码 > 5 并且 页码 < (总页数 - 每页显示页码数)
    $startPage=$page-$buffCount+1; //for循环起始页为 (当前页 - 初始限制数 + 1)
    $endPage=$startPage+$maxPageCount-1; //for循环结束页为 (起始页 + 每页显示页码数 -1)
    }else{ //否则
    $startPage=$total-$maxPageCount; //for循环起始页为 (总页数 - 每页显示页码数)
    $endPage=$startPage+$maxPageCount; //for循环结束页为 (起始页 + 每页显示页码数)
    }

    这里我们加了4个参数:$maxPageCount每页页码数量,$buffCount初始限制数,$startPage循环开始的页码,$endPage循环结束的页码。然后进行判断。for循环语句中要用到$startPage和$endPage,代码如下:

    for($i=$startPage; $i<=$endPage; $i++){
    if($i==$page){ //如果是当前页面,就添加class='cur'
    $pages .= '<span class="page_now">'.$i.'</span> ';
    }else{
    $pages .= '<a href="'.$url2.'page='.$i.'" >'.$i.'</a> ';
    }
    }

    全部代码如下:

    class PageTool{

    /*显示分页
    $total 总条数(文章总条数)
    $perpage 每页显示多少条
    $page 当前页面的页码
    $maxPageCount 显示分页页码数量,如:有100个分页,我只想让页面显示10个分页按钮
    例: index.php?cat_id=3&act=del&page=1
    */
    public function show($total,$perpage=10,$page=1,$maxPageCount=10){

    //获取页面URL前置
    $url = $_SERVER['REQUEST_URI'];
    $url_arr = parse_url($url);

    //获取URL后置参数,分解成数组
    $query = array();
    if(isset($url_arr['query'])){
    parse_str($url_arr['query'],$query);
    }

    //销毁 $query['page'],因为page会变化,
    //而 分类ID号 在分页页面 是不会变的。所以作为固定前置
    if(isset($query['page'])){
    unset($query['page']);
    }

    //组合后置参数为字符串
    $afterparam = !empty($query) ? http_build_query($query).'&' : '';

    //组合 固定URL前置
    $url2 = $url_arr['path'].'?'.$afterparam;

    //显示分页
    $num = ceil($total/$perpage); //总页数

    //设置每页显示的页码的数量
    $maxPageCount = ($maxPageCount>$num) ? $num : $maxPageCount; //如果限制页码数 > 总页数
    $buffCount=5; //初始限制数
    $startPage=1; //开始的页码
    if($page< $buffCount){ //如果页码 < 5 时,
    $startPage=1; //for循环起始页为1
    $endPage=$startPage+$maxPageCount-1; //for循环结束页为 (起始页 + 每页显示页码数 -1)
    }else if($page>=$buffCount and $page<($total-$maxPageCount) ){
    //如果页码 > 5 并且 页码 < (总页数 - 每页显示页码数)
    $startPage=$page-$buffCount+1; //for循环起始页为 (当前页 - 初始限制数 + 1)
    $endPage=$startPage+$maxPageCount-1; //for循环结束页为 (起始页 + 每页显示页码数 -1)
    }else{ //否则
    $startPage=$total-$maxPageCount; //for循环起始页为 (总页数 - 每页显示页码数)
    $endPage=$startPage+$maxPageCount; //for循环结束页为 (起始页 + 每页显示页码数)
    }

    //把分页 页码按钮放到 字符串中
    $pages = '<span style="margin-right:10px;" class="f_l f6">总计 <b>'.$total.'</b> 个记录<b>'.$num.'</b>页</span>';
    //如果当前页面不是首页,就显示首页链接
    if( $page > 1){
    $pages .= '<a href="'.$url2.'page=1" >首页</a> <a href="'.$url2.'page='.($page-1).'" >上一页</a> ';
    }
    //for($i=1; $i<=$num; $i++){
    for($i=$startPage; $i<=$endPage; $i++){
    if($i==$page){ //如果是当前页面,就添加class='cur'
    $pages .= '<span class="page_now">'.$i.'</span> ';
    }else{
    $pages .= '<a href="'.$url2.'page='.$i.'" >'.$i.'</a> ';
    }

    }
    //如果当前页面不是尾页,就显示尾页链接
    if( $page < $num){
    $pages .= '<a href="'.$url2.'page='.($page+1).'" >下一页</a> <a href="'.$url2.'page='.$num.'" >尾页</a>';
    }
    return $pages;
    }

    }

    好了,这个PHP分页类就比较完善了,在使用上就更加完美了。如果大家喜欢,就拿去用用看吧。呵呵


    文章作者:高时银博客
    本文地址:http://wanlimm.com/77201707225476.html
    版权所有 © 转载时必须以链接形式注明作者和原始出处!

    目前还没有评论。赶快来坐沙发吧。

    发表评论