栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

两款万能的php分页类

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

两款万能的php分页类

本文为大家分享个超级好用、万能的php分页类,具体的实现代码如下

第一款php分页类

{frist}{pre}{list}{next}{last}{goto}';
  
  private $activeTemplate = '
  • {text}
  • '; private $notActiveTemplate = '
  • {text}
  • '; private $config = array('frist' => '首页', 'pre' => '上一页', 'next' => '下一页', 'last' => '尾页'); public function init($total, $pageSize, $param = '', $pageParam = 'page') { $this->total = intval($total); $this->pageSize = intval($pageSize); $this->pageParam = $pageParam; $this->uri = $this->geturi($param); $this->pageNum = ceil($this->total / $this->pageSize); $this->page = $this->setPage(); $this->limit = $this->setlimit(); } public function setTemplate($template) { $this->template = $template; } public function setActiveTemplate($activeTemplate) { $this->activeTemplate = $activeTemplate; } public function setNotActiveTemplate($notActiveTemplate) { $this->notActiveTemplate = $notActiveTemplate; } public function show() { return str_ireplace(array( '{total}', '{pagesize}', '{start}', '{end}', '{pagenum}', '{frist}', '{pre}', '{next}', '{last}', '{list}', '{goto}', ), array( $this->total, $this->setPageSize(), $this->star(), $this->end(), $this->pageNum, $this->frist(), $this->prev(), $this->next(), $this->last(), $this->pagelist(), $this->gopage(), ), $this->template); } public function getOffset() { return ($this->page - 1) * $this->pageSize; } private function setlimit() { return "limit " . ($this->page - 1) * $this->pageSize . ",{$this->pageSize}"; } public function __get($args) { if ($args == "limit") { return $this->limit; } else { return null; } } private function setPage() { if (!empty($_GET[$this->pageParam])) { if ($_GET[$this->pageParam] > 0) { if ($_GET[$this->pageParam] > $this->pageNum) return $this->pageNum; else return $_GET[$this->pageParam]; } } return 1; } private function geturi($param) { $url = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], "?") ? "" : "?") . $param; $parse = parse_url($url); if (isset($parse["query"])) { parse_str($parse["query"], $params); unset($params["page"]); $url = $parse["path"] . "?" . http_build_query($params); return $url; } else { return $url; } } private function star() { if ($this->total == 0) { return 0; } else { return ($this->page - 1) * $this->pageSize + 1; } } private function end() { return min($this->page * $this->pageSize, $this->total); } private function setPageSize() { return $this->end() - $this->star() + 1; } private function frist() { $html = ''; if ($this->page == 1) { $html .= $this->replace("{$this->uri}&page=1", $this->config['frist'], true); } else { $html .= $this->replace("{$this->uri}&page=1", $this->config['frist'], false); } return $html; } private function prev() { $html = ''; if ($this->page > 1) { $html .= $this->replace($this->uri.'&page='.($this->page - 1), $this->config['pre'], false); } else { $html .= $this->replace($this->uri.'&page='.($this->page - 1), $this->config['pre'], true); } return $html; } private function pagelist() { $linkpage = ""; $lastlist = floor($this->listnum / 2); for ($i = $lastlist; $i >= 1; $i--) { $page = $this->page - $i; if ($page >= 1) { $linkpage .= $this->replace("{$this->uri}&page={$page}", $page, false); } else { continue; } } $linkpage .= $this->replace("{$this->uri}&page={$this->page}", $this->page, true); for ($i = 1; $i <= $lastlist; $i++) { $page = $this->page + $i; if ($page <= $this->pageNum) { $linkpage .= $this->replace("{$this->uri}&page={$page}", $page, false); } else { break; } } return $linkpage; } private function next() { $html = ''; if ($this->page < $this->pageNum) { $html .= $this->replace($this->uri.'&page='.($this->page + 1), $this->config['next'], false); } else { $html .= $this->replace($this->uri.'&page='.($this->page + 1), $this->config['next'], true); } return $html; } private function last() { $html = ''; if ($this->page == $this->pageNum) { $html .= $this->replace($this->uri.'&page='.($this->pageNum), $this->config['last'], true); } else { $html .= $this->replace($this->uri.'&page='.($this->pageNum), $this->config['last'], false); } return $html; } private function gopage() { $html = ''; $html.=' '; return $html; } private function replace($url, $text, $result = true) { $template = ($result ? $this->activeTemplate : $this->notActiveTemplate); $html = str_replace('{url}', $url, $template); $html = str_replace('{text}', $text, $html); return $html; } }

    第二款php分页类

    page_num = ceil( $total / $this->length );
        return $this->page_num;
      }
    
      function Calculation_Min_Max( $act_page = 1 )
      {
        // 定义左右偏移量
        $py_left = 0;
        $py_right = 0;
        // 定义左右边界
        $bj_left = 0;
        $bj_right = 0;
        // 定义滚动区间边界
        $gd_left = 0;
        $gd_right = 0;
        // 判断是否需要分组
        if ( ( $this->page_num - $this->page_max ) <= 0 )
        {
          // 不需要分组
          $bj_left = 1;
          $bj_right = $this->page_num;
        }
        else
        {
          // 要进行分组
          // 判断容量的奇偶
          $tmp = $this->page_max % 2;
          if ( $tmp === 1 )
          {
     // 奇数
     $py_left = $py_right = ( $this->page_max - 1 ) / 2;
          }
          else
          {
     // 偶数
     $py_left = $this->page_max / 2 - 1;
     $py_right = $this->page_max / 2;
          }
          // 计算滚动区间
          $gd_left = 1 + $py_left;
          $gd_right = $this->page_num - $py_right;
          // 判断当前页是否落入了滚动区间
          if ( $act_page >= $gd_left && $act_page <= $gd_right )
          {
     // 区间内
     $bj_left = $act_page - $py_left;
     $bj_right = $act_page + $py_right;
          }
          else
          {
     // 区间外
     if ( ( $act_page - $py_left ) <= 1 )
     {
       // 左侧固定区间
       $bj_left = 1;
       $bj_right = $this->page_max;
     }
     else
     {
       $bj_left = $this->page_num - $this->page_max + 1;
       $bj_right = $this->page_num;
     }
          }
        }
    
        $res = array();
        $res['min'] = $bj_left;
        $res['max'] = $bj_right;
    
        return $res;
        
      }
      // 主方法
      function make_page( $total, $act_page, $url, $param )
      {
        $page_num = $this->Calculation_Page_Num( $total );
        $arr_min_max = $this->Calculation_Min_Max( $act_page );
        
        if (!eregi("([?|&]$param=)", $url)) {
          $url = strpos($url,"?")===false?$url."?":$url."&";
          $url = $url."$param=0";
        }
    
        if ( $act_page > $page_num )
        {
          $act_page = $page_num;
        }
        // 用正则把url改成正规的
        $url = eregi_replace( $param . '=[0-9]+', $param . '=0', $url );
    
        $res = array();
        $d = 0;
        for( $i = $arr_min_max['min'];$i <= $arr_min_max['max'];$i++ )
        {
          if ( $i == $act_page )
          {
     $res[$d]['url'] = '';
     $res[$d]['name'] = $i;
     $res[$d]['no'] = $i;
          }
          else
          {
     $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url );
     $res[$d]['name'] = $i;
     $res[$d]['no'] = $i;
          }
          $d++;
        }
    
        if ( $this->isNextPage )
        {
          $res = $this->make_before_next_link( $res, $act_page, $url, $param );
        }
        if ( $this->isFirstPage )
        {
          $res = $this->make_first_end_link( $res, $act_page, $url, $param );
        }
        return $res;
      }
      //// 带总页数
      function make_page_with_total( $total, $act_page, $url, $param )
      {
        $page_num = $this->Calculation_Page_Num( $total );
        $arr_min_max = $this->Calculation_Min_Max( $act_page );
        
        if (!eregi("([?|&]$param=)", $url)) {
          $url = strpos($url,"?")===false?$url."?":$url."&";
          $url = $url."$param=0";
        }
    
        if ( $act_page > $page_num )
        {
          $act_page = $page_num;
        }
        // 用正则把url改成正规的
        $url = eregi_replace( $param . '=[0-9]+', $param . '=0', $url );
    
        $res = array();
        $d = 0;
        for( $i = $arr_min_max['min'];$i <= $arr_min_max['max'];$i++ )
        {
          if ( $i == $act_page )
          {
     $res[$d]['url'] = '';
     $res[$d]['name'] = $i;
     $res[$d]['no'] = $i;
          }
          else
          {
     $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url );
     $res[$d]['name'] = $i;
     $res[$d]['no'] = $i;
          }
          $d++;
        }
    
        if ( $this->isNextPage )
        {
          $res = $this->make_before_next_link( $res, $act_page, $url, $param );
        }
        if ( $this->isFirstPage )
        {
          $res = $this->make_first_end_link( $res, $act_page, $url, $param );
        }
        
        $total_num= ceil($total/$this->length);
        $result['total']=$total_num;
        $result['DATA']=$res;
        return $result;
      }
      
      // 附加上一页和下一页
      function make_before_next_link( $arr, $act, $url, $param )
      {
        $tmp = array();
    
        $before = $act - 1;
        $next = $act + 1;
    
        if ( $before < 1 )
        {
          $before = 1;
          $tmp[0]['url'] = '';
          $tmp[0]['name'] = "上一页";
          $tmp[0]['no'] = $before;
        }
        else
        {
          $tmp[0]['url'] = str_replace( $param . '=0', $param . '=' . $before, $url );
          $tmp[0]['name'] = "上一页";
          $tmp[0]['no'] = $before;
        }
    
        $counts = sizeof( $arr );
        $tmp_count = sizeof( $tmp );
        for( $i = 0;$i < $counts;$i++ )
        {
          $tmp[$tmp_count]['url'] = $arr[$i]['url'];
          $tmp[$tmp_count]['name'] = $arr[$i]['name'];
          $tmp[$tmp_count]['no'] = $arr[$i]['no'];
          $tmp_count++;
        }
    
        if ( $next > $this->page_num )
        {
          $next = $this->page_num;
          $tmp[$tmp_count]['url'] = '';
          $tmp[$tmp_count]['name'] = "下一页";
          $tmp[$tmp_count]['no'] = $next;
        }
        else
        {
          $tmp[$tmp_count]['url'] = str_replace( $param . '=0', $param . '=' . $next, $url );
          $tmp[$tmp_count]['name'] = "下一页";
          $tmp[$tmp_count]['no'] = $next;
        }
    
        return $tmp;
      }
      
      // 附加首页和尾页
      function make_first_end_link( $arr, $act, $url, $param )
      {
        $tmp = array();
    
        $before = 1;
        $next = $this->page_num;
    
        if ( $act == 1 )
        {
          $before = 1;
          $tmp[0]['url'] = '';
          $tmp[0]['name'] = "首页";
          $tmp[0]['no'] = $before;
        }
        else
        {
          $tmp[0]['url'] = str_replace( $param . '=0', $param . '=' . $before, $url );
          $tmp[0]['name'] = "首页";
          $tmp[0]['no'] = $before;
        }
    
        $counts = sizeof( $arr );
        $tmp_count = sizeof( $tmp );
        for( $i = 0;$i < $counts;$i++ )
        {
          $tmp[$tmp_count]['url'] = $arr[$i]['url'];
          $tmp[$tmp_count]['name'] = $arr[$i]['name'];
          $tmp[$tmp_count]['no'] = $arr[$i]['no'];
          $tmp_count++;
        }
    
        if ( $act == $this->page_num )
        {
          $tmp[$tmp_count]['url'] = '';
          $tmp[$tmp_count]['name'] = "尾页";
          $tmp[$tmp_count]['no'] = $next;
        }
        else
        {
          $tmp[$tmp_count]['url'] = str_replace( $param . '=0', $param . '=' . $next, $url );
          $tmp[$tmp_count]['name'] = "尾页";
          $tmp[$tmp_count]['no'] = $next;
        }
    
        return $tmp;
      }
      
       
      
      function make_page_with_points( $total,$act_page,$url,$maxpageicon,$style,$param )
      {
        $page_num = $this->Calculation_Page_Num( $total );    //总页数
        $arr_min_max = $this->Calculation_Min_Max( $act_page );    //最大页,最小页  
        if($total==0)
        {
    return "";
    
        }
        if( $act_page > $page_num )
        {
          $act_page = $page_num+1;
          $page_num = $page_num+1;
        }
        
        switch ($style){
          case 1:
     $name_before = '前一页';
     $name_next = '后一页';
     break;
          case 2:
     $name_before = '<';
     $name_next = '>';
     break;
          case 3:
     $name_before = '<<';
     $name_next = '>>';
     break;
          default:
     $name_before = '上一页';
     $name_next = '下一页';
        }
        
        if (!eregi("([?|&]$param=)", $url)) {
          $url = strpos($url,"?")===false?$url."?":$url."&";
          $url = $url."$param=0";
        }
     
        // 用正则把url改成正规的
        $url = eregi_replace( $param . '=[0-9]+', $param . '=0', $url );
        $res = array();
        $no_before = $act_page-1;
        $no_next = $act_page+1;
        
        //总页数如果小于等于初始化最大呈现页数
        if ($page_num<= ($maxpageicon + 1))
        {
          //如果当前页数是首页 上一页无效
          if ($act_page == 1)  
          {
     $res[0]['url'] = '';
     $res[0]['name'] = $name_before;
     $res[0]['no'] = $no_before;
          }
          else      //上一页有效
          {
     $res[0]['url'] = str_replace( $param . '=0', $param . '=' .($act_page - 1), $url );
     $res[0]['name'] = $name_before;
     $res[0]['no'] = $no_before; 
          }
          //循环添加页码
          $d = 1;
          for ($i = 1; $i <= $page_num; $i++)
          {
     if ($i != $act_page)
     {
       $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url );
       $res[$d]['name'] = $i;
       $res[$d]['no'] = $i;
     }
     else  //当前页,页码
     {
       $res[$d]['url'] = '';
       $res[$d]['name'] = $i;
       $res[$d]['no'] = $i;
       $res[$d]['attr'] = 'current';
     }
     $d++;
          }
          $last_d = count($res);
          //判断尾页
          if($act_page == $page_num)  //下一页无效
          {
     $res[$last_d]['url'] = '';
     $res[$last_d]['name'] = $name_next;
     $res[$last_d]['no'] = $no_next;    
          }
          else
          {
      $res[$last_d]['url'] = str_replace( $param . '=0', $param . '=' .($act_page + 1), $url );
     $res[$last_d]['name'] = $name_next;
     $res[$last_d]['no'] = $no_next;
          }
        }else if ($page_num > ($maxpageicon + 1))//如果总页数满足添加省略号
        { 
          if ($act_page <= $maxpageicon) //如果当前页小于等于初始化数目
          {
     //如果当前页数是首页 上一页无效
     if ($act_page == 1)  
     {
       $res[0]['url'] = '';
       $res[0]['name'] = $name_before;
       $res[0]['no'] = $no_before;
     }
     else      //上一页有效
     {
       $res[0]['url'] = str_replace( $param . '=0', $param . '=' .($act_page - 1), $url );
       $res[0]['name'] = $name_before;
       $res[0]['no'] = $no_before; 
     }
     //循环添加页码
     $d = 1;
     for ($i = 1; $i <= $maxpageicon; $i++)
     {
       if ($i != $act_page)
       {
         $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url );
         $res[$d]['name'] = $i;
         $res[$d]['no'] = $i;
       }
       else  //当前页,页码
       {
         $res[$d]['url'] = '';
         $res[$d]['name'] = $i;
         $res[$d]['no'] = $i;
         $res[$d]['attr'] = 'current';
       }
       $d++;
     }
     $last_d = count($res);
     //添加省略号
     $res[$last_d]['url'] = '';
     $res[$last_d]['name'] = '...';
     $res[$last_d]['no'] = '';
     //总页数
     $res[$last_d+1]['url'] = str_replace( $param . '=0', $param . '=' . $page_num, $url );
     $res[$last_d+1]['name'] = $page_num;
     $res[$last_d+1]['no'] = $page_num;
     //下一页
     $res[$last_d+1]['url'] = str_replace( $param . '=0', $param . '=' . ($act_page + 1), $url );
     $res[$last_d+1]['name'] = $name_next;
     $res[$last_d+1]['no'] = $no_next;     
          }else//如果当前页大于最大显示页面
          {
     if ($act_page > ($page_num - $maxpageicon))//满足后几页
     {
       //上一页
       $res[0]['url'] = str_replace( $param . '=0', $param . '=' .($act_page - 1), $url );
       $res[0]['name'] = $name_before;
       $res[0]['no'] = $no_before;
       //第一页
       $res[1]['url'] = str_replace( $param . '=0', $param . '=1', $url );
       $res[1]['name'] = 1;
       $res[1]['no'] = 1;  
       //省略号
       $res[2]['url'] = '';
       $res[2]['name'] = '...';
       $res[2]['no'] = ''; 
       $d = 3;
       for ($i = ($page_num - $maxpageicon + 1); $i <= $page_num; $i++)
       {
         if ($i != $act_page)
         {
    $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url );
    $res[$d]['name'] = $i;
    $res[$d]['no'] = $i;
         }
         else  //当前页,页码
         {
    $res[$d]['url'] = '';
    $res[$d]['name'] = $i;
    $res[$d]['no'] = $i;
    $res[$d]['attr'] = 'current';
         }
         $d++;
       }
       $last_d = count($res);
       //判断尾页
       if($act_page == $page_num)  //下一页无效
       {
          $res[$last_d]['url'] = '';
         $res[$last_d]['name'] = $name_next;
         $res[$last_d]['no'] = $no_next;    
       }
       else
       {
          $res[$last_d]['url'] = str_replace( $param . '=0', $param . '=' .($act_page + 1), $url );
         $res[$last_d]['name'] = $name_next;
         $res[$last_d]['no'] = $no_next;
       }
    
     }else//满足处在中间
     {
       //上一页
       $res[0]['url'] = str_replace( $param . '=0', $param . '=' .($act_page - 1), $url );
       $res[0]['name'] = $name_before;
       $res[0]['no'] = $no_before;
       //第一页
       $res[1]['url'] = str_replace( $param . '=0', $param . '=1', $url );
       $res[1]['name'] = 1;
       $res[1]['no'] = 1;  
       //省略号
       $res[2]['url'] = '';
       $res[2]['name'] = '...';
       $res[2]['no'] = ''; 
       for ($i = ($act_page - ($maxpageicon - 2) / 2); $i <= floor($act_page+($maxpageicon - 2) / 2); $i++)
       {
         $i = ceil($i);
         if ($i != $act_page)
         {
    $res[$d]['url'] = str_replace( $param . '=0', $param . '=' . $i, $url );
    $res[$d]['name'] = $i;
    $res[$d]['no'] = $i;
         }
         else  //当前页,页码
         {
    $res[$d]['url'] = '';
    $res[$d]['name'] = $i;
    $res[$d]['no'] = $i;
    $res[$d]['attr'] = 'current';
         }
         $d++;
       }
       $last_d = count($res);
       //加省略号
       $res[$last_d]['url'] = '';
       $res[$last_d]['name'] = '...';
       $res[$last_d]['no'] = '';
       //当前页
       $res[$last_d+1]['url'] = str_replace( $param . '=0', $param . '=' . $page_num, $url );
       $res[$last_d+1]['name'] = $page_num;
       $res[$last_d+1]['no'] = $page_num;    
       //下一页
       $res[$last_d+2]['url'] = str_replace( $param . '=0', $param . '=' . ($act_page + 1), $url );
       $res[$last_d+2]['name'] = $name_next;
       $res[$last_d+2]['no'] = $no_next;
       //exit;  
      }
          }
        }
        return $res;
      }
    }
    
    ?>
    

    以上就是为大家分享的两款php分页类,希望对大家的学习有所帮助。

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/44487.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号