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 相关文章推荐
初学CAKEPHP 基础教程
Nov 02 PHP
基于pear auth实现登录验证
Feb 26 PHP
php递归实现无限分类生成下拉列表的函数
Aug 08 PHP
PHP中=赋值操作符对不同数据类型的不同行为
Jan 02 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
Jun 25 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
php中adodbzip类实例
Dec 08 PHP
php根据指定位置和长度获得子字符串的方法
Mar 17 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
Laravel Eloquent ORM 多条件查询的例子
Oct 10 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 PHP
PHP 实现重载
Mar 09 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验证复选框有效性的示例
2013/11/13 PHP
php+highchats生成动态统计图
2014/05/21 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
Python TestCase中的断言方法介绍
2019/05/02 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
python线性插值解析
2020/07/05 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
法国在线药房:DoctiPharma
2020/10/21 全球购物
博士生入学考试推荐信
2013/11/17 职场文书
社区戒毒工作方案
2014/06/04 职场文书
项目经理任命书内容
2014/06/06 职场文书
批评与自我批评范文
2014/10/15 职场文书
服务员岗位职责范本
2015/04/09 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript