• wordpress CMS主题:ssmay主题wordpress CMS主题:ssmay主题
  • 首页 > PHP开发 > 对前一篇PHP分页类的进一步完善

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

    作者: 分类:PHP开发 点击: 1,703 次
    wordpress CMS主题:ssmay主题

      在前一篇分享一个简单实用的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分页类就比较完善了,在使用上就更加完美了。如果大家喜欢,就拿去用用看吧。呵呵



      QQ二维码

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

    上一篇:
    下一篇:
    wordpress CMS主题:ssmay主题

    或许你会感兴趣的文章:

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    This site uses Akismet to reduce spam. Learn how your comment data is processed.