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 相关文章推荐
做个自己站内搜索引擎
Oct 09 PHP
傻瓜化配置PHP环境――Appserv
Dec 13 PHP
PHP去除数组中重复的元素并按键名排序函数
Aug 18 PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 PHP
新手菜鸟必读:session与cookie的区别
Aug 22 PHP
php实例分享之二维数组排序
May 15 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
PHP实现微信发红包程序
Aug 24 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
May 20 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 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/08/03 PHP
PHP 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
django 模型字段设置默认值代码
2020/07/15 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
python反爬虫方法的优缺点分析
2020/11/25 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
函授本科个人自我鉴定
2014/03/25 职场文书
环保倡议书格式范文
2014/05/14 职场文书
生产操作工岗位职责
2014/09/16 职场文书
飞屋环游记观后感
2015/06/08 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
浅谈Vue的computed计算属性
2022/03/21 Vue.js