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的FTP学习(二)
Oct 09 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
百度实时推送api接口应用示例
Oct 21 PHP
php实现MySQL数据库备份与还原类实例
Dec 09 PHP
PHP中使用BigMap实例
Mar 30 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
PHP Cookie学习笔记
Aug 23 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
PHP实现简易用户登录系统
Jul 10 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
go和python调用其它程序并得到程序输出
2014/02/10 Python
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
北京振戎融通Java面试题
2015/09/03 面试题
求职信的最佳写作思路
2014/02/01 职场文书
旷课检讨书3000字
2014/02/04 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
纠风工作实施方案
2014/03/15 职场文书
员工薪酬激励方案
2014/06/13 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书