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获取某个目录大小的代码
Sep 10 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
PHP定时更新程序设计思路分享
Jun 10 PHP
php实现singleton()单例模式实例
Nov 06 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
php实现将上传word文件转为html的方法
Jun 03 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
php统计数组元素个数的方法
Jul 02 PHP
Zend Framework教程之模型Model基本规则和使用方法
Mar 04 PHP
PHP MYSQL简易交互式站点开发
Dec 27 PHP
PHP新特性详解之命名空间、性状与生成器
Jul 18 PHP
CodeIgniter框架数据库基本操作示例
May 24 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_SELF的安全问题
2009/09/05 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
JavaScript 参考教程
2006/12/29 Javascript
JavaScript 中的事件教程
2007/04/05 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
Jquery动态改变图片IMG的src地址示例
2013/06/25 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
js表单验证实例讲解
2016/03/31 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
Python的Flask开发框架简单上手笔记
2015/11/16 Python
总结Python编程中函数的使用要点
2016/03/20 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
django创建超级用户过程解析
2019/09/18 Python
django API 中接口的互相调用实例
2020/04/01 Python
python中sys模块是做什么用的
2020/08/16 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
中学老师的自我评价
2013/11/07 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
四大名著读书笔记
2015/06/25 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
React四级菜单的实现
2022/04/08 Javascript
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS