当前位置:首页 > CMS教程 > Thinkphp > 列表

thinkPHP5.1框架使用SemanticUI实现分页功能示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-09 09:52:16 浏览: 评论:0 

这篇文章主要介绍了thinkPHP5.1框架使用SemanticUI实现分页功能,结合实例形式分析了SemanticUI扩展插件的定义及使用分页相关操作技巧,需要的朋友可以参考下。

本文实例讲述了thinkPHP5.1框架使用SemanticUI实现分页功能,分享给大家供大家参考,具体如下:

1、config目录下新建paginate.php,下面是文件的内容

  1. <?php 
  2. //分页配置 
  3. return 
  4.   [ 
  5.     'type' => 'Semantic'
  6.     'var_page' => 'page'
  7.   ]; 

2、thinkphp\library\think\paginator\driver\下新建Semantic.php,下面是文件的内容

  1. <?php 
  2. /** 
  3.  * Created by alic(AlicFeng) on 17-6-15 下午9:17 from PhpStorm. 
  4.  * Email is alic@samego.com 
  5.  */ 
  6. namespace think\paginator\driver; 
  7. use think\Paginator; 
  8. class Semantic extends Paginator 
  9.   private static $previousButtonHtml = '<i class="icon left arrow"></i>'
  10.   private static $nextButtonHtml = '<i class="icon right arrow"></i>'
  11.   /** 
  12.    * 上一页按钮 
  13.    * @return string 
  14.    */ 
  15.   protected function getPreviousButton() { 
  16.     if ($this->currentPage() <= 1) { 
  17.       return $this->getDisabledTextWrapper(Semantic::$previousButtonHtml); 
  18.     } 
  19.     $url = $this->url( 
  20.       $this->currentPage() - 1 
  21.     ); 
  22.     return $this->getPageLinkWrapper($url, Semantic::$previousButtonHtml); 
  23.   } 
  24.   /** 
  25.    * 下一页按钮 
  26.    * @return string 
  27.    */ 
  28.   protected function getNextButton() { 
  29.     if (!$this->hasMore) { 
  30.       return $this->getDisabledTextWrapper(Semantic::$nextButtonHtml); 
  31.     } 
  32.     $url = $this->url($this->currentPage() + 1); 
  33.     return $this->getPageLinkWrapper($url, Semantic::$nextButtonHtml); 
  34.   } 
  35.   /** 
  36.    * 页码按钮 
  37.    * @return string 
  38.    */ 
  39.   protected function getLinks() { 
  40.     $block = [ 
  41.       'first' => null, 
  42.       'slider' => null, 
  43.       'last'  => null 
  44.     ]; 
  45.     $side  = 3; 
  46.     $window = $side * 2; 
  47.     if ($this->lastPage < $window + 6) { 
  48.       $block['first'] = $this->getUrlRange(1, $this->lastPage); 
  49.     } elseif ($this->currentPage <= $window) { 
  50.       $block['first'] = $this->getUrlRange(1, $window + 2); 
  51.       $block['last'] = $this->getUrlRange($this->lastPage - 1, $this->lastPage); 
  52.     } elseif ($this->currentPage > ($this->lastPage - $window)) { 
  53.       $block['first'] = $this->getUrlRange(1, 2); 
  54.       $block['last'] = $this->getUrlRange($this->lastPage - ($window + 2), $this->lastPage); 
  55.     } else { 
  56.       $block['first'] = $this->getUrlRange(1, 2); 
  57.       $block['slider'] = $this->getUrlRange($this->currentPage - $side$this->currentPage + $side); 
  58.       $block['last']  = $this->getUrlRange($this->lastPage - 1, $this->lastPage); 
  59.     } 
  60.     $html = ''
  61.     if (is_array($block['first'])) { 
  62.       $html .= $this->getUrlLinks($block['first']); 
  63.     } 
  64.     if (is_array($block['slider'])) { 
  65.       $html .= $this->getDots(); 
  66.       $html .= $this->getUrlLinks($block['slider']); 
  67.     } 
  68.     if (is_array($block['last'])) { 
  69.       $html .= $this->getDots(); 
  70.       $html .= $this->getUrlLinks($block['last']); 
  71.     } 
  72.     return $html
  73.   } 
  74.   /** 
  75.    * 渲染分页html 
  76.    * @return mixed 
  77.    */ 
  78.   public function render() { 
  79.     if ($this->hasPages()) { 
  80.       if ($this->simple){ 
  81.         return sprintf( 
  82.           '<div style="text-align: center"><div class="ui pagination menu">%s %s</div></div>'
  83.           $this->getPreviousButton(), 
  84.           $this->getNextButton() 
  85.         ); 
  86.       }else
  87.         return sprintf( 
  88.           '<div style="text-align: center"><div class="ui pagination menu">%s %s %s</div></div>'
  89.           $this->getPreviousButton(), 
  90.           $this->getLinks(), 
  91.           $this->getNextButton() 
  92.         ); 
  93.       } 
  94.     } 
  95.     return null; 
  96.   } 
  97.   /** 
  98.    * 生成一个可点击的按钮 
  99.    * 
  100.    * @param string $url 
  101.    * @param int $page 
  102.    * @return string 
  103.    */ 
  104.   protected function getAvailablePageWrapper($url$page) { 
  105.     return '<a href="' . htmlentities($url) . '" rel="external nofollow" class="item">' . $page . '</a>'
  106.   } 
  107.   /** 
  108.    * 生成一个禁用的按钮 
  109.    * 
  110.    * @param string $text 
  111.    * @return string 
  112.    */ 
  113.   protected function getDisabledTextWrapper($text) { 
  114.     return '<a class="disabled item">' . $text . '</a>'
  115.   } 
  116.   /** 
  117.    * 生成一个激活的按钮 
  118.    * 
  119.    * @param string $text 
  120.    * @return string 
  121.    */ 
  122.   protected function getActivePageWrapper($text) { 
  123.     return '<a class="active item">' . $text . '</a>'
  124.   } 
  125.   /** 
  126.    * 生成省略号按钮 
  127.    * 
  128.    * @return string 
  129.    */ 
  130.   protected function getDots() { 
  131.     return $this->getDisabledTextWrapper('...'); 
  132.   } 
  133.   /** 
  134.    * 批量生成页码按钮. 
  135.    * 
  136.    * @param array $urls 
  137.    * @return string 
  138.    */ 
  139.   protected function getUrlLinks(array $urls) { 
  140.     $html = ''
  141.     foreach ($urls as $page => $url) { 
  142.       $html .= $this->getPageLinkWrapper($url$page); 
  143.     } 
  144.     return $html
  145.   } 
  146.   /** 
  147.    * 生成普通页码按钮 
  148.    * 
  149.    * @param string $url 
  150.    * @param int $page 
  151.    * @return string 
  152.    */ 
  153.   protected function getPageLinkWrapper($url$page) { 
  154.     if ($page == $this->currentPage()) { 
  155.       return $this->getActivePageWrapper($page); 
  156.     } 
  157.     return $this->getAvailablePageWrapper($url$page); 
  158.   } 

3、搞定

Tags: thinkPHP5 1 SemanticUI

分享到: