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判断浏览器的类型和语言的函数代码
Feb 28 PHP
php url路由入门实例
Apr 23 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
php画图实例
Nov 05 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
ThinkPHP模型详解
Jul 27 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
Zend Framework框架Smarty扩展实现方法
Mar 22 PHP
浅谈PHP正则中的捕获组与非捕获组
Jul 18 PHP
php实现留言板功能
Mar 05 PHP
php base64 编码与解码实例代码
Mar 21 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+curl 发送图片处理代码分享
2015/07/09 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
python批量爬取下载抖音视频
2019/06/17 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
python3实现单目标粒子群算法
2019/11/14 Python
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
英语系本科生个人求职信
2013/09/21 职场文书
药物学专业学生的自我评价
2013/10/27 职场文书
十一酒店活动方案
2014/02/20 职场文书
会计岗位职责模板
2014/03/12 职场文书
西双版纳导游词
2015/02/03 职场文书
团员个人总结
2015/02/26 职场文书
司机岗位职责范本
2015/04/10 职场文书
七年级作文之英语老师
2019/10/28 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
python 制作一个gui界面的翻译工具
2021/05/14 Python
Java spring单点登录系统
2021/09/04 Java/Android
Python经常使用的一些内置函数
2022/04/11 Python