当前位置: 首页 > news >正文

【thinkphp问题栏】tp5.0分页技巧

一、调用内置方法paginate

thinkphp内置了一个paginate方法支持分页功能

该方法位于library\think\db\Query.php内

	    /*** 分页查询* @param int|array $listRows 每页数量 数组表示配置参数* @param int|bool  $simple   是否简洁模式或者总记录数* @param array     $config   配置参数*                            page:当前页,*                            path:url路径,*                            query:url额外参数,*                            fragment:url锚点,*                            var_page:分页变量,*                            list_rows:每页数量*                            type:分页类名* @return \think\Paginator* @throws DbException*/public function paginate($listRows = null, $simple = false, $config = []){// 如果$simple是整数,表示这是总记录数,并不是简洁模式if (is_int($simple)) {$total  = $simple;$simple = false;}// 如果 $listRows 是数组,表示这是配置参数,需要合并默认配置。if (is_array($listRows)) {$config   = array_merge(Config::get('paginate'), $listRows);$listRows = $config['list_rows'];} else {// 其他情况使用传入的 $config 合并默认配置,确定每页记录数量。$config   = array_merge(Config::get('paginate'), $config);$listRows = $listRows ?: $config['list_rows'];}/** @var Paginator $class */// 根据配置中的 type 确定使用的分页类。$class = false !== strpos($config['type'], '\\') ? $config['type'] : '\\think\\paginator\\driver\\' . ucwords($config['type']);// 确定当前页码,如果配置中有 page 直接使用,否则通过分页类的 getCurrentPage 方法获取。$page  = isset($config['page']) ? (int) $config['page'] : call_user_func([$class,'getCurrentPage',], $config['var_page']);$page = $page < 1 ? 1 : $page;$config['path'] = isset($config['path']) ? $config['path'] : call_user_func([$class, 'getCurrentPath']);// 如果没有指定总记录数且不使用简洁模式,查询总记录数并获取当前页数据。if (!isset($total) && !$simple) {$options = $this->getOptions();unset($this->options['order'], $this->options['limit'], $this->options['page'], $this->options['field']);$bind    = $this->bind;$total   = $this->count();$results = $this->options($options)->bind($bind)->page($page, $listRows)->select();} elseif ($simple) {//如果使用简洁模式,只查询当前页数据。$results = $this->limit(($page - 1) * $listRows, $listRows + 1)->select();$total   = null;} else {//否则直接查询当前页数据。$results = $this->page($page, $listRows)->select();}//调用分页类的 make 方法,生成并返回分页器对象。return $class::make($results, $listRows, $page, $total, $simple, $config);}

这个方法有三个参数

参数类型解释
$listRowsint|array每页数量 数组表示配置参数
$simpleint|bool是否简洁模式或者总记录数
$configarray配置参数

1、第一种情况

当我们需要分条件查询时,举个例子

后端代码为:

    public function page(){$model=new UserModel();// 设置分页条数为20$users=$model->where("status",1)->paginate(20);$this->assign("users",$users);return $this->fetch();}

前端代码为:

<html>
<head><title>测试</title>
</head>
<body><ul>{volist name="users" id="user"}<li>{$user.name}_{$user.age}</li>{/volist}</ul>{$users->render()}
</body>
</html> 

拓展:

(1)获取数据总条数,当前页和总页数

        // 总条数$total=$user->total();// 当前页,从路径获取$page= input("page") ?: 1;// 总页数,计算获得$pageCount = ceil($count / $20);

(2)分页方法写在后端

后端代码为:

    public function page(){$model=new UserModel();// 设置分页条数为20$users=$model->where("status",1)->paginate(20);$userPage=$users->render();$this->assign("users",$users);$this->assign("userPage",$userPage);return $this->fetch();}

前端代码为:

<html>
<head><title>测试</title>
</head>
<body><ul>{volist name="users" id="user"}<li>{$user.name}_{$user.age}</li>{/volist}</ul>{$userPage}
</body>
</html> 

2、第二种情况

如果我们所访问的路径为get请求所获得的数据,当点击第二页时,路径就会刷新,从而获取不到原来所存储的路径变量值。

举个例子

后端代码为:

    public function page(){$archivesModel=new \addons\cms\model\Archives();//请求路径中带有参数if (input('category_id')){$channel_id=input("category_id");$archivesModel->where("channel_id",$channel_id);}if (input('keyword')){$title=input("keyword");$archivesModel->where("title",'like','%' . $title . '%');}// 分页数$listRow=20;// 总数据$archives=$archivesModel->order('id', 'desc')->paginate($listRow);$this->assign("archives",$archives);return $this->fetch();}

前端代码为:

{volist name="archives" id="item"}<tr><td>{$item.id}</td><td class="listNewsTitleContent"><a target="_blank" href="{$item.url}" title="{$item.title}">{$item.title}</a></td><td>{$item.industry|htmlentities}</td><td>{$item.area|htmlentities}</td><td>{:date("Y-m-d", $item['publishtime'])}</td></tr>
{/volist}
{$archives->render()}

此时当我们点击第二页的时候,页面会跳转到第二页,但是原来第一页request上的url参数却缺失了,所以我们需要保留原有的路径参数

后端代码为:

    public function page(){$archivesModel=new \addons\cms\model\Archives();//请求路径中带有参数if (input('category_id')){$channel_id=input("category_id");$archivesModel->where("channel_id",$channel_id);}if (input('keyword')){$title=input("keyword");$archivesModel->where("title",'like','%' . $title . '%');}// 分页数$listRow=20;// 总数据$archives=$archivesModel->order('id', 'desc')->paginate($listRow,false,['query'=>$this->request->param() ]);$this->assign("archives",$archives);return $this->fetch();}

 前端代码则不变,这时候就能访问到原有参数的第二页了。

相关文章:

【thinkphp问题栏】tp5.0分页技巧

一、调用内置方法paginate thinkphp内置了一个paginate方法支持分页功能 该方法位于library\think\db\Query.php内 /*** 分页查询* param int|array $listRows 每页数量 数组表示配置参数* param int|bool $simple 是否简洁模式或者总记录数* param array $config 配…...

获取时间戳是使用System.currentTimeMillis()还是使用new Date().getTime()(阿里开发规范)?

1.阿里规范 在阿里的Java开发手册中强制要求使用System.currentTimeMillis() 2.为什么(源码详解) new Date().getTime()它实际上也是调用的System.currentTimeMillis()&#xff0c;源码分析。 这个fastTime是它的成员变量&#xff0c;在new Date()的时候就被赋值了。 扩展一…...

仿饿了么加入购物车旋转控件 - 自带闪转腾挪动画 的按钮

, mWidth - mCircleWidth, mHeight - mCircleWidth); canvas.drawRoundRect(rectF, mHintBgRoundValue, mHintBgRoundValue, mHintPaint); //前景文字 mHintPaint.setColor(mHintFgColor); // 计算Baseline绘制的起点X轴坐标 int baseX (int) (mWidth / 2 - mHintPaint.m…...

Docker部署nacos集群

docker拉取nacos镜像&#xff0c;本文使用nacos2.0.3 三台服务器都要执行以下命令 docker pull nacos/nacos-server:v2.2.0准备挂载的日志目录和配置文件目录 日志&#xff1a;mkdir /usr/local/software/nacos/logs 配置文件&#xff1a;/usr/local/software/nacos/conf在配…...

centos查找文件 及 操作写入的进程

du -sh * 查看目录空间占用、发现大文件&#xff0c;确定进程&#xff0c;结束 yum install lsof 安装lsof 查看文件写入的 进程 2. lsof /root/.influxdbv2/engine/data/bab49411e5f7cbce/autogen/1/000000036-000000002.tsm COMMAND PID USER FD TYPE …...

构建高可用Java微服务架构的秘籍

构建高可用Java微服务架构的秘籍 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 随着云计算和分布式系统的快速发展&#xff0c;微服务架构已成为构建大型应用…...

VBA学习(18):VBA制作任意工作表均可使用的聚光灯

在需要制作聚光的工作簿&#xff0c;按<ALTF11>组合键&#xff0c;打开VBE编辑器。在右侧[工程资源管理器窗格]选中ThisWorkbook模块&#xff0c;将以下代码复制粘贴到该模块的代码窗口。 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target …...

【STM32-启动文件 startup_stm32f103xe.s】

STM32-启动文件 startup_stm32f103xe.s ■ STM32-启动文件■ STM32-启动文件主要做了以下工作&#xff1a;■ STM32-启动文件指令■ STM32-启动文件代码详解■ 栈空间的开辟■ 栈空间大小 Stack_Size■ .map 文件的详细介绍■ 打开map文件 ■ 堆空间■ PRESERVE8 和 THUMB 指令…...

51学习记录(一)——51介绍及震动感应灯

文章目录 前言一、STC89C522.内部结构及引脚 二、继电器原理及震动传感器原理三、项目搭建及实现 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、STC89C52 1.简介 所属系列&#xff1a;51单…...

2024GLEE生活暨教育(上海)博览会,8月20-22日,国家会展中心(上海)

2024GLEE生活暨教育(上海)博览会将于8月20-22日在中国国家会展中心&#xff08;上海&#xff09;举行&#xff0c;博览会总面积近万平方米&#xff0c;设有美好生活和教育产品两大主力展区&#xff0c;全面覆盖婴幼儿、学龄前、小学、初中、高中、大学、中年、老年各个年龄段的…...

debug调试高级功能 断点、布局 及Android Studio常用快捷按键使用详情

文章目录 debug断点篇&#xff1a;打临时断点&#xff08;只用一次&#xff09;&#xff1a;alt断点条件断点&#xff1a;在断点上&#xff0c;点击右键&#xff0c;在Condition那里&#xff0c;设置我们需要的值&#xff0c;循环就会自动停到我们设置的那个值那里依赖断点&…...

51单片机STC89C52RC——6.1 中断系统

一&#xff0c;文字层面理解 反正我看下面的几段文字时脑壳没有正常运转。一个头几个大 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求&#xff0c;要求CPU暂停当前的工作&#xff0c;转而去处理这…...

Redis源码学习:高性能Hash表的设计与实现

哈希表&#xff08;Hash&#xff09;是Redis数据库的数据类型之一&#xff0c;理解哈希表的实现对于掌握Redis非常重要。这篇文章&#xff0c;从哈希冲突和哈希扩展这两个角度&#xff0c;来一步步讲解Redis哈希表的工作原理。 什么是哈希表&#xff1f; 哈希表是一种通过哈希…...

如何防范常见的数据库安全问题

随着数据量的增加和系统的复杂性提高,数据库可能面临多种安全威胁,包括未授权访问、数据泄露、注入攻击等。 1. 未授权访问 未授权访问是指,未经授权的用户对数据库的内容进行访问。这会导致数据泄露、数据篡改或其他安全事故。 针对未授权访问的防范措施如下。 (1)强化…...

[Day 19] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈的數據透明性 區塊鏈技術作為一種分布式賬本技術&#xff0c;因其去中心化、不可篡改和高度透明的特性&#xff0c;已經在各行各業中得到了廣泛應用。在本文中&#xff0c;我們將深入探討區塊鏈的數據透明性&#xff0c;包括其原理、實現方法及相關代碼示例&#xff0c;…...

【Hadoop学习笔记】认识Hadoop

认识Hadoop 从网上找的课程做的笔记&#xff0c;有些图是自己理解画的&#xff0c;可能不正确&#xff0c;可以作为参考&#xff0c;有疑问的地方请直接指出&#xff0c;共同交流。 Hadoop是由Apache基金会开发的一个分布式系统基础架构&#xff0c;主要解决海量数据的存储和海…...

CISP-PTE综合靶机-WinServer2003

1.收集网站的地址和开放的端口,完成前期信息收集。10分 2.访问站点,找出站点的敏感文件,利用返回数据找到相关敏感信 息,完成网站结构的信息收集。10分 3.利用文件包含漏洞读取敏感文件,找出数据库连接凭证,利用此 凭证连接数据库。10分 4.网站后台提权:找出后台管理员登…...

sklearn之各类朴素贝叶斯原理

sklearn之贝叶斯原理 前言1 高斯朴素贝叶斯1.1 对连续变量的处理1.2 高斯朴素贝叶斯算法原理 2 多项式朴素贝叶斯2.1 二项分布和多项分布2.2 详细原理2.3 如何判断是否符合多项式贝叶斯 3 伯努利朴素贝叶斯4 类别贝叶斯4 补充朴素贝叶斯4.1 核心原理4.2 算法流程 前言 如果想看…...

年薪50w+的项目经理,手把手教你如何复盘

复盘是一种重要的学习和改进工具&#xff0c;对于项目经理来说&#xff0c;能帮助识别项目中的成功与失败&#xff0c;为未来的项目管理提供宝贵经验。 理论部分 定义目标。在开始复盘之前&#xff0c;明确复盘的目标是什么。是为了找出项目中的问题并提出解决方案&#xff0c…...

Web3新视野:Lumoz节点的潜力与收益解读

摘要&#xff1a;低估值、高回报、无条件退款80%...... Lumoz正通过其 zkVerifier 节点销售活动&#xff0c;引领一场ZK计算革命。 长期以来&#xff0c;加密市场以其独特的波动性和增长潜力&#xff0c;持续吸引着全球投资者的目光。而历史数据表明&#xff0c;市场往往在一年…...

【shell脚本速成】mysql备份脚本

文章目录 案例需求脚本应用场景&#xff1a;解决问题脚本思路实现代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻…...

高考志愿填报,理科生如何分析选专业?

理科生选择专业的范围更大一些&#xff0c;相比文科说理工科的院校也更多&#xff0c;如何选择适合自己的专业&#xff0c;这是一个比较重要的课题&#xff0c;毕竟大学专业直接关系到职业&#xff0c;是一辈子的大事。 那么理科究竟如何选择专业呢&#xff1f;需要从什么地方…...

qt 简单实验 json格式的文件写入配置文件

1.概要 2.代码 //#include "mainwindow.h"#include <QApplication> #include <QFile> #include <QJsonDocument> #include <QJsonObject> //读取json数据的配置文件int main(int argc, char *argv[]) {QApplication a(argc, argv);QString…...

将WIN10的wifi上网分享给以太网接口

目录 打开网络设置设置属性点这里的设置将wlan主机的以太网接口IP设为自动获取 如果连接不成功&#xff0c;拔网线重连一次 打开网络设置 设置属性 点这里的设置 将wlan主机的以太网接口IP设为自动获取 如果连接不成功&#xff0c;拔网线重连一次...

在 iPhone 上恢复已删除联系人的 5 种简便方法

想象一下&#xff1a;您正在 iPhone 上滚动并搜索要拨打的联系人&#xff0c;但却找不到任何结果。然后您想起昨晚您试图删除一个名字相似的联系人&#xff0c;但不知何故删除了错误的联系人。或者您的孩子错误地删除了一些联系人。这些情况足以让您感到迷茫。但别担心&#xf…...

小白指南:前端使用javascript如何判断集合是不是空集合?

背景 最近在开发一个Web应用时&#xff0c;我遇到了一个关于集合处理的问题。具体来说&#xff0c;我需要判断一个集合是否为空。集合可以是数组、对象、Map或Set等不同的数据结构。就简单的整理了一下如何在JavaScript中有效地判断一个集合是否为空呢&#xff1f; 解决方案 …...

人力资源招聘社会校企类型招聘系统校园招聘小程序

校企社会人力资源招聘小程序&#xff1a;开启高效招聘新时代 &#x1f680;开篇&#xff1a;打破传统&#xff0c;开启招聘新篇章 在快速发展的现代社会&#xff0c;人力资源招聘已经成为企业和学校共同关注的重要议题。为了更高效、便捷地满足双方的招聘需求&#xff0c;一款…...

docker重要操作与直连方法

文章目录 前言一、nvidia-docker安装方法1、nvidia-docker安装2、重启动ssh 二、构建镜像1、构建镜像docker拉取构建本地镜像加载构建 2、容器转镜像3、镜像打包4、删除镜像 三、构建容器1、容器构建2、启动镜像3、删除容器 四、docker直连(ssh -p)1、docker更改密码2、物理机操…...

Windows环境利用 OpenCV 中 CascadeClassifier 分类器识别人眼 c++

Windows环境中配置OpenCV 关于在Windows环境中配置opencv的说明&#xff0c;具体可以参考&#xff1a;VS2022 配置OpenCV开发环境详细教程。 CascadeClassifier 分类器 CascadeClassifier 是 OpenCV 库中的一个类&#xff0c;它用于实现一种快速的物体检测算法&#xff0c;称…...

Golang | Leetcode Golang题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; func twoSum(numbers []int, target int) []int {low, high : 0, len(numbers) - 1for low < high {sum : numbers[low] numbers[high]if sum target {return []int{low 1, high 1}} else if sum < target {low} else {high--}}r…...

贵阳建网站/生成关键词的软件免费

今天的演讲主要包括三个部分&#xff1a;第一部分是物联网的行业痛点和区块链带来的优势&#xff0c;第二部分是区块链物联网的产业现状和应用场景&#xff0c;第三部分是区块链物联网的挑战和可新标准的需求。物联网在长期发展演进过程中&#xff0c;遇到了以下5个行业痛点&am…...

注册网站需要备案吗/公司网站与推广

当建立一个UDP的socket用于网络通讯时&#xff0c;我们需要先为这个socket绑定一个本地端口号。因为端口在一台主机上是用于标识进程的&#xff0c;如果没有端口号&#xff0c;当收到来自对端主机的报文时&#xff0c;就不知道应该由哪一个进程来接收这个报文。但有时&#xff…...

成都网站建设sm1010/平台怎样推广

2019独角兽企业重金招聘Python工程师标准>>> 简介 FCGI全称Fast Common Gateway Interface&#xff08;快速通用网关协议&#xff09;&#xff0c;是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口&#xff08;CGI&#xff09;的增强版本&#xf…...

网站主页 内页 关键词 一样/怎么样在百度上推广自己的产品

#oracle帐号多少次无效登录后锁定&#xff0c;锁定的天数#首先建立profile文件&#xff0c;再指定用户属于profile#如帐号xiaoming&#xff0c;profile 为aaa&#xff0c;输入3次无效密码后锁定&#xff0c;锁定2天create profile aaa limit failed_login_attempts 3 password…...

做网站的地方/百度竞价广告推广

嵌入式Linux的GDB调试环境由Host和Target两部分组成&#xff0c;Host端使用arm&#xff0d;linux&#xff0d;gdb&#xff0c;Target Board端使用gdbserver。调试时&#xff0c;应用程序在嵌入式目标系统上运行&#xff0c;而gdb调试在Host端。 一、编译安装gdbgdbserver 这是我…...

电商saas/seo根据什么具体优化

这是在去年用WORD记录的一点感想&#xff0c;呵呵&#xff0c;先搬出点老本来&#xff01; 昨天晚上和一个的同仁一起喝酒休闲&#xff0c;我们讨论的几个问题&#xff0c;管理在企业中的作用和价值&#xff0c;为什么中国人的企业管理不够精细&#xff1f;如何发挥管理的效应…...