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 access 数据连接与读取保存编辑数据的实现代码
May 12 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
php二维数组转成字符串示例
Feb 17 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
php获取域名的google收录示例
Mar 24 PHP
php自动识别文件编码并转换为UTF-8的方法
Jun 12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
Jun 23 PHP
PHP中使用GD库创建圆形饼图的例子
Nov 19 PHP
PHP开发中AJAX技术的简单应用
Dec 11 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 PHP
PHP CURL使用详解
Mar 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判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
php session 写入数据库
2016/02/13 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
jQuery中focus事件用法实例
2014/12/26 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
Python实现将xml导入至excel
2015/11/20 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
python调用百度REST API实现语音识别
2018/08/30 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
python写一个随机点名软件的实例
2019/11/28 Python
python操作redis数据库的三种方法
2020/09/10 Python
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
网站美工岗位职责
2014/04/02 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python