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 相关文章推荐
phpMyadmin 用户权限中英对照
Apr 02 PHP
PHP无限分类(树形类)
Sep 28 PHP
php json与xml序列化/反序列化
Oct 28 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
Apr 24 PHP
PHP判断数据库中的记录是否存在的方法
Nov 14 PHP
php随机取mysql记录方法小结
Dec 27 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
PHP创建word文档的方法(平台无关)
Mar 29 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
详解php框架Yaf路由重写
Jun 20 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 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
PHP 网页过期时间的控制代码
2009/06/29 PHP
PHP编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
Add Formatted Text to a Word Document
2007/06/15 Javascript
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
js单例模式的两种方案
2013/10/22 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
微信小程序canvas实现签名功能
2021/01/19 Javascript
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
python使用socket连接远程服务器的方法
2015/04/29 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
python处理“
2019/06/10 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
pycharm导入源码的具体步骤
2020/08/04 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
促销活动方案模板
2014/02/24 职场文书
cf战队收人广告词
2014/03/14 职场文书
中学生期中自我鉴定
2014/04/20 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
学校光盘行动倡议书
2015/04/28 职场文书
宿舍管理制度范本
2015/08/07 职场文书
导游词之江南周庄
2019/12/06 职场文书