后台查询商品或者会员量需要用到分页展示列表,当页数比较多的时候为了体高用户体验度,需要添加一个跳页也就是手动输入页码数进行快速跳转指定页面。由于手动编写分页比较麻烦,又想使用TP5自带的分页,但是TP5自带的分页类比较简单,所以可以通过修改Bootstrap类自定义显示分页的页码和数量。

由于Bootstrap类是tp自带的类,所以为了我们尽量不要改动底层自带的类,这里拷贝一下Bootstrap类然后重命名为BootstrapDetailed.php,目录结构如图:

代码如下:

  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: zhangyajun <448901948@qq.com>
  10. // +----------------------------------------------------------------------
  11.  
  12. namespace think\paginator\driver;
  13.  
  14. use think\Paginator;
  15.  
  16. class BootstrapDetailed extends Paginator
  17. {
  18.  
  19. /**
  20. * 上一页按钮
  21. * @param string $text
  22. * @return string
  23. */
  24. protected function getPreviousButton($text = "上一页")
  25. {
  26.  
  27. if ($this->currentPage() <= 1) {
  28. return $this->getDisabledTextWrapper($text);
  29. }
  30.  
  31. $url = $this->url(
  32. $this->currentPage() - 1
  33. );
  34.  
  35. return $this->getPageLinkWrapper($url, $text);
  36. }
  37.  
  38. //总数标签
  39. protected function totalshow()
  40. {
  41.  
  42. $totalhtml="<li class=\"disabled\"><span>共".$this->total."条记录&nbsp&nbsp第".$this->currentPage()."页/共".$this->lastPage()."页</span></li>";
  43. return $totalhtml;
  44.  
  45. }
  46.  
  47. //尾页标签
  48.  
  49. protected function showlastpage($text = '尾页')
  50. {
  51.  
  52. if($this->currentPage()==$this->lastPage())
  53. {
  54. return $this->getDisabledTextWrapper($text);
  55.  
  56. }
  57.  
  58. $url = $this->url($this->lastPage());
  59. return $this->getPageLinkWrapper($url, $text);
  60. }
  61.  
  62. //首页标签
  63.  
  64. protected function showfirstpage($text = '首页')
  65. {
  66.  
  67. if($this->currentPage()==1)
  68. {
  69. return $this->getDisabledTextWrapper($text);
  70.  
  71. }
  72.  
  73. $url = $this->url(1);
  74. return $this->getPageLinkWrapper($url, $text);
  75. }
  76. //后五页
  77. protected function afivepage($text = '后五页')
  78. {
  79.  
  80. if($this->lastPage()<$this->currentPage()+5)
  81. {
  82. return $this->getDisabledTextWrapper($text);
  83.  
  84. }
  85. $url = $this->url($this->currentPage()+5);
  86.  
  87. return $this->getPageLinkWrapper($url, $text);
  88. }
  89.  
  90. //前五页
  91. protected function bfivepage($text = '前五页')
  92. {
  93.  
  94. if($this->currentPage()<5)
  95. {
  96. return $this->getDisabledTextWrapper($text);
  97.  
  98. }
  99. $url = $this->url($this->currentPage()-5);
  100.  
  101. return $this->getPageLinkWrapper($url, $text);
  102. }
  103.  
  104. /**
  105. * 下一页按钮
  106. * @param string $text
  107. * @return string
  108. */
  109. protected function getNextButton($text = '下一页')
  110. {
  111. if (!$this->hasMore) {
  112. return $this->getDisabledTextWrapper($text);
  113. }
  114.  
  115. $url = $this->url($this->currentPage() + 1);
  116.  
  117. return $this->getPageLinkWrapper($url, $text);
  118. }
  119.  
  120. //跳转到哪页
  121. protected function gopage()
  122. {
  123.  
  124. 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>";
  125. // return $totalhtml;;
  126.  
  127. }
  128.  
  129. /**
  130. * 页码按钮
  131. * @return string
  132. */
  133. protected function getLinks()
  134. {
  135. if ($this->simple)
  136. return '';
  137.  
  138. $block = [
  139. 'first' => null,
  140. 'slider' => null,
  141. 'last' => null
  142. ];
  143.  
  144. $side = 2;
  145. $window = $side * 2;
  146.  
  147. if ($this->lastPage < $window +1) {
  148. $block['slider'] = $this->getUrlRange(1, $this->lastPage);
  149.  
  150. } elseif ($this->currentPage <= $window-1) {
  151.  
  152. $block['slider'] = $this->getUrlRange(1, $window + 1);
  153. } elseif ($this->currentPage > ($this->lastPage - $window+1)) {
  154. $block['slider'] = $this->getUrlRange($this->lastPage - ($window), $this->lastPage);
  155.  
  156. } else {
  157.  
  158. $block['slider'] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side);
  159. }
  160.  
  161. $html = '';
  162.  
  163. if (is_array($block['first'])) {
  164. $html .= $this->getUrlLinks($block['first']);
  165. }
  166.  
  167. if (is_array($block['slider'])) {
  168.  
  169. $html .= $this->getUrlLinks($block['slider']);
  170. }
  171.  
  172. if (is_array($block['last'])) {
  173. $html .= $this->getUrlLinks($block['last']);
  174. }
  175.  
  176. return $html;
  177. }
  178.  
  179. /**
  180. * 渲染分页html
  181. * @return mixed
  182. */
  183. public function render()
  184. {
  185. if ($this->hasPages()) {
  186. if ($this->simple) {
  187. return sprintf(
  188. '<ul class="pager">%s %s %s</ul>',
  189.  
  190. $this->getPreviousButton(),
  191. $this->getNextButton()
  192. );
  193. } else {
  194. return sprintf(
  195. '<ul class="pagination"> %s %s %s %s %s %s %s %s </ul>',
  196. //显示数量页码信息
  197. $this->totalshow(),
  198. //第一页
  199. $this->showfirstpage(),
  200. //上一页
  201. $this->getPreviousButton(),
  202. //前五页
  203. $this->bfivepage(),
  204. //页码
  205. $this->getLinks(),
  206. //后五页
  207. //$this->afivepage(),
  208. //下一页
  209. $this->getNextButton(),
  210. //最后一页
  211. $this->showlastpage(),
  212. //最后再加个参数 %s 可以显示跳转到哪页
  213. $this->gopage()
  214. );
  215. }
  216. }
  217. }
  218.  
  219. /**
  220. * 生成一个可点击的按钮
  221. *
  222. * @param string $url
  223. * @param int $page
  224. * @return string
  225. */
  226. protected function getAvailablePageWrapper($url, $page)
  227. {
  228. return '<li><a href="' . htmlentities($url) . '">' . $page . '</a></li>';
  229. }
  230.  
  231. /**
  232. * 生成一个禁用的按钮
  233. *
  234. * @param string $text
  235. * @return string
  236. */
  237. protected function getDisabledTextWrapper($text)
  238. {
  239. return '<li class="disabled"><span>' . $text . '</span></li>';
  240. }
  241.  
  242. /**
  243. * 生成一个激活的按钮
  244. *
  245. * @param string $text
  246. * @return string
  247. */
  248. protected function getActivePageWrapper($text)
  249. {
  250. return '<li class="active"><span>' . $text . '</span></li>';
  251. }
  252.  
  253. /**
  254. * 生成省略号按钮
  255. *
  256. * @return string
  257. */
  258. protected function getDots($text = '...')
  259. {
  260.  
  261. //$url = $this->url($this->currentPage() + 1);
  262.  
  263. // return $this->getPageLinkWrapper($url, $text);
  264. return $this->getDisabledTextWrapper('...');
  265. }
  266.  
  267. /**
  268. * 批量生成页码按钮.
  269. *
  270. * @param array $urls
  271. * @return string
  272. */
  273. protected function getUrlLinks(array $urls)
  274. {
  275. $html = '';
  276.  
  277. foreach ($urls as $page => $url) {
  278. $html .= $this->getPageLinkWrapper($url, $page);
  279. }
  280.  
  281. return $html;
  282. }
  283.  
  284. /**
  285. * 生成普通页码按钮
  286. *
  287. * @param string $url
  288. * @param int $page
  289. * @return string
  290. */
  291. protected function getPageLinkWrapper($url, $page)
  292. {
  293. if ($page == $this->currentPage()) {
  294. return $this->getActivePageWrapper($page);
  295. }
  296.  
  297. return $this->getAvailablePageWrapper($url, $page);
  298. }
  299. }

然后再config里面配置一下分页类就可以了。

  1. //分页配置
  2. 'paginate' => [
  3. 'type' => 'BootstrapDetailed',
  4. 'var_page' => 'page',
  5. 'list_rows' => 15,
  6. ],

举个例子:

  1. $good_info =Db::table('goods')->paginate(20);

效果如下:

这样就可以了,用户体验度高,方便。很不错的分页。

原文参考文章地址:http://www.zhaisui.com/article/52.html

Thinkphp5.0分页和跳页的更多相关文章

  1. thinkPHP5.0分页传参

    分页函数paginate(),主要参数有:list_rows每页数量.page当前页.path URL路径.query URL额外参数.fragment URL锚点.type分页l类型 public ...

  2. thinkphp5.0分页

    第一种 public function index(){ // 页面和面包屑导航 $ttl[] = $this->title; $ttl[] = '管理员列表'; $this->assig ...

  3. thinkphp5.0 分页中伪静态的处理

    1.修改文件\thinkphp\library\think\Paginator.php(此文件用于分页) isurl是否为伪静态 加入isurl用于判断是否使用伪静态分页 */ protected $ ...

  4. 用Vue2.0实现简单的分页及跳转

    用Vue2.0实现简单的分页及跳转 2018年07月26日 20:29:51 Freya_yyy 阅读数 3369    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  5. ThinkPHP5.0框架开发实现简单的页面跳转

    ThinkPHP5.0框架开发实现简单的页面跳转 一.效果 登录界面 登录成功界面 登录失败界面 二.目录结构 三.代码 控制器中的Login.php <?php // 声明命名空间 names ...

  6. Thinkphp5——实现分页(模型和Db分页,多种方法)

    现在很多网站的数据量的很多,如果全部在一页里显示效果不好,数据量太大,那怎么办?这时我们就需要分页,而分页的好处就是分段显示数据,这样页面就不用加载很多数据,需要时才加载,下面我教大家实现ThinkP ...

  7. thinkphp5.0 微信公众号接入支付宝支付

    ---恢复内容开始--- 真是无力吐槽这个需求了,想骂客户,好端端的非要在微信公众号接入支付宝,都知道微信公众号是拒绝支付宝的,屏蔽了支付宝,所以在微信公众号接入支付宝的话就必须手动复制链接跳出微信内 ...

  8. mvc自定义分页(加页数的)(转)

    1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...

  9. Thinkphp5.0支付宝支付扩展库类库大全

    Thinkphp5.0支付宝支付扩展库类库大全,包括手机网站支付.电脑网站支付.支付查询.退款.退款查询.对账单等. Thinkphp5.0支付宝调用方法: 电脑网站支付 Pagepay.php 调用 ...

随机推荐

  1. Java基础——iO(三)

    一.管道流 演示:PipedInputStream  , PipedOutputStream 注意:管道流本身就不建议在一个线程中使用,这是因为向输出流中写的数据,都会存到输入流内部的一个1024字节 ...

  2. SSM(一):spring-ioc

    一.java代理模式 java代理模式是ioc的前置知识.代理模式非常简单,看代码就一目了然了. public interface role { public void makeMoney(); } ...

  3. POJ2398(KB13-B 计算几何)

    Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5968   Accepted: 3573 Descr ...

  4. js-权威指南学习笔记20

    第二十章 客户端存储 1.客户端存储有一下几种形式:Web存储.cookie.IE userData.离线Web应用.Web数据库.文件系统API. 2.Web存储标准所描述的API包含localSt ...

  5. ViewPager实现Recycle机制和响应notifyDataSetChanged

    1.目标 主界面要求水平移动翻页效果,每次只能翻一页,可以翻无数页. 2.实现思路 针对"每次只能翻一页"这个要求,简单使用SDK的话只有用ViewPager.ViewPager的 ...

  6. React-Native-Android-Studio整合开发+环境配置+官方实例

    linux下React Native开发环境搭建,使用Android-studio工具进行React Native整合开发. 参考React Native的官方文档,通过图文详细记录开发过程.可以查看 ...

  7. 活字格Web应用平台学习笔记2-基础教程-开始

    今天先学活字格第一个教程,开始. 目标是能够用活字格创建一个简单的Web页面. 哈哈,简单,跟Excel一样,做单元格输入.合并.文字居中.加底色.加图片,然后发布. 然后就真的生成了一个Web页面! ...

  8. Nginx的防爬虫优化

    我们可以根据客户端的 user-agents 首部字段来阻止指定的爬虫爬取我们的网站: 虚拟主机配置如下:(红色标记为添加或者修改内容) [root@Nginx www_date]# cat bria ...

  9. paste 命令

    Linux paste命令用于合并文件的列. paste指令会把每个文件以列对列的方式,一列列地加以合并. 语法: paste [-s][-d <间隔字符>][--help][--vers ...

  10. MySQL——索引优化实战

    上篇文章中介绍了索引的基本内容,这篇文章我们继续介绍索引优化实战.在介绍索引优化实战之前,首先要介绍两个与索引相关的重要概念,这两个概念对于索引优化至关重要. 本篇文章用于测试的user表结构: 索引 ...