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


Posted in PHP onAugust 03, 2019

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

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

<?php
//分页配置
return
  [
    'type' => 'Semantic',
    'var_page' => 'page',
  ];

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

<?php
/**
 * Created by alic(AlicFeng) on 17-6-15 下午9:17 from PhpStorm.
 * Email is alic@samego.com
 */
namespace think\paginator\driver;
use think\Paginator;
class Semantic extends Paginator
{
  private static $previousButtonHtml = '<i class="icon left arrow"></i>';
  private static $nextButtonHtml = '<i class="icon right arrow"></i>';
  /**
   * 上一页按钮
   * @return string
   */
  protected function getPreviousButton() {
    if ($this->currentPage() <= 1) {
      return $this->getDisabledTextWrapper(Semantic::$previousButtonHtml);
    }
    $url = $this->url(
      $this->currentPage() - 1
    );
    return $this->getPageLinkWrapper($url, Semantic::$previousButtonHtml);
  }
  /**
   * 下一页按钮
   * @return string
   */
  protected function getNextButton() {
    if (!$this->hasMore) {
      return $this->getDisabledTextWrapper(Semantic::$nextButtonHtml);
    }
    $url = $this->url($this->currentPage() + 1);
    return $this->getPageLinkWrapper($url, Semantic::$nextButtonHtml);
  }
  /**
   * 页码按钮
   * @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(
          '<div style="text-align: center"><div class="ui pagination menu">%s %s</div></div>',
          $this->getPreviousButton(),
          $this->getNextButton()
        );
      }else{
        return sprintf(
          '<div style="text-align: center"><div class="ui pagination menu">%s %s %s</div></div>',
          $this->getPreviousButton(),
          $this->getLinks(),
          $this->getNextButton()
        );
      }
    }
    return null;
  }
  /**
   * 生成一个可点击的按钮
   *
   * @param string $url
   * @param int $page
   * @return string
   */
  protected function getAvailablePageWrapper($url, $page) {
    return '<a href="' . htmlentities($url) . '" rel="external nofollow" class="item">' . $page . '</a>';
  }
  /**
   * 生成一个禁用的按钮
   *
   * @param string $text
   * @return string
   */
  protected function getDisabledTextWrapper($text) {
    return '<a class="disabled item">' . $text . '</a>';
  }
  /**
   * 生成一个激活的按钮
   *
   * @param string $text
   * @return string
   */
  protected function getActivePageWrapper($text) {
    return '<a class="active item">' . $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);
  }
}

3、搞定

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
smtp邮件发送一例
Oct 09 PHP
分页详解 从此分页无忧(PHP+mysql)
Nov 23 PHP
Smarty Foreach 使用说明
Mar 23 PHP
php 格式化数字的时候注意数字的范围
Apr 13 PHP
PHP 数组基础知识小结
Aug 20 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
PHP数据过滤的方法
Oct 30 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
phpstorm配置Xdebug进行调试PHP教程
Dec 01 PHP
利用php输出不同的心形图案
Apr 22 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 #PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
Aug 02 #PHP
php抽象类和接口知识点整理总结
Aug 02 #PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 #PHP
php菜单/评论数据递归分级算法的实现方法
Aug 01 #PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 #PHP
php curl发送请求实例方法
Aug 01 #PHP
You might like
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
php 抽象类的简单应用
2011/09/06 PHP
PHP7.0版本备注
2015/07/23 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
use jscript with List Proxy Server Information
2007/06/11 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
小程序清理本地缓存的方法
2018/08/17 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
Python3遍历目录树实现方法
2015/05/22 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
pandas多级分组实现排序的方法
2018/04/20 Python
python中pip的安装与使用教程
2018/08/10 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
Python元组知识点总结
2019/02/18 Python
python异步存储数据详解
2019/03/19 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
python3字符串输出常见面试题总结
2020/12/01 Python
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
数控技术专业毕业自荐书范文
2014/02/05 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
自荐信模板大全
2015/03/27 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
人与自然观后感
2015/06/16 职场文书
结婚幸福感言
2015/08/01 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js