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 相关文章推荐
mysql建立外键
Nov 25 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
第七章 php自定义函数实现代码
Dec 30 PHP
浅析PHP递归函数返回值使用方法
Feb 18 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
php计算整个mysql数据库大小的方法
Jun 19 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
Nov 05 PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 PHP
php把字符串指定字符分割成数组的方法
Mar 12 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 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
第一个无线电台是由谁发明的
2021/03/01 无线电
php实现的简单美国商品税计算函数
2015/07/13 PHP
详谈PHP编码转换问题
2015/07/28 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
js 页面输出值
2008/11/30 Javascript
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
vue项目初始化到登录login页面的示例
2019/10/31 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
有趣的python小程序分享
2017/12/05 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
物理系毕业生自荐书范文
2014/02/22 职场文书
省文明单位申报材料
2014/05/08 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
简历自荐信范文
2015/03/09 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
结婚纪念日感言
2015/08/01 职场文书
防震减灾主题班会
2015/08/14 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS