加入收藏 | 设为首页 | 会员中心 | 我要投稿 盐城站长网 (https://www.0515zz.cn/)- 运维、云管理、管理运维、智能数字人、AI硬件!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP实现可自定义样式的分页类

发布时间:2022-07-22 09:43:21 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP实现可自定义样式的分页类,可以自定义分页样式,感兴趣的小伙伴们可以参考一下。 本文实例为大家分享了PHP实现可自定义样式的分页类,供大家参考,具体内容如下 ?php //namespace Component; /** * 2016-3-27 * @author ankang */ cla
  这篇文章主要介绍了PHP实现可自定义样式的分页类,可以自定义分页样式,感兴趣的小伙伴们可以参考一下。
 
  本文实例为大家分享了PHP实现可自定义样式的分页类,供大家参考,具体内容如下
 
  <?php
     
  //namespace Component;
  /**
   * 2016-3-27
   * @author ankang
   */
  class Page {
   private $ShowPage;
   private $CountPage;
   private $Floorp;
   private $PageUrl;
   private $PageClass;
   private $CurClass;
     
   /**
   * @author ankang
   * @param number $CountNum  数据总数
   * @param string $PageUrl  跳转链接
   * @param string $PageClass  <a>标签 总体样式  
   * @param string $PageUrl  当前页样式
   * @param number $PageSize  每页显示的数据条数
   * @param number $ShowPage  每次显示的页数  
   */
   public function __construct($CountNum, $PageUrl = NULL, $PageClass = NULL,$CurClass = NULL, $PageSize = 20, $ShowPage = 5) {
   $this->ShowPage = $ShowPage;
   $this->CountPage  = ceil ( $CountNum / $PageSize );
   $this->Floorp  = floor ( $ShowPage / 2 ); // 偏移量  
   $this->PageClass  = is_null ( $PageClass ) ? '' : $PageClass;
   $this->CurClass = is_null ( $CurClass ) ? '' : $CurClass;
      
   // $ServerURL  = ( preg_match('/?/i', $_SERVER['REQUEST_URI']))?preg_replace('/&p=[0-9]+/i', "", $_SERVER['REQUEST_URI']) : $_SERVER['REQUEST_URI']."?";
   // if( substr($ButURL,0,2)=='//' ){
    // $ServerURL  = substr($ServerURL,1);
   // }
   // $url   = preg_replace('/p=[d]*/i', '', $ServerURL);
    $url   = '';
   //推荐自己传url,不传也可以打开上面的代码自动获取
   $this->PageUrl  = is_null ( $PageUrl ) ? $url : $PageUrl;
   }
     
   /**
   *
   * @param number $Page   
   * @param string $ShowToPage
   *  首页,上下页,尾页
   * @param string $Html 标签元素,li,p  
   * @return string
   */
   public function getPage($Page = 1, $ShowToPage = true, $Html = null) {
   $StartPage  = ($Page - $this->Floorp); // 开始页码
   $EndPage  = ($Page + $this->Floorp); // 结束页码
      
   if ($this->CountPage < $this->ShowPage) {
    $StartPage = 1;
    $EndPage = $this->CountPage;
   }
      
   if ($StartPage < 1) {
    $StartPage = 1;
    $EndPage = $this->ShowPage;
   }
      
   if ($EndPage > $this->CountPage) {
    $StartPage = $this->CountPage - $this->ShowPage + 1;
    $EndPage = $this->CountPage;
   }
      
   $PageHtml = '';
      
   if (! is_null ( $Html )) {
    if ($Html == 'li') {
    $Shtml = '<li>';
    $Ehtml = '</li>';
    } else {
    $Shtml = '<p>';
    $Ehtml = '</p>';
    }
   }
      
   if (true == $ShowToPage) {
    $PageHtml  .= "$Shtml<a href='{$this->PageUrl}p=1'>« 首页</a>$Ehtml";
    $PrveUrl   = $this->getPrve($Page);
    $PageHtml  .= "$Shtml<a href='{$PrveUrl}'>« 上一页</a>$Ehtml";
   }
      
   for($i = $StartPage; $i <= $EndPage; $i ++) {
    if ($Page == $i) {
    $PageHtml  .= "$Shtml<a href='{$this->PageUrl}p={$i}' class='{$this->CurClass}'>{$i}</a>$Ehtml";
    } else {
    $PageHtml  .= "$Shtml<a href='{$this->PageUrl}p={$i}' class='{$this->PageClass}'>{$i}</a>$Ehtml";
    }
   }
      
   if (true == $ShowToPage) {
    $NextUrl   = $this->getNext($Page);
    $PageHtml  .= "$Shtml<a href='{$NextUrl}'>下一页 »</a>$Ehtml";
    $PageHtml  .= "$Shtml<a href='{$this->PageUrl}p={$this->CountPage}' >尾页 »</a>$Ehtml";
   }
      
   return $PageHtml;
   }
     
   public function getPrve($Page){
   if ($Page != 1) {
    $Prve  = $Page - 1;
    $PrveUrl  = "{$this->PageUrl}p={$Prve}";
   } else {
    $PrveUrl  = "{$this->PageUrl}p=1";
   }
      
   return $PrveUrl;
   }
     
   public function getNext($Page){
   if ($Page != $this->CountPage) {
    $Next  = $Page + 1;
    $NextUrl  = "{$this->PageUrl}p={$Next}";
   } else {
    $NextUrl  = "{$this->PageUrl}p={$this->CountPage}";
   }
      
   return $NextUrl;
   }
     
     
     
  }
  再为大家分享一个主要用于新手学习php分页,代码简单实用,主要是注释很完整。
 
  1. Page.class.php
 
  <?php
  /**
   * 分页类
   *  
   * 调用方式:
   * $p=new Page(总页数,显示页数,当前页码,每页显示条数,[链接]);
   * print_r($p->getPages()); //生成一个页码数组(键为页码,值为链接)
   * echo $p->showPages(1); //生成一个页码样式(可添加自定义样式)
   *  
   * @author: Dzer <Email:358654744@qq.com Blog:Dzer.me>
   * @version: 2014-12-25 09:09:42
   * @Last Modified time: 2014-12-28 17:37:13
   */
     
  /*
  思路:
  给我一个 总页数,需要显示的页数,当前页,每页显示的条数,连接
  写一个方法 生成一个一维数组,键为页码 值为连接
  写一个方法 返回一个生成好样式的页码(并且可以根据自己需要添加样式)
  默认样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]
  */
  class Page{
   protected $count;  //总条数
   protected $showPages; //需要显示的页数
   protected $countPages; //总页数
   protected $currPage; //当前页
   protected $subPages; //每页显示条数
   protected $href;  //连接
   protected $page_arr=array(); //保存生成的页码 键页码 值为连接
     
   /**
    * __construct 构造函数(获取分页所需参数)
    * @param int $count  总条数
    * @param int $showPages 显示页数
    * @param int $currPage 当前页数
    * @param int $subPages 每页显示数量
    * @param string $href 连接(不设置则获取当前URL)
    */
   public function __construct($count,$showPages,$currPage,$subPages,$href=''){
    $this->count=$count;
    $this->showPages=$showPages;
    $this->currPage=$currPage;
    $this->subPages=$subPages;
       
    //如果链接没有设置则获取当前连接
    if(emptyempty($href)){
     $this->href=htmlentities($_SERVER['PHP_SELF']);  
    }else{
     $this->href=$href;
    }
    $this->construct_Pages();
   }
     
   /**
    * getPages 返回页码数组
    * @return array 一维数组 键为页码 值为链接
    */
   public function getPages(){
    return $this->page_arr;
   }
     
   /**
    * showPages 返回生成好的页码
    * @param int $style 样式
    * @return string  生成好的页码
    */
   public function showPages($style=1){
    $func='pageStyle'.$style;
    return $this->$func();
   }
     
   /**
    * pageStyle1 分页样式(可参照这个添加自定义样式 例如pageStyle2())
    * 样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]  
    * @return string  
    */
   protected function pageStyle1(){
    /* 构造普通模式的分页  
    共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]  
    */
    $pageStr='共'.$this->count.'条记录,每页显示'.$this->subPages.'条';
    $pageStr.='当前第'.$this->currPage.'/'.$this->countPages.'页 ';
     
    $_GET['page'] = 1;
    $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">首页</a>] </span>';
    //如果当前页不是第一页就显示上页
    if($this->currPage>1){
     $_GET['page'] = $this->currPage-1;
     $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">上页</a>] </span>';
    }
     
    foreach ($this->page_arr as $k => $v) {
     $_GET['page'] = $k;
     $pageStr.='<span>[<a href="'.$v.'">'.$k.'</a>] </span>';
    }
     
    //如果当前页小于总页数就显示下一页
    if($this->currPage<$this->countPages){
     $_GET['page'] = $this->currPage+1;
     $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">下页</a>] </span>';
    }
     
    $_GET['page'] = $this->countPages;
    $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'">尾页</a>] </span>';
     
    return $pageStr;
   } 

(编辑:盐城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读