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 相关文章推荐
支持oicq头像的留言簿(一)
Oct 09 PHP
PHP脚本数据库功能详解(下)
Oct 09 PHP
PHP 木马攻击防御技巧
Jun 13 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
php分页思路以及在ZF中的使用
May 30 PHP
深入array multisort排序原理的详解
Jun 18 PHP
5种PHP创建数组的实例代码分享
Jan 17 PHP
php实现天干地支计算器示例
Mar 14 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
Nov 11 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
PHP封装的简单连接MongoDB类示例
Feb 13 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开发文件系统实例讲解
2006/10/09 PHP
PHP静态新闻列表自动生成代码
2007/06/14 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
javascript中常用编程知识
2013/04/08 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
python制作一个桌面便签软件
2015/08/09 Python
Python File readlines() 使用方法
2018/03/19 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
医药销售自我评价200字
2014/09/11 职场文书
查摆问题自查报告范文
2014/10/13 职场文书
百年孤独读书笔记
2015/06/29 职场文书
酒店厨房管理制度
2015/08/06 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python
关于的python五子棋的算法
2022/05/02 Python