问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ThinkPHP5如何对数组进行分页

发布网友 发布时间:2022-04-07 06:05

我来回答

2个回答

懂视网 时间:2022-04-07 10:27

ThinkPHP5.1内置了分页实现,要给数据添加分页输出功能变得非常简单,可以直接在Db类查询的时候调用paginate方法。本文为大家介绍了thinkphp自定义分页样式的方法。

thinkphp5.1有很方便的分页类,用render方法即可渲染分页的html代码

但"<<"的上一页和">>"这样的的下一页有时无法满足项目多变的需求,有必要自己定义分页的显示,比如

首页 上一页 1 2 3 ... 7 8 下一页 末页

这样,然而官方的手册并没有提到自定义分页样式的方法,我开始也只是简单的把分页的html替换成上一页下一页的文字

后来又搜到可以自己定义一个类来完成这个需求,首先需要在config目录创建paginate.php,文件内容

<?php
return [
'type'=>'appindexpagergcudPager'//自己的分页类可以随便放,只要命名空间写对
];

然后复制"项目目录 hinkphplibrary hinkpaginatordriverBootstrap.php"到一个任意位置,改改命名空间,把paginate.php的type改成相应的命名空间,比如我就把文件复制到了"项目目录applicationindexpagergcudPager.php",上面的type也是和这个路径对应的,然后把命名空间改成了"appindexpager",对应的类名改成了gcudPager,这样就可以自行定义分页的形式了

首页的实现我是按照上一页来的,复制它的代码,略加修改

 /**首页按钮
 * @param string $text
 * @return string
 */
 protected function GetFirstButton($text='首页'){
 if ($this->currentPage() <= 1) {
  return $this->getDisabledTextWrapper($text);
 }
 $url = $this->url(1);

 return $this->getPageLinkWrapper($url, $text);
 }

逻辑很简单,就是判断下当前页数,手动把页数变量设置为1,同理可以复制下一页的代码改成末页

 /**末页按钮
 * @param string $text
 * @return string
 */
 protected function GetLastButton($text='末页'){
 if (!$this->hasMore) {
  return $this->getDisabledTextWrapper($text);
 }
 $url = $this->url($this->lastPage());

 return $this->getPageLinkWrapper($url, $text);
 }

其它上一页下一页也就是改个文本太简单不说,render函数部分需要把首页和末页按钮加进来

 /**
 * 渲染分页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(
   '<div class="page-captions">%s %s %s %s %s</div>',
   $this->GetFirstButton(),
   $this->getPreviousButton(),
   $this->getLinks(),
   $this->getNextButton(),
   $this->GetLastButton()
  );
  }
 }
 }

这样就弄完了,调用部分完全不用改,最后放上完整代码

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: zhangyajun <448901948@qq.com>
// +----------------------------------------------------------------------

namespace appindexpager;

use thinkPaginator;

class gcudPager extends Paginator
{
 /**首页按钮
 * @param string $text
 * @return string
 */
 protected function GetFirstButton($text='首页'){
 if ($this->currentPage() <= 1) {
  return $this->getDisabledTextWrapper($text);
 }
 $url = $this->url(1);

 return $this->getPageLinkWrapper($url, $text);
 }
 /**
 * 上一页按钮
 * @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 GetLastButton($text='末页'){
 if (!$this->hasMore) {
  return $this->getDisabledTextWrapper($text);
 }
 $url = $this->url($this->lastPage());

 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(
   '<div class="page-captions">%s %s %s %s %s</div>',
   $this->GetFirstButton(),
   $this->getPreviousButton(),
   $this->getLinks(),
   $this->getNextButton(),
   $this->GetLastButton()
  );
  }
 }
 }

 /**
 * 生成一个可点击的按钮
 *
 * @param string $url
 * @param int $page
 * @return string
 */
 protected function getAvailablePageWrapper($url, $page)
 {
 return '<a href="' . htmlentities($url) . '">' . $page . '</a>';
 }

 /**
 * 生成一个禁用的按钮
 *
 * @param string $text
 * @return string
 */
 protected function getDisabledTextWrapper($text)
 {
 return '<a>' . $text . '</a>';
 }

 /**
 * 生成一个激活的按钮
 *
 * @param string $text
 * @return string
 */
 protected function getActivePageWrapper($text)
 {
 return '<span>' . $text . '</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 ($this->currentPage() == $page) {
  return $this->getActivePageWrapper($page);
 }

 return $this->getAvailablePageWrapper($url, $page);
 }
}

推荐教程:thinkphp教程

热心网友 时间:2022-04-07 07:35

function array_page($array,$rows){ import("ORG.Util.Page"); //导入分页类 $count=count($array); $Page=new Page($count,$rows); $list=array_slice($array,$Page->firstRow,$Page->listRows); return $list; }//使用该函数即可实现分页
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怀孕四个月补钙可以吗 孕妇吃什么时候钙片好 孕妇吃什么钙片最好 怀孕补钙是必须的吗?孕妇钙片品牌哪个好? ...在长高的黄金发育时期,会影响容貌五官的变化吗,不仅没有发育到变... 冬至吃饺子的诗词 立冬吃饺子的暖心诗词 宁波全封闭学校有哪些 宁波市北仑区小港镇会计学校在那? 或红联镇也可以 江南教育集团小港中心幼儿园园况介绍 红联哪里有报暑假班 全国首例微信解封入罪案具体有哪些细节呢? 新手怎么看股市走势图 股市走势 怎么看股市走势图与k线图? 股市新手怎么看股票走势图 怎么看股票走势图 怎么看股票k线图 怎么看股市图 关于尊严贼剔骨 高手进 人族高手进 魔兽世界SM所有技能宏!小弟我根本不会做宏希望高手有教程!! 求暗黑破坏神2毁灭之王的基本操作和各职业杀怪技巧!! 截骨大师账号密码? 松和日式整骨原理是什么?为什么这么神奇 看大师们如何说:练太极拳巧妙放松的方法 万彩骨骼大师能添加文字吗? 汽车安装闪光灯 外置闪光灯装到相机后是先开相机电源还是先开闪光灯 闪光灯柔光罩的作用及安装 佳能270EX II闪光灯如何安装是不是安装在相机 滑板怎么安装闪光灯? 单反相机环型闪光灯怎么装 怎么把闪光灯座支架装在相机三脚架上 大学生解封315个诈骗获刑,微信解封风险多大? 被骗扫码帮陌生人解封了,怎么办? 被骗扫码帮陌生人解封了,怎么办? 被骗帮陌生人微信辅助解封了。担心自己的号被封,该怎么办?怎么补救... 来个真正的大神, 解封微信, 要求先解封后给钱, 被骗了一天了 微信解封会被骗吗? qq群福利的漏洞是真的吗,可以买 oppoa57微信夜间模式? oppoA57怎么把微信调成黑色模式? 羊绒毛衣要怎么洗? thinkphp5.0分页样式怎么弄 梦见自己的车在行驶中将自己甩出车外,车自己开走了,是怎么回事? 我昨晚梦见车自己开走了,当我追过去时又看见天上有一条金色的龙最后有个人个人给了我一个瓶子,瓶子上龙 小度小度梦见自己考试做汽车汽车开走了什么意思? 梦见自己车 车上无人、车自己开走了,我在后面追 梦见自己开车突然自己下来了车子继续在朝前跑 fast恢复出厂设置后不可上网感叹号怎么重新设置路由器? 使用过的fast路由器怎么设置 如何用Premiere Pro CS4裁剪视频的画面(详情如下)? fast路由器如何重新设置密码