Thinkphp5.0分页和跳页
后台查询商品或者会员量需要用到分页展示列表,当页数比较多的时候为了体高用户体验度,需要添加一个跳页也就是手动输入页码数进行快速跳转指定页面。由于手动编写分页比较麻烦,又想使用TP5自带的分页,但是TP5自带的分页类比较简单,所以可以通过修改Bootstrap类自定义显示分页的页码和数量。
由于Bootstrap类是tp自带的类,所以为了我们尽量不要改动底层自带的类,这里拷贝一下Bootstrap类然后重命名为BootstrapDetailed.php,目录结构如图:
代码如下:
- <?php
- // +----------------------------------------------------------------------
- // | ThinkPHP [ WE CAN DO IT JUST THINK ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +----------------------------------------------------------------------
- // | Author: zhangyajun <448901948@qq.com>
- // +----------------------------------------------------------------------
- namespace think\paginator\driver;
- use think\Paginator;
- class BootstrapDetailed 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);
- }
- //总数标签
- protected function totalshow()
- {
- $totalhtml="<li class=\"disabled\"><span>共".$this->total."条记录  第".$this->currentPage()."页/共".$this->lastPage()."页</span></li>";
- return $totalhtml;
- }
- //尾页标签
- protected function showlastpage($text = '尾页')
- {
- if($this->currentPage()==$this->lastPage())
- {
- return $this->getDisabledTextWrapper($text);
- }
- $url = $this->url($this->lastPage());
- return $this->getPageLinkWrapper($url, $text);
- }
- //首页标签
- protected function showfirstpage($text = '首页')
- {
- if($this->currentPage()==1)
- {
- return $this->getDisabledTextWrapper($text);
- }
- $url = $this->url(1);
- return $this->getPageLinkWrapper($url, $text);
- }
- //后五页
- protected function afivepage($text = '后五页')
- {
- if($this->lastPage()<$this->currentPage()+5)
- {
- return $this->getDisabledTextWrapper($text);
- }
- $url = $this->url($this->currentPage()+5);
- return $this->getPageLinkWrapper($url, $text);
- }
- //前五页
- protected function bfivepage($text = '前五页')
- {
- if($this->currentPage()<5)
- {
- return $this->getDisabledTextWrapper($text);
- }
- $url = $this->url($this->currentPage()-5);
- 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);
- }
- //跳转到哪页
- protected function gopage()
- {
- return $gotohtml="<li><form action='' method='get' ><a style='float:left;margin-left:2px;'><input style='height:33px;' type='text' name='page' placeholder='请选择页数'> <input style='height:33px;' type='submit' value='确定'> </a></form></li>";
- // return $totalhtml;;
- }
- /**
- * 页码按钮
- * @return string
- */
- protected function getLinks()
- {
- if ($this->simple)
- return '';
- $block = [
- 'first' => null,
- 'slider' => null,
- 'last' => null
- ];
- $side = 2;
- $window = $side * 2;
- if ($this->lastPage < $window +1) {
- $block['slider'] = $this->getUrlRange(1, $this->lastPage);
- } elseif ($this->currentPage <= $window-1) {
- $block['slider'] = $this->getUrlRange(1, $window + 1);
- } elseif ($this->currentPage > ($this->lastPage - $window+1)) {
- $block['slider'] = $this->getUrlRange($this->lastPage - ($window), $this->lastPage);
- } else {
- $block['slider'] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side);
- }
- $html = '';
- if (is_array($block['first'])) {
- $html .= $this->getUrlLinks($block['first']);
- }
- if (is_array($block['slider'])) {
- $html .= $this->getUrlLinks($block['slider']);
- }
- if (is_array($block['last'])) {
- $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 %s</ul>',
- $this->getPreviousButton(),
- $this->getNextButton()
- );
- } else {
- return sprintf(
- '<ul class="pagination"> %s %s %s %s %s %s %s %s </ul>',
- //显示数量页码信息
- $this->totalshow(),
- //第一页
- $this->showfirstpage(),
- //上一页
- $this->getPreviousButton(),
- //前五页
- $this->bfivepage(),
- //页码
- $this->getLinks(),
- //后五页
- //$this->afivepage(),
- //下一页
- $this->getNextButton(),
- //最后一页
- $this->showlastpage(),
- //最后再加个参数 %s 可以显示跳转到哪页
- $this->gopage()
- );
- }
- }
- }
- /**
- * 生成一个可点击的按钮
- *
- * @param string $url
- * @param int $page
- * @return string
- */
- protected function getAvailablePageWrapper($url, $page)
- {
- return '<li><a href="' . htmlentities($url) . '">' . $page . '</a></li>';
- }
- /**
- * 生成一个禁用的按钮
- *
- * @param string $text
- * @return string
- */
- protected function getDisabledTextWrapper($text)
- {
- return '<li class="disabled"><span>' . $text . '</span></li>';
- }
- /**
- * 生成一个激活的按钮
- *
- * @param string $text
- * @return string
- */
- protected function getActivePageWrapper($text)
- {
- return '<li class="active"><span>' . $text . '</span></li>';
- }
- /**
- * 生成省略号按钮
- *
- * @return string
- */
- protected function getDots($text = '...')
- {
- //$url = $this->url($this->currentPage() + 1);
- // return $this->getPageLinkWrapper($url, $text);
- 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);
- }
- }
然后再config里面配置一下分页类就可以了。
- //分页配置
- 'paginate' => [
- 'type' => 'BootstrapDetailed',
- 'var_page' => 'page',
- 'list_rows' => 15,
- ],
举个例子:
- $good_info =Db::table('goods')->paginate(20);
效果如下:
这样就可以了,用户体验度高,方便。很不错的分页。
原文参考文章地址:http://www.zhaisui.com/article/52.html
Thinkphp5.0分页和跳页的更多相关文章
- thinkPHP5.0分页传参
分页函数paginate(),主要参数有:list_rows每页数量.page当前页.path URL路径.query URL额外参数.fragment URL锚点.type分页l类型 public ...
- thinkphp5.0分页
第一种 public function index(){ // 页面和面包屑导航 $ttl[] = $this->title; $ttl[] = '管理员列表'; $this->assig ...
- thinkphp5.0 分页中伪静态的处理
1.修改文件\thinkphp\library\think\Paginator.php(此文件用于分页) isurl是否为伪静态 加入isurl用于判断是否使用伪静态分页 */ protected $ ...
- 用Vue2.0实现简单的分页及跳转
用Vue2.0实现简单的分页及跳转 2018年07月26日 20:29:51 Freya_yyy 阅读数 3369 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...
- ThinkPHP5.0框架开发实现简单的页面跳转
ThinkPHP5.0框架开发实现简单的页面跳转 一.效果 登录界面 登录成功界面 登录失败界面 二.目录结构 三.代码 控制器中的Login.php <?php // 声明命名空间 names ...
- Thinkphp5——实现分页(模型和Db分页,多种方法)
现在很多网站的数据量的很多,如果全部在一页里显示效果不好,数据量太大,那怎么办?这时我们就需要分页,而分页的好处就是分段显示数据,这样页面就不用加载很多数据,需要时才加载,下面我教大家实现ThinkP ...
- thinkphp5.0 微信公众号接入支付宝支付
---恢复内容开始--- 真是无力吐槽这个需求了,想骂客户,好端端的非要在微信公众号接入支付宝,都知道微信公众号是拒绝支付宝的,屏蔽了支付宝,所以在微信公众号接入支付宝的话就必须手动复制链接跳出微信内 ...
- mvc自定义分页(加页数的)(转)
1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...
- Thinkphp5.0支付宝支付扩展库类库大全
Thinkphp5.0支付宝支付扩展库类库大全,包括手机网站支付.电脑网站支付.支付查询.退款.退款查询.对账单等. Thinkphp5.0支付宝调用方法: 电脑网站支付 Pagepay.php 调用 ...
随机推荐
- Java基础——iO(三)
一.管道流 演示:PipedInputStream , PipedOutputStream 注意:管道流本身就不建议在一个线程中使用,这是因为向输出流中写的数据,都会存到输入流内部的一个1024字节 ...
- SSM(一):spring-ioc
一.java代理模式 java代理模式是ioc的前置知识.代理模式非常简单,看代码就一目了然了. public interface role { public void makeMoney(); } ...
- POJ2398(KB13-B 计算几何)
Toy Storage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5968 Accepted: 3573 Descr ...
- js-权威指南学习笔记20
第二十章 客户端存储 1.客户端存储有一下几种形式:Web存储.cookie.IE userData.离线Web应用.Web数据库.文件系统API. 2.Web存储标准所描述的API包含localSt ...
- ViewPager实现Recycle机制和响应notifyDataSetChanged
1.目标 主界面要求水平移动翻页效果,每次只能翻一页,可以翻无数页. 2.实现思路 针对"每次只能翻一页"这个要求,简单使用SDK的话只有用ViewPager.ViewPager的 ...
- React-Native-Android-Studio整合开发+环境配置+官方实例
linux下React Native开发环境搭建,使用Android-studio工具进行React Native整合开发. 参考React Native的官方文档,通过图文详细记录开发过程.可以查看 ...
- 活字格Web应用平台学习笔记2-基础教程-开始
今天先学活字格第一个教程,开始. 目标是能够用活字格创建一个简单的Web页面. 哈哈,简单,跟Excel一样,做单元格输入.合并.文字居中.加底色.加图片,然后发布. 然后就真的生成了一个Web页面! ...
- Nginx的防爬虫优化
我们可以根据客户端的 user-agents 首部字段来阻止指定的爬虫爬取我们的网站: 虚拟主机配置如下:(红色标记为添加或者修改内容) [root@Nginx www_date]# cat bria ...
- paste 命令
Linux paste命令用于合并文件的列. paste指令会把每个文件以列对列的方式,一列列地加以合并. 语法: paste [-s][-d <间隔字符>][--help][--vers ...
- MySQL——索引优化实战
上篇文章中介绍了索引的基本内容,这篇文章我们继续介绍索引优化实战.在介绍索引优化实战之前,首先要介绍两个与索引相关的重要概念,这两个概念对于索引优化至关重要. 本篇文章用于测试的user表结构: 索引 ...