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

thinkphp自定义分页标签怎么写

发布网友 发布时间:2022-04-29 07:03

我来回答

2个回答

懂视网 时间:2022-04-29 11:24

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-29 08:32

    // 用来获取当前用户的买入订单
    public function TradingList($p = null) {
        $p = intval($p) ? intval($p) : 1;
        $pageSize = 15;
        $offset = ($p - 1) * $pageSize;
        $db = M('rebate_trading');
        $TradingList = $db->where(array('userid' => XAAKE))->order('time')->limit($offset, $pageSize)->select();
        $count = count($db->where(array('userid' => XAAKE))->select());
        $page = new \Think\Page($count, $pageSize);
        $page = $page->show();
        $this->assign('page', $page);
        $this->assign('TradingList', $TradingList);
        $this->pagetitle = '已买入订单';
        $this->display();
    }

上面是没有传递查询参数的如果 你要传递查询参数的话,请看下述代码

    // 用来获取搜索字段为field的,当前用户的买入订单
    public function TradingList($field = null,$p = null) {
        $field ? $where['field'] = array('eq',$field) : '';
        $where['userid'] = array('eq',XAAKE);
        $p = intval($p) ? intval($p) : 1;
        $pageSize = 15;
        $offset = ($p - 1) * $pageSize;
        $db = M('rebate_trading');
        $TradingList = $db->where($where)->order('time')->limit($offset, $pageSize)->select();
        $count = count($db->where($where)->select());
        $page = new \Think\Page($count, $pageSize);
        $page = $page->show();
        $this->assign('page', $page);
        $this->assign('TradingList', $TradingList);
        $this->pagetitle = '已买入订单';
        $this->display();
    }

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如果两个男生喜欢上同一个女生怎么办 玛丽居里学者 玛丽居里奖学金含金量 玛丽居里学者含金量 玛丽居里学者什么级别 豆渣肥料适合什么花 豆渣拌在土里能种花吗-豆渣怎样做肥料好 生物化学和微生物学是一个专业吗 请问这狗狗是什么品种?是不是杂交的啊? ...鉴别下这是啥狗狗?大概三个月不到点。个人感觉像是蝴蝶和土狗... 节奏大师钻石买不了,每次都提醒我找不到苹果ID或者密码不正确,可我密码是对的啊 二级建造师执业资格考试与二级建造师相应专业考试,的区别是什么 今天我的节奏大师充值不了了 …… 你们发现没? 刚创建的Apple+ID为什么在节奏大师里无法购买钻石 gb52螺母标准 为啥节奏大师购买不成钻石 螺母6170和螺母41有什么区别 在中国税收的重要作用表现在哪些方面? 国家税收的意义是什么? 税收的意义是什么,有什么用? 税收在国民经济发展过程中所起的重要作用? 谈谈你对税收在国家治理中的重要作用的认识 国税对一个国家的重要性! 分期乐买的苹果蓝牙耳机,到了之后再官网查询序列号是这样子的,请问大神是真的还是假的 下面是查询结果 黑色呢子大衣要怎么清洗?既干净又可以像原来那么暖和 怎样洗黑色棉布衣服不退色黑色棉衣布料是棉布的,怎样 黑色棉衣怎么洗好? 蒜蓉粉丝蒸娃娃菜怎么做? 蒜蓉粉丝蒸娃娃菜的做法步骤图,怎么做好吃 58同城*扰电话 业务员一直打每天几个到十几个的打,要怎么办 ,只是发个招聘信息而已,天天来推销广告 现在可以直接报考二级建造师执业资格吗? 木有网银之类的不能充值节奏大师的钻石吗?话费充值不行吗?还有Q点怎么才能用手机话费充值呢。 节奏大师 安卓版 怎么充值定额钻石 节奏大师,在安卓系统充值钻石,在苹果系统能用吗? 节奏大师怎么只充500钻石 节奏大师怎么用点卡充钻 求oppo手机自带的安全管家,网上能下载的都不是,我要自带的是出厂带的那一种,如果有oppo660 手机oppo 6607被root之后系统就更新不了?怎么办呢? 我手机是oppo6607,以前获取过root,现在想系统升级,但是不会取消root. oppo u3 6607 root方法 为什么我的手机突然出现莫名浏览器 请问oppo 6607怎么拿到root权限 怎么把OPPO6607下载的软件移到内存卡里啊 如何修改网页分页,THINKPHP内核,例子如:http:&#47;&#47;www.ttplmg.com&#47;special&#47;8.html 索尼如何安装水下闪光灯 怎么把闪光灯座支架装在相机三脚架上 单反相机环型闪光灯怎么装 滑板怎么安装闪光灯? 佳能270EX II闪光灯如何安装是不是安装在相机 闪光灯柔光罩的作用及安装