【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);}
这个方法有三个参数
| 参数 | 类型 | 解释 |
| $listRows | int|array | 每页数量 数组表示配置参数 |
| $simple | int|bool | 是否简洁模式或者总记录数 |
| $config | array | 配置参数 |
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(),源码分析。 这个fastTime是它的成员变量,在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镜像,本文使用nacos2.0.3 三台服务器都要执行以下命令 docker pull nacos/nacos-server:v2.2.0准备挂载的日志目录和配置文件目录 日志:mkdir /usr/local/software/nacos/logs 配置文件:/usr/local/software/nacos/conf在配…...
centos查找文件 及 操作写入的进程
du -sh * 查看目录空间占用、发现大文件,确定进程,结束 yum install lsof 安装lsof 查看文件写入的 进程 2. lsof /root/.influxdbv2/engine/data/bab49411e5f7cbce/autogen/1/000000036-000000002.tsm COMMAND PID USER FD TYPE …...
构建高可用Java微服务架构的秘籍
构建高可用Java微服务架构的秘籍 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 随着云计算和分布式系统的快速发展,微服务架构已成为构建大型应用…...
VBA学习(18):VBA制作任意工作表均可使用的聚光灯
在需要制作聚光的工作簿,按<ALTF11>组合键,打开VBE编辑器。在右侧[工程资源管理器窗格]选中ThisWorkbook模块,将以下代码复制粘贴到该模块的代码窗口。 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target …...
【STM32-启动文件 startup_stm32f103xe.s】
STM32-启动文件 startup_stm32f103xe.s ■ STM32-启动文件■ STM32-启动文件主要做了以下工作:■ STM32-启动文件指令■ STM32-启动文件代码详解■ 栈空间的开辟■ 栈空间大小 Stack_Size■ .map 文件的详细介绍■ 打开map文件 ■ 堆空间■ PRESERVE8 和 THUMB 指令…...
51学习记录(一)——51介绍及震动感应灯
文章目录 前言一、STC89C522.内部结构及引脚 二、继电器原理及震动传感器原理三、项目搭建及实现 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出 提示:以下是本篇文章正文内容,下面案例可供参考 一、STC89C52 1.简介 所属系列:51单…...
2024GLEE生活暨教育(上海)博览会,8月20-22日,国家会展中心(上海)
2024GLEE生活暨教育(上海)博览会将于8月20-22日在中国国家会展中心(上海)举行,博览会总面积近万平方米,设有美好生活和教育产品两大主力展区,全面覆盖婴幼儿、学龄前、小学、初中、高中、大学、中年、老年各个年龄段的…...
debug调试高级功能 断点、布局 及Android Studio常用快捷按键使用详情
文章目录 debug断点篇:打临时断点(只用一次):alt断点条件断点:在断点上,点击右键,在Condition那里,设置我们需要的值,循环就会自动停到我们设置的那个值那里依赖断点&…...
51单片机STC89C52RC——6.1 中断系统
一,文字层面理解 反正我看下面的几段文字时脑壳没有正常运转。一个头几个大 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这…...
Redis源码学习:高性能Hash表的设计与实现
哈希表(Hash)是Redis数据库的数据类型之一,理解哈希表的实现对于掌握Redis非常重要。这篇文章,从哈希冲突和哈希扩展这两个角度,来一步步讲解Redis哈希表的工作原理。 什么是哈希表? 哈希表是一种通过哈希…...
如何防范常见的数据库安全问题
随着数据量的增加和系统的复杂性提高,数据库可能面临多种安全威胁,包括未授权访问、数据泄露、注入攻击等。 1. 未授权访问 未授权访问是指,未经授权的用户对数据库的内容进行访问。这会导致数据泄露、数据篡改或其他安全事故。 针对未授权访问的防范措施如下。 (1)强化…...
[Day 19] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
區塊鏈的數據透明性 區塊鏈技術作為一種分布式賬本技術,因其去中心化、不可篡改和高度透明的特性,已經在各行各業中得到了廣泛應用。在本文中,我們將深入探討區塊鏈的數據透明性,包括其原理、實現方法及相關代碼示例,…...
【Hadoop学习笔记】认识Hadoop
认识Hadoop 从网上找的课程做的笔记,有些图是自己理解画的,可能不正确,可以作为参考,有疑问的地方请直接指出,共同交流。 Hadoop是由Apache基金会开发的一个分布式系统基础架构,主要解决海量数据的存储和海…...
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+的项目经理,手把手教你如何复盘
复盘是一种重要的学习和改进工具,对于项目经理来说,能帮助识别项目中的成功与失败,为未来的项目管理提供宝贵经验。 理论部分 定义目标。在开始复盘之前,明确复盘的目标是什么。是为了找出项目中的问题并提出解决方案,…...
Web3新视野:Lumoz节点的潜力与收益解读
摘要:低估值、高回报、无条件退款80%...... Lumoz正通过其 zkVerifier 节点销售活动,引领一场ZK计算革命。 长期以来,加密市场以其独特的波动性和增长潜力,持续吸引着全球投资者的目光。而历史数据表明,市场往往在一年…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
