【实战教程】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…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
