Layui风格的PHP分页类,非常适用于ThinkPHP5

简介Layui风格的PHP分页类,非常适用于ThinkPHP5

个人非常喜欢Layui的分页,但奈何layui的官方只提供了组件,并没有纯css的版本,如果我们想使用php渲染分页再用layui的分页css是不行的,因此分享一个layui风格的php分页类供大家使用呀。

<?php
namespace think\paginator\driver;
use think\Paginator;
class Layui extends Paginator
{  
 
   //首页  
   protected function home() {  
       if ($this->currentPage() > 1) {  
           return "<a href='" . $this->url(1) . "' title='首页'>首页</a>";  
       } else {  
           return "<p>首页</p>";  
       }  
   }  
 
   //上一页  
   protected function prev() {  
       if ($this->currentPage() > 1) {  
           return "<a href='" . $this->url($this->currentPage - 1) . "' title='上一页'>上一页</a>";  
       } else {  
           return "<p>上一页</p>";  
       }  
   }  
 
   //下一页  
   protected function next() {  
       if ($this->hasMore) {  
           return "<a href='" . $this->url($this->currentPage + 1) . "' title='下一页'>下一页</a>";  
       } else {  
           return"<p>下一页</p>";  
       }  
   }  
 
   //尾页  
   protected function last() {  
       if ($this->hasMore) {  
           return "<a href='" . $this->url($this->lastPage) . "' title='尾页'>尾页</a>";  
       } else {  
           return "<p>尾页</p>";  
       }  
   }  
 
   //统计信息  
   protected function info(){  
       return "<p class='pageRemark'>共<b>" . $this->lastPage .  
           "</b>页<b>" . $this->total . "</b>条数据</p>";  
   }  
 
   /**
    * 页码按钮
    * @return string
    */  
   protected function getLinks()  
   {  
 
       $block = [  
           'first'  => null,  
           'slider' => null,  
           'last'   => null  
       ];  
 
       $side   = 3;  
       $window = $side * 2;  
 
       if ($this->lastPage < $window + 6) {  
           $block['first'] = $this->getUrlRange(1, $this->lastPage);  
       } elseif ($this->currentPage <= $window) {  
           $block['first'] = $this->getUrlRange(1, $window + 2);  
           $block['last']  = $this->getUrlRange($this->lastPage - 1, $this->lastPage);  
       } elseif ($this->currentPage > ($this->lastPage - $window)) {  
           $block['first'] = $this->getUrlRange(1, 2);  
           $block['last']  = $this->getUrlRange($this->lastPage - ($window + 2), $this->lastPage);  
       } else {  
           $block['first']  = $this->getUrlRange(1, 2);  
           $block['slider'] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side);  
           $block['last']   = $this->getUrlRange($this->lastPage - 1, $this->lastPage);  
       }  
 
       $html = '';  
 
       if (is_array($block['first'])) {  
           $html .= $this->getUrlLinks($block['first']);  
       }  
 
       if (is_array($block['slider'])) {  
           $html .= $this->getDots();  
           $html .= $this->getUrlLinks($block['slider']);  
       }  
 
       if (is_array($block['last'])) {  
           $html .= $this->getDots();  
           $html .= $this->getUrlLinks($block['last']);  
       }  
 
       return $html;  
   }  
 
   /**
    * 渲染分页html
    * @return mixed
    */  
   public function render()  
   {  
       if ($this->hasPages()) {  
           if ($this->simple) {  
               return sprintf(  
                   '%s<div class="pagination">%s %s %s</div>',  
                   $this->css(),  
                   $this->prev(),  
                   $this->getLinks(),  
                   $this->next()  
               );  
           } else {  
               return sprintf(  
                   '%s<div class="pagination">%s %s %s %s %s %s</div>',  
                   $this->css(),  
                   $this->home(),  
                   $this->prev(),  
                   $this->getLinks(),  
                   $this->next(),  
                   $this->last(),  
                   $this->info()  
               );  
           }  
       }  
   }  
 
   /**
    * 生成一个可点击的按钮
    *
    * @param  string $url
    * @param  int    $page
    * @return string
    */  
   protected function getAvailablePageWrapper($url, $page)  
   {  
       return '<a href="' . htmlentities($url) . '" title="第"'. $page .'"页" >' . $page . '</a>';  
   }  
 
   /**
    * 生成一个禁用的按钮
    *
    * @param  string $text
    * @return string
    */  
   protected function getDisabledTextWrapper($text)  
   {  
       return '<p class="pageEllipsis">' . $text . '</p>';  
   }  
 
   /**
    * 生成一个激活的按钮
    *
    * @param  string $text
    * @return string
    */  
   protected function getActivePageWrapper($text)  
   {  
       return '<a href="" class="cur">' . $text . '</a>';  
   }  
 
   /**
    * 生成省略号按钮
    *
    * @return string
    */  
   protected function getDots()  
   {  
       return $this->getDisabledTextWrapper('...');  
   }  
 
   /**
    * 批量生成页码按钮.
    *
    * @param  array $urls
    * @return string
    */  
   protected function getUrlLinks(array $urls)  
   {  
       $html = '';  
 
       foreach ($urls as $page => $url) {  
           $html .= $this->getPageLinkWrapper($url, $page);  
       }  
 
       return $html;  
   }  
 
   /**
    * 生成普通页码按钮
    *
    * @param  string $url
    * @param  int    $page
    * @return string
    */  
   protected function getPageLinkWrapper($url, $page)  
   {  
       if ($page == $this->currentPage()) {  
           return $this->getActivePageWrapper($page);  
       }  
 
       return $this->getAvailablePageWrapper($url, $page);  
   }  
 
   /**
    * 分页样式
    */  
   protected function css(){  
       return '  <style type="text/css">  
           .pagination p{  
               margin:0;  
               cursor:pointer  
           }  
           .pagination{  
               height:40px;  
               padding:20px 0px;  
           }  
           .pagination a{  
               display:block;  
               float:left;  
               margin-right:10px;  
               padding:2px 12px;  
               height:24px;  
               border:1px #cccccc solid;  
               background:#fff;  
               text-decoration:none;  
               color:#808080;  
               font-size:12px;  
               line-height:24px;  
           }  
           .pagination a:hover{  
               color:#FF5722;  
               background: white;  
               border:1px #FF5722 solid;  
           }  
           .pagination a.cur{  
               border:none;  
               background:#FF5722;  
               color:#fff;  
           }  
           .pagination p{  
               float:left;  
               padding:2px 12px;  
               font-size:12px;  
               height:24px;  
               line-height:24px;  
               color:#bbb;  
               border:1px #ccc solid;  
               background:#fcfcfc;  
               margin-right:8px;  
 
           }  
           .pagination p.pageRemark{  
               border-style:none;  
               background:none;  
               margin-right:0px;  
               padding:4px 0px;  
               color:#666;  
           }  
           .pagination p.pageRemark b{  
               color:red;  
           }  
           .pagination p.pageEllipsis{  
               border-style:none;  
               background:none;  
               padding:4px 0px;  
               color:#808080;  
           }  
           .dates li {font-size: 14px;margin:20px 0}  
           .dates li span{float:right}  
       </style>';  
   }  
}

Thinkphp5的使用方法:


  1. 将以上代码保存名为Layui的php文件中;

  2. 将保存好的Layui.php文件放入\thinkphp\library\think\paginator文件夹下;

  3. 在Thinkphp5的配置文件中加入以下代码即可。

// +----------------------------------------------------------------------
    // | 分页设置
    // +----------------------------------------------------------------------
    'paginate'               => [
        'type'      => 'layui',
        'var_page'  => 'page',
        'list_rows' => 15,
    ],

注意:如果你更新了Thinkphp核心文件包,请重新将Layui.php文件放入\thinkphp\library\think\paginator文件夹下



声明:
1,如果您发现本文件已经失效不能下载,请联系站长修正或留言!
2,本站提供的资源多数为百度网盘下载,对于大文件,你需要安装百度云客户端才能下载!
3,部分文件引用的官方或者非网盘类他站下载链接,你可能需要使用迅雷、BT等下载工具下载!
4,本站推荐的资源均经由站长检测或者个人发布,不包含恶意软件病毒代码等,如果你发现此类问题,请向站长举报!
5,本站仅提供文件的免费下载服务,如果你对代码程序软件的使用有任何疑惑,请留言。
6,本网站在文章内容仅供于学习参考使用,请勿作为商业通途使用,版权归原作者所有。如您对内容、版权等问题存在异议请与本站联系,我们会及时进行处理解决。

下一篇:

PHP/ThinkPHP5制作QQ第三方登录,无需官方SDK文件


上一篇:

tp5写分页内容会重置怎么办?


文章评论

Top