thinkphp5+layui实现的分页样式示例


Posted in PHP onOctober 08, 2019

本文实例讲述了thinkphp5+layui实现的分页样式。分享给大家供大家参考,具体如下:

tp5之layui分页样式

1.分页类

路径:\thinkphp\library\think\paginator\driver

Layui.php

<?php
namespace think\paginator\driver;
use think\Paginator;
class Layui extends Paginator
{
  /**
   * 上一页按钮
   * @param string $text
   * @return string
   */
  protected function getPreviousButton($text = "上一页")
  {
    if ($this->currentPage() <= 1) {
      return $this->getDisabledTextWrapper($text);
    }
    $url = $this->url(
      $this->currentPage() - 1
    );
    return $this->getPageLinkWrapper($url, $text);
  }
  /**
   * 下一页按钮
   * @param string $text
   * @return string
   */
  protected function getNextButton($text = '下一页')
  {
    if (!$this->hasMore) {
      return $this->getDisabledTextWrapper($text);
    }
    $url = $this->url($this->currentPage() + 1);
    return $this->getPageLinkWrapper($url, $text);
  }
  /**
   * 页码按钮
   * @return string
   */
  protected function getLinks()
  {
    if ($this->simple)
      return '';
    $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(
          '<ul class="pager">%s %s</ul>',
          $this->getPreviousButton(),
          $this->getNextButton()
        );
      } else {
        return sprintf(
          '%s %s %s',
          $this->getPreviousButton(),
          $this->getLinks(),
          $this->getNextButton()
        );
      }
    }
  }
  /**
   * 生成一个可点击的按钮
   *
   * @param string $url
   * @param int  $page
   * @return string
   */
  protected function getAvailablePageWrapper($url, $page)
  {
    return '<a href="' . htmlentities($url) . '" rel="external nofollow" >' . $page . '</a>';
  }
  /**
   * 生成一个禁用的按钮
   *
   * @param string $text
   * @return string
   */
  protected function getDisabledTextWrapper($text)
  {
    return '<a class="layui-laypage-prev" >' . $text . '</a>';
  }
  /**
   * 生成一个激活的按钮
   *
   * @param string $text
   * @return string
   */
  protected function getActivePageWrapper($text)
  {
    return '<span class="layui-laypage-curr"> <em class="layui-laypage-em"></em><em>' . $text . '</em></span>';
  }
  /**
   * 生成省略号按钮
   *
   * @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);
  }
}

2.配置文件

paginate.php

<?php
/**
 * @auther: xxf
 * Date: 2019/9/2
 * Time: 10:24
 */
//分页配置
return [
  'type' => 'Layui',
  'var_page' => 'page',
];

3.模型查询

public function getUserShowList($size = 20, $where = null)
{
    $res = $this
      ->field('id,title,list_order,is_top,create_time,create_time time')
      ->where($where)
      ->order(['is_top' => 'desc', 'list_order' => 'desc', 'id' => 'desc'])
      ->paginate($size);
    return $res;
}

4.模板渲染

<div class="layui-box layui-laypage layui-laypage-molv">{$list|raw}</div>

效果

thinkphp5+layui实现的分页样式示例

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP操作文件方法问答
Mar 16 PHP
php反弹shell实现代码
Apr 22 PHP
PHP开发的一些注意点总结
Oct 12 PHP
php生成数组的使用示例 php全组合算法
Jan 16 PHP
PHP对接微信公众平台消息接口开发流程教程
Mar 25 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
Jul 28 PHP
PHP5.2中PDO的简单使用方法
Mar 25 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 PHP
Thinkphp框架开发移动端接口(1)
Aug 18 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 05 PHP
php经典趣味算法实例代码
Jan 21 PHP
调试php程序的简单步骤
Oct 04 #PHP
用php定义一个数组最简单的方法
Oct 04 #PHP
php输出文字乱码的解决方法
Oct 04 #PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
Oct 04 #PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 #PHP
laravel 实现登陆后返回登陆前的页面方法
Oct 03 #PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
Oct 03 #PHP
You might like
PHP导入Excel到MySQL的方法
2011/04/23 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
php实现源代码加密的方法
2015/07/11 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
iView框架问题整理小结
2018/10/16 Javascript
python的几种开发工具介绍
2007/03/07 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Python常见排序操作示例【字典、列表、指定元素等】
2018/08/15 Python
python同步两个文件夹下的内容
2019/08/29 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
python是怎么被发明的
2020/06/15 Python
python实现AdaBoost算法的示例
2020/10/03 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
3个CCIE对一个工程师的面试题
2012/05/06 面试题
思想政治自我鉴定
2013/10/06 职场文书
会计专业的自荐信
2013/12/12 职场文书
简短大学毕业感言
2014/01/18 职场文书
《湘夫人》教学反思
2014/02/21 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
Vue.Draggable实现交换位置
2022/04/07 Vue.js