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 相关文章推荐
mysql+php分页类(已测)
Mar 31 PHP
php adodb连接不同数据库
Mar 19 PHP
ajax实现无刷新分页(php)
Jul 18 PHP
php数据库密码的找回的步骤
Jan 12 PHP
PHP导入Excel到MySQL的方法
Apr 23 PHP
php中用于检测一个地理IP地址是否可用的代码
Feb 19 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
PHP实现QQ快速登录的方法
Sep 28 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 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中目录,文件操作详谈
2007/03/19 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
PHP实现验证码校验功能
2017/11/16 PHP
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
JS+CSS实现过渡特效
2021/01/02 Javascript
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
python实现排序算法解析
2018/09/08 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
python中的django是做什么的
2020/07/31 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
学生会竞选自荐信
2013/10/12 职场文书
期末考试动员演讲稿
2014/01/10 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
四大名著读书笔记
2015/06/25 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android