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 攻击方法之谈php+mysql注射语句构造
Oct 30 PHP
php将图片文件转换成二进制输出的方法
Jun 10 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
基于ThinkPHP实现的日历功能实例详解
Apr 15 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
Laravel框架自定义公共函数的引入操作示例
Apr 16 PHP
php设计模式之单例模式用法经典示例分析
Sep 20 PHP
Laravel框架中集成MongoDB和使用详解
Oct 17 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 无线电
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
用js做一个小游戏平台 (一)
2009/12/29 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
Python中字典映射类型的学习教程
2015/08/20 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
python实现雨滴下落到地面效果
2018/06/21 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
AUC计算方法与Python实现代码
2020/02/28 Python
python logging通过json文件配置的步骤
2020/04/27 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
五种Python转义表示法
2020/11/27 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
COSETTE官网:奢华,每天
2020/03/22 全球购物
关于环保的标语
2014/06/13 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
单位接收函格式
2015/01/30 职场文书