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数据库操作面向对象的优点
Oct 09 PHP
开发大型 PHP 项目的方法
Jan 02 PHP
PHP内核介绍及扩展开发指南―基础知识
Sep 11 PHP
使用php计算排列组合的方法
Nov 13 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
PHP实现支持加盐的图片加密解密
Sep 09 PHP
PHP 匿名函数与注意事项详细介绍
Nov 26 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 PHP
php下的原生ajax请求用法实例分析
Feb 28 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
Smarty+QUICKFORM小小演示
2007/02/25 PHP
一些使用频率比较高的php函数
2008/10/03 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
php session的应用详细介绍
2017/03/22 PHP
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
[19:15]DK战队纪录片
2014/09/02 DOTA
python脚本实现查找webshell的方法
2014/07/31 Python
python关键字and和or用法实例
2015/05/28 Python
详解django2中关于时间处理策略
2019/03/06 Python
浅谈Python基础—判断和循环
2019/03/22 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
十一个高级MySql面试题
2014/10/06 面试题
大学活动邀请函
2014/01/28 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
首席执行官观后感
2015/06/03 职场文书
法律意见书范本
2015/06/04 职场文书
战友聚会致辞
2015/07/28 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL