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 相关文章推荐
PHP中动态HTML的输出技术
Oct 09 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 PHP
实例介绍PHP的Reflection反射机制
Aug 05 PHP
php cookie中点号(句号)自动转为下划线问题
Oct 21 PHP
thinkphp实现like模糊查询实例
Oct 29 PHP
php使用fopen创建utf8编码文件的方法
Oct 31 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
简单的php+mysql聊天室实现方法(附源码)
Jan 05 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP设计模式之简单工厂和工厂模式实例分析
Mar 25 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 setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
十个Python程序员易犯的错误
2015/12/15 Python
python入门教程 python入门神图一张
2018/03/05 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
对python函数签名的方法详解
2019/01/22 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
python 带时区的日期格式化操作
2020/10/23 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
社区学习十八大感想
2014/01/22 职场文书
关于圣诞节的广播稿
2014/01/26 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
代收款委托书范本
2014/10/01 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL