【实战教程】ThinkPHP6分页功能轻松实现,让你的网站更高效!
ThinkPHP是一款非常流行的PHP开发框架,其最新版本ThinkPHP6在性能和易用性方面都得到了很大的改善。分页功能是网页开发中非常常见的功能,而ThinkPHP6也提供了非常方便的分页方法。本文将介绍如何实现ThinkPHP6的分页功能。
一、了解分页功能
在Web应用程序中,当数据集非常庞大时,将所有结果都显示在一个页面上会导致页面的加载速度过慢,同时也不方便用户查看和管理数据。分页功能就是将数据集分成多个页面,每个页面只显示一部分数据。这样可以大大减少页面加载时间,同时也方便用户浏览和管理数据。
二、实现ThinkPHP6的分页功能
ThinkPHP6提供了非常方便的分页方法,只需要通过几个简单的步骤就可以实现分页功能。
1. 安装Pagination组件
ThinkPHP6提供了一个Pagination组件,需要在composer.json文件中添加以下代码:
"require": {"topthink/think-pagination": "^1.0"
}
然后使用命令composer update安装组件。
2. 在控制器中使用分页
在控制器中使用分页的步骤如下:
首先,获取数据表中的记录总数。使用以下代码:
$total = Db::name('user')->count();
其中,Db是ThinkPHP6中的数据库操作类,name(‘user’)表示获取user表的数据,count()表示获取数据总数。
接下来,设置每页显示的记录数和当前页码数。使用以下代码:
$pageSize = 10; //每页显示10条记录
$pageNo = 1; //默认显示第1页
if (!empty($_GET['page'])) {$pageNo = intval($_GET['page']); //获取当前页码数
}
其中,intval()函数用于将字符串转换为整数。
接着,根据每页显示的记录数和当前页码数计算出需要显示的记录范围。使用以下代码:
$offset = ($pageNo - 1) * $pageSize;
$rows = Db::name('user')->limit($offset, $pageSize)->select();
其中,limit()方法用于限制查询结果的范围,第一个参数表示偏移量,第二个参数表示获取的记录数。
最后,将获取的记录传递给视图,并调用Pagination组件进行分页显示。使用以下代码:
$this->assign('rows', $rows);
$this->assign('total', $total);
$this->assign('pageSize', $pageSize);
$this->assign('pageNo', $pageNo);
return $this->fetch()->extend('pagination');
其中,assign()方法用于传递变量给模板,fetch()方法用于调用模板文件,extend(‘pagination’)表示使用Pagination组件进行分页显示。
3. 在视图中实现分页
在视图文件中实现分页的步骤如下:
首先,在页面底部显示分页栏。使用以下代码:
<div class="pagination">{$page->render()}
</div>
其中,$page表示Pagination实例,render()方法用于生成分页HTML代码。
接着,设置分页样式。使用以下代码:
hinkacadeView::getPager()->setConfig('prev', '上一页');hinkacadeView::getPager()->setConfig('next', '下一页');hinkacadeView::getPager()->setConfig('theme', '%totalRow% %header% %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%');
其中,setConfig()方法用于设置分页样式。%totalRow%表示显示总记录数,%header%表示当前页码,%upPage%表示上一页,%downPage%表示下一页,%first%表示第一页,%prePage%表示上一组页码,%linkPage%表示当前页码组,%nextPage%表示下一组页码,%end%表示最后一页。
注意:在设置分页样式之前,需要调用use thinkPaginator;命名空间。
4. 完整代码示例
下面是实现ThinkPHP6的分页功能的完整代码示例:
use thinkDb;
use thinkPaginator;class UserController extends Controller
{public function index(){$total = Db::name('user')->count();$pageSize = 10; //每页显示10条记录$pageNo = 1; //默认显示第1页if (!empty($_GET['page'])) {$pageNo = intval($_GET['page']); //获取当前页码数}$offset = ($pageNo - 1) * $pageSize;$rows = Db::name('user')->limit($offset, $pageSize)->select();$this->assign('rows', $rows);$this->assign('total', $total);$this->assign('pageSize', $pageSize);$this->assign('pageNo', $pageNo);Paginator::useBootstrap();Paginator::currentPageResolver(function () use ($pageNo) {return $pageNo;});Paginator::pagination($total, $pageSize, $pageNo);hinkacadeView::getPager()->setConfig('prev', '上一页');hinkacadeView::getPager()->setConfig('next', '下一页');hinkacadeView::getPager()->setConfig('theme', '%totalRow% %header% %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%');return $this->fetch()->extend('pagination');}
}
三、总结
通过上述步骤,我们成功地实现了ThinkPHP6的分页功能。相信通过本文的介绍,读者可以轻松地在自己的网站中添加分页功能,提高网站的用户体验。
学习资料:点此下载
相关文章:
【实战教程】ThinkPHP6分页功能轻松实现,让你的网站更高效!
ThinkPHP是一款非常流行的PHP开发框架,其最新版本ThinkPHP6在性能和易用性方面都得到了很大的改善。分页功能是网页开发中非常常见的功能,而ThinkPHP6也提供了非常方便的分页方法。本文将介绍如何实现ThinkPHP6的分页功能。 一、了解分页功能 在Web应用…...
专业130+总分380+哈尔滨工程大学810信号与系统考研经验水声电子信息与通信
今年专业课810信号与系统130,总分380顺利考上哈尔滨工程大学,一年的努力终于换来最后的录取,期中复习有得有失,以下总结一下自己的复习经历,希望对大家有帮助,天道酬勤,加油!专业课&…...
旅游项目day08
1. 旅游日记(游记) 后端:实体类,列表,查看,审核 前端:目的地明细中-游记->带范围条件查询,游记首页,【扩展】游记添加/编辑,【扩展】添加游记时间没登录时…...
蓝桥杯真题(Python)每日练Day2
题目 题目分析 对于本题首先确定其数据结构为优先队列,即邮费最小的衣服优先寄,算法符合贪心算法。可以直接使用queue库的PriorityQueue方法实现优先队列。关于PriorityQueue的使用方法主要有: import queue q queue.Queue()# 队列 pq qu…...
IntelliJ IDEA 拉取gitlab项目
一、准备好Gitlab服务器及项目 http://192.168.31.104/root/com.saas.swaggerdemogit 二、打开 IntelliJ IDEA安装插件 打开GitLab上的项目,输入项目地址 http://192.168.31.104/root/com.saas.swaggerdemogit 弹出输入登录用户名密码,完成。 操作Comm…...
RHCSA上课笔记(前半部分)
第一部分 网络服务 第一章 例行性工作 1.单一执行的例行性工作 单一执行的例行性工作(就像某一个时间点 的闹钟):仅处理执行一次 1.1 at命令:定时任务信息 [rhellocalhost ~]$ rpm -qa |grep -w at at-spi2-core-2.40.3-1.el9.x…...
C++代码入门05 字符串容器
图源:文心一言 上机题目练习整理,本篇作为字符串容器的代码,提供了常规解法及其详细解释,供小伙伴们参考~🥝🥝 第1版:在力扣新手村刷题的记录~🧩🧩 方法:常…...
vue3 项目中 arguments 对象获取失败问题
问题 在 vue3 项目中 获取到的 arguments 对象与传入实参不符,打印出函数中的 arguments 对象显示如下: 原因 作者仔细回看代码才发现,自己一直用的是 vue3 的组合式写法,函数都是箭头函数,而箭头函数不存在 argumen…...
12.线程同步
12.线程同步 1. 为什么需要线程同步2. 互斥锁2.1 互斥锁初始化2.1.1 PTHREAD_MUTEX_INITIALIZER 宏初始化2.1.2 使用函数初始化 2.2 加锁和解锁2.3 pthread_mutex_trylock()2.4 销毁互斥锁2.5 互斥锁死锁2.6 互斥锁的属性 3. 条件变量3.1 条件变量初始化3.2 通知和等待条件变量…...
开发安全之:System Information Leak: External
Overview 在调用 error_reporting() 过程中,程序可能会显示系统数据或调试信息。由 error_reporting() 揭示的信息有助于攻击者制定攻击计划。 Details 当系统数据或调试信息通过套接字或网络连接使程序流向远程机器时,就会发生外部信息泄露。 示例 1…...
burp靶场--文件上传
burp靶场–文件上传 https://portswigger.net/web-security/file-upload/lab-file-upload-remote-code-execution-via-web-shell-upload 1.文件上传 1、原理:文件上传漏洞是指Web服务器允许用户将文件上传到其文件系统,而不充分验证文件的名称、类型、…...
mac 中vscode设置root启动
1. 找到你的vscode app,点击鼠标右键------->选项----->在访达中显示 2. 终端中输入以下命令,不要点回车,不要点回车,输入一个空格 sudo chflags uchg 3. 然后将你的程序拖到终端,会自动…...
【MySQL数据库专项 一】一个例子讲清楚数据库三范式
好的,让我们以学校数据库中的一个表为例来说明第一范式(1NF)、第二范式(2NF)和第三范式(3NF)的概念。 什么是数据库三范式 数据库的范式(Normalization)是一组关于数据…...
【笔记】关于期刊
什么是统计源期刊 统计源期刊,全称为“中国科技论文统计源期刊”,也称作中国科技核心期刊,是由中国科技信息研究所(ISTIC)受国家科技部委托,选定的一系列在中国出版的高质量自然科学类学术期刊。这些期刊是…...
SpringMVC-.xml的配置
文章目录 一、对pom.xml的配置二、对web.xml1.第一种方式2. 第二种方式 三、对SpringMVC.xml的配置 一、对pom.xml的配置 <!-- 打包成war包--><packaging>war</packaging> <dependencies><!-- SpringMVC--><dependency><gro…...
Java找二叉树的公共祖先
描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节…...
《Linux高性能服务器编程》笔记03
Linux高性能服务器编程 本文是读书笔记,如有侵权,请联系删除。 参考 Linux高性能服务器编程源码: https://github.com/raichen/LinuxServerCodes 豆瓣: Linux高性能服务器编程 文章目录 Linux高性能服务器编程第07章 Linux服务器程序规范7.1日志7.2用…...
Java毕业设计-基于ssm的网上求职招聘管理系统-第85期
获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的网上求职招聘管理系统:前端 jsp、jquery,后端 springmvc、spring、mybatis,角色分为管理员、招聘人员、用户;集成…...
UDP和TCP
UDP协议是一种不可靠的、面向无连接的协议。在通信过程中,它并不像TCP那样需要先建立一个连接,只要(目的地址,端口号,源地址,端口号)确定了,就可以直接发送信息报文,并且…...
【C++】vector容器接口要点的补充
接口缩容 在VS编译器的模式下,类似于erase和insert接口的函数通常会进行缩容,因此,insert和erase行参中的迭代器可能会失效。下图中以erase为例: 代码如下: #include <iostream> #include <vector> #inclu…...
STM32F407上LVGL内存爆了?别急着改.s文件,先学会用Keil的map文件精准定位(附FreeRTOS内存分配分析)
STM32F407上LVGL内存爆了?别急着改.s文件,先学会用Keil的map文件精准定位(附FreeRTOS内存分配分析) 在嵌入式开发中,内存管理就像是在玩一场高难度的俄罗斯方块游戏。特别是当我们尝试在STM32F407这样的资源受限MCU上运…...
OpenClaw飞书机器人实战:GLM-4.7-Flash智能问答系统搭建
OpenClaw飞书机器人实战:GLM-4.7-Flash智能问答系统搭建 1. 为什么选择OpenClaw飞书GLM组合? 去年我负责团队的知识库建设时,每天要处理上百条技术咨询。传统FAQ文档的维护成本高,而商业客服系统又超出预算。直到发现OpenClaw这…...
新手福音:利用快马一键生成mobaxterm中文界面配置脚本
作为一个经常需要远程连接服务器的用户,MobaXterm一直是我的主力工具之一。但刚开始使用时,全英文的界面确实让我这个新手有点手足无措。最近发现用InsCode(快马)平台可以快速生成配置脚本,简直不要太方便! 为什么需要中文界面 对…...
EEGLAB进阶实战:从原始EEG到ERP成分的精准提取与可视化分析
1. EEGLAB入门:理解ERP分析的核心流程 第一次接触EEGLAB时,我被它强大的功能和复杂的界面弄得晕头转向。经过多次实战,我发现理解ERP分析的完整流程是关键。就像做菜需要先备料再烹饪一样,EEG数据处理也需要遵循特定步骤。 原始EE…...
FastMoss TikTok电商数据爬取实战:JS逆向与MD5签名破解
1. FastMoss TikTok电商数据爬取的核心挑战 最近在研究FastMoss平台的TikTok电商数据爬取,发现最大的难点在于请求签名加密。当你访问https://www.fastmoss.com/zh/e-commerce/saleslist这个页面时,切换周榜会触发一个带有fm-sign签名的加密请求。这个签…...
计算机毕设 java 基于 Javaweb 的家教管理系统 智能家教匹配管理系统 家教服务综合平台
计算机毕设 java 基于 Javaweb 的家教管理系统 f7xm39(配套有源码 程序 mysql 数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联 xi 可分享随着家庭教育需求的不断增长,家教市场规模持续扩大,但传统家教模式…...
Windows环境下Nacos-Server 2.4.0.1的安装与MySQL配置实战
1. 环境准备与安装包下载 在Windows系统上部署Nacos-Server 2.4.0.1之前,我们需要先做好基础环境准备。这里我建议使用Windows 10或更高版本的操作系统,实测在Windows 7上可能会遇到兼容性问题。首先确保你的机器已经安装了Java 8或Java 11运行环境&…...
智慧工业之电子元器件识别 手绘电路图识别 电路图工作原理模拟器 电子设备自动化检测数据集 元器件分拣数据集 电路故障诊数据第10616期
电子元器件目标检测数据集 README项目概述 本数据集聚焦于电子设备与电路场景下的元器件识别任务,为工业视觉检测、电子设备自动化拆解与智能维修等领域提供高质量标注数据,助力电子制造与维护的智能化升级。核心数据信息维度内容数据类别共45类…...
AI 模型推理容器化性能优化方案
AI模型推理容器化性能优化方案 随着AI技术的快速发展,模型推理在生产环境中的部署需求日益增长。容器化技术凭借其轻量级、可移植性和高效资源管理的优势,成为AI模型部署的主流选择。在实际应用中,如何优化容器化AI推理的性能,降…...
Tiled2Unity:解决Tiled地图与Unity引擎无缝集成的自动化转换方案
Tiled2Unity:解决Tiled地图与Unity引擎无缝集成的自动化转换方案 【免费下载链接】Tiled2Unity Export Tiled Map Editor (TMX) files into Unity 项目地址: https://gitcode.com/gh_mirrors/ti/Tiled2Unity Tiled2Unity是一款开源工具,核心功能是…...
