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中实现汉字转区位码应用源码实例解析
Jun 14 PHP
php下统计用户在线时间的一种尝试
Aug 26 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
Jun 19 PHP
PHP合并数组+号和array_merge的区别
Jun 25 PHP
关于php中一些字符串总结
May 05 PHP
php结合web uploader插件实现分片上传文件
May 10 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
php语法检查的方法总结
Jan 21 PHP
PHP文件类型检查及fileinfo模块安装使用详解
May 09 PHP
详解Laravel制作API接口
May 31 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 验证图片生成函数
2009/05/21 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
PHP常用处理静态操作类
2015/04/03 PHP
php实现的日历程序
2015/06/18 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
jQuery实现进度条效果代码
2015/12/17 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
2016/01/10 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
如何提高数据访问速度
2016/12/26 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
JavaScript ES6中export、import与export default的用法和区别
2017/03/14 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
python 自动批量打开网页的示例
2019/02/21 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
python基础 range的用法解析
2019/08/23 Python
详解Python3中的 input() 函数
2020/03/18 Python
详解python中的闭包
2020/09/07 Python
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
制衣厂各岗位职责
2013/12/02 职场文书
理工科学生的自我评价
2013/12/15 职场文书
旷课检讨书大全
2014/01/21 职场文书
擅自离岗检讨书
2014/02/11 职场文书
党员四风剖析材料
2014/08/27 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电