找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 61|回复: 0
打印 上一主题 下一主题

两款万能的php分页类

[复制链接]

2560

主题

2560

帖子

7622

积分

论坛元老

Rank: 8Rank: 8

积分
7622
跳转到指定楼层
楼主
发表于 2018-2-14 05:41:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

            本文为大家分享个超级好用、万能的php分页类,具体的实现代码如下
第一款php分页类
init(1000, 20);
* $page->setNotActiveTemplate(' {a} ');
* $page->setActiveTemplate('{a}');
* echo $page->show();
*
*
* @author 风居住的地方
*/
class Page {
  /**
   * 总条数
   */
  private $total;
  /**
   * 每页大小
   */
  private $pageSize;
  /**
   * 总页数
   */
  private $pageNum;
  /**
   * 当前页
   */
  private $page;
  /**
   * 地址
   */
  private $uri;
  /**
   * 分页变量
   */
  private $pageParam;
  /**
   * LIMIT XX,XX
   */
  private $limit;
  /**
   * 数字分页显示
   */
  private $listnum = 8;
  /**
   * 分页显示模板
   * 可用变量参数
   * {total}   总数据条数
   * {pagesize}  每页显示条数
   * {start}   本页开始条数
   * {end}    本页结束条数
   * {pagenum}  共有多少页
   * {frist}   首页
   * {pre}    上一页
   * {next}    下一页
   * {last}    尾页
   * {list}    数字分页
   * {goto}    跳转按钮
   */
  private $template = '共有{total}条数据每页显示{pagesize}条数据,本页{start}-{end}条数据共有{pagenum}页{frist}{pre}{list}{next}{last}{goto}';
  /**
   * 当前选中的分页链接模板
   */
  private $activeTemplate = '{text}';
  /**
   * 未选中的分页链接模板
   */
  private $notActiveTemplate = '
  • {text}';
      /**
       * 显示文本设置
       */
      private $config = array('frist' => '首页', 'pre' => '上一页', 'next' => '下一页', 'last' => '尾页');
      /**
       * 初始化
       * @param type $total    总条数
       * @param type $pageSize  每页大小
       * @param type $param    url附加参数
       * @param type $pageParam  分页变量
       */
      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();
      }
       
      /**
       * 设置分页模板
       * @param type $template  模板配置
       */
      public function setTemplate($template) {
        $this->template = $template;
      }
       
      /**
       * 设置选中分页模板
       * @param type $activeTemplate   模板配置
       */
      public function setActiveTemplate($activeTemplate) {
        $this->activeTemplate = $activeTemplate;
      }

      /**
       * 设置未选中分页模板
       * @param type $notActiveTemplate  模板配置
       */
      public function setNotActiveTemplate($notActiveTemplate) {
        $this->notActiveTemplate = $notActiveTemplate;
      }

      /**
       * 返回分页
       * @return type
       */
      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);
      }
       
      /**
       * 获取limit起始数
       * @return type
       */
      public function getOffset() {
        return ($this->page - 1) * $this->pageSize;
      }
       
      /**
       * 设置LIMIT
       * @return type
       */
      private function setlimit() {
        return "limit " . ($this->page - 1) * $this->pageSize . ",{$this->pageSize}";
      }

      /**
       * 获取limit
       * @param type $args
       * @return type
       */
      public function __get($args) {
        if ($args == "limit") {
          return $this->limit;
        } else {
          return null;
        }
      }

      /**
       * 初始化当前页
       * @return int
       */
      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;
      }

      /**
       * 初始化url
       * @param type $param
       * @return string
       */
      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;
        }
      }

      /**
       * 本页开始条数
       * @return int
       */
      private function star() {
        if ($this->total == 0) {
          return 0;
        } else {
          return ($this->page - 1) * $this->pageSize + 1;
        }
      }

      /**
       * 本页结束条数
       * @return type
       */
      private function end() {
        return min($this->page * $this->pageSize, $this->total);
      }

      /**
       * 设置当前页大小
       * @return type
       */
      private function setPageSize() {
        return $this->end() - $this->star() + 1;
      }
       
      /**
       * 首页
       * @return type
       */
      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;
      }

      /**
       * 上一页
       * @return type
       */
      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;
      }

      /**
       * 分页数字列表
       * @return type
       */
      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 page + $i;
          if ($page pageNum) {
            $linkpage .= $this->replace("{$this->uri}&page={$page}", $page, false);
          } else {
            break;
          }
        }
        return $linkpage;
      }

      /**
       * 下一页
       * @return type
       */
      private function next() {
        $html = '';
        if ($this->page 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;
      }

      /**
       * 最后一页
       * @return type
       */
      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;
      }

      /**
       * 跳转按钮
       * @return string
       */
      private function gopage() {
        $html = '';
        $html.=' page . '" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>' . $this->pageNum . ')?' . $this->pageNum . ':this.value;location=\'' . $this->uri . '&page=\'+page+\'\'}" style="width:25px;"/>' . $this->pageNum . ')?' . $this->pageNum . ':this.previousSibling.value;location=\'' . $this->uri . '&page=\'+page+\'\'" value="GO"/>';
        return $html;
      }

      /**
       * 模板替换
       * @param type $replace   替换内容
       * @param type $result   条件
       * @return type
       */
      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 ) 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 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 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 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  $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 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;
      }
      
       
      /**
       * 带上一页,省略号的分页
       * @param int $total    记录总条数
       * @param int $act_page    当前页码
       * @param string $url    url
       * @param int $maxpageicon  最大显示页码数
       * @param int $style    上一页,下一页显示样式
       * @param string $param    url参数
       */
      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 = '';
            break;
          case 3:
            $name_before = '>';
            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  ($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
    以上就是为大家分享的两款php分页类,希望对大家的学习有所帮助。
                
                
    您可能感兴趣的文章:
  • 整合了前面的PHP数据库连接类~~做成一个分页类!
  • mysql+php分页类(已测)
  • PHP通用分页类page.php[仿google分页]
  • PHP 分页类代码(简单好用型)
  • 精美漂亮的php分页类代码
  • 一个简单且很好用的php分页类
  • ThinkPHP分页类使用详解
  • ThinkPHP使用心得分享-分页类Page的用法
  • 高效mongodb的php分页类(不使用skip)
  • 完美的php分页类
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端