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 相关文章推荐
echo(),print(),print_r()之间的区别?
Nov 19 PHP
PHP文本操作类
Nov 25 PHP
swfupload 多文件上传实现代码
Aug 27 PHP
php 高性能书写
Dec 11 PHP
PHP strncasecmp字符串比较的小技巧
Jan 04 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
PHP定时更新程序设计思路分享
Jun 10 PHP
php实现的常见排序算法汇总
Sep 08 PHP
分享一则PHP定义函数代码
Feb 26 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
PHP一致性hash分布式算法封装类定义与用法示例
Aug 04 PHP
php基于 swoole 实现的异步处理任务功能示例
Aug 13 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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
关于手调机和数调机的选择
2021/03/02 无线电
PHP 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
PHP定时执行计划任务的多种方法小结
2011/12/19 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
php微信公众平台开发类实例
2015/04/01 PHP
php查询及多条件查询
2017/02/26 PHP
Add Formatted Text to a Word Document
2007/06/15 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
js Calender控件使用详解
2015/01/05 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
javascript 取小数点后几位几种方法总结
2017/08/02 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
Python 迭代器工具包【推荐】
2016/05/06 Python
python安装Scrapy图文教程
2017/08/14 Python
Python中类的初始化特殊方法
2017/12/01 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
人事专员岗位职责范本
2014/03/04 职场文书
海洋科学专业求职信
2014/08/10 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
房屋所有权证明
2014/10/20 职场文书
学校德育工作总结2015
2015/05/11 职场文书
董事长助理工作总结2015
2015/07/23 职场文书