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生成EXCEL的东东
Oct 09 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
php对csv文件的读取,写入,输出下载操作详解
Aug 10 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 PHP
详解HTTP Cookie状态管理机制
Jan 14 PHP
基于PHP实现短信验证码接口(容联运通讯)
Sep 06 PHP
php版阿里云OSS图片上传类详解
Dec 01 PHP
php 获取xml接口数据的处理方法
May 31 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
聊聊 PHP 8 新特性 Attributes
Aug 19 PHP
PHP中->和=>的意思
Mar 31 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环境――Appserv
2006/12/13 PHP
Wordpress php 分页代码
2009/10/21 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
php.ini 配置文件的深入解析
2013/06/17 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
javascript之AJAX框架使用说明
2010/04/24 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
Vue 实现一个命令式弹窗组件功能
2019/09/25 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
python中黄金分割法实现方法
2015/05/06 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python中类的初始化特殊方法
2017/12/01 Python
简单了解python模块概念
2018/01/11 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
Python笔记之facade模式
2019/11/20 Python
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
法国珠宝店:CLEOR
2017/01/29 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
优秀村官事迹材料
2014/01/10 职场文书
高一英语教学反思
2014/01/22 职场文书
决定成败的关键——创业计划书
2014/01/24 职场文书
Java使用HttpClient实现文件下载
2022/08/14 Java/Android