🗣 Wd提问: php分页thinkphp
🤖 Ai回答: 在 ThinkPHP 中实现分页功能非常简单,框架内置了强大的分页类 `think\paginator\driver\Bootstrap`(默认 Bootstrap 样式),你只需在控制器中调用模型查询并配合 `paginate()` 方法即可。
✅ 一、基础用法示例(控制器中)
php
<?php
namespace app\controller;
use app\BaseController;
use app\model\User; // 假设你有一个 User 模型
class UserController extends BaseController
{
public function index()
{
// 每页显示10条数据
$list = User::paginate([
'list_rows' = 10,
'page' = input('page', 1), // 当前页码,默认第1页
'query' = request()-param(), // 保留其他查询参数
]);
// 分配到模板
return view('index', [
'list' = $list
]);
}
}
✅ 二、模板中显示分页(view 文件)
在你的 `.html` 或 `.tpl` 模板文件中:
html
<table
<thead
<tr<thID</th<th用户名</th</tr
</thead
<tbody
{volist name=list id=vo}
<tr
<td{$vo.id}</td
<td{$vo.username}</td
</tr
{/volist}
</tbody
</table
<! 显示分页
<div class=pagination
{$list|raw}
</div
注意:ThinkPHP 6 默认输出的是带 HTML 的分页字符串,使用 `|raw` 防止被转义。
✅ 三、自定义每页数量 & URL 参数保留
php
$list = User::where('status', 1)
-paginate([
'list_rows' = 15, // 每页15条
'var_page' = 'p', // 自定义页码参数名,默认是 page
'query' = ['keyword' = $keyword], // 保留搜索关键词等参数
]);
模板访问时 URL 就会是:`?p=2&keyword=xxx`
✅ 四、自定义分页样式(可选)
如果你不想用 Bootstrap 样式,可以自定义分页驱动或修改模板。
方法1:发布分页模板(推荐)
运行命令生成分页模板:
bash
php think vendor:publish topthink/think-view
然后编辑 `view/paginator.html` 自定义样式。
方法2:自定义分页类
创建 `app\paginator\MyPaginator.php`:
php
<?php
namespace app\paginator;
use think\Paginator;
class MyPaginator extends Paginator
{
// 重写 render 方法来自定义 HTML 结构
public function render()
{
if ($this-hasPages()) {
return sprintf(
'<div class=my-pagination%s %s %s</div',
$this-getPreviousButton(),
$this-getLinks(),
$this-getNextButton()
);
}
return '';
}
}
然后在配置中指定:
php
// config/app.php
'paginate' = [
'type' = 'app\\paginator\\MyPaginator',
'list_rows' = 10,
],
✅ 五、AJAX 分页(前后端分离场景)
如果你是 AJAX 请求分页数据,可以返回 JSON:
php
public function ajaxList()
{
$list = User::paginate(10);
return json([
'data' = $list-items(),
'total' = $list-total(),
'per_page' = $list-listRows(),
'current_page' = $list-currentPage(),
'last_page' = $list-lastPage(),
]);
}
前端用 JS 控制页码跳转即可。
✅ 六、搜索 + 分页组合示例
php
public function search()
{
$keyword = input('keyword', '');
$query = User::where('username', 'like', %{$keyword}%);
$list = $query-paginate([
'list_rows' = 10,
'query' = ['keyword' = $keyword],
]);
return view('search', [
'list' = $list,
'keyword' = $keyword,
]);
}
模板中记得带上搜索框和当前 keyword:
html
<form method=get
<input type=text name=keyword value={$keyword} /
<button type=submit搜索</button
</form
📌 小贴士
`paginate()` 返回的是 `Paginator` 对象,不是数组。
使用 `$list-items()` 可获取当前页数据数组。
`$list-render()` 可手动输出分页 HTML。
支持 `simplePaginate()` 简单分页(不查总数,适合大数据)。
✅ 推荐阅读官方文档:
https://www.topthink.com/thinkphp6/paginate.html
如有更复杂需求(如联合查询分页、关联模型分页等),可继续提问!
📣 商家广告:





0
IP地址: 96.180.107.248
搜索次数: 0
提问时间: 2025-11-12 20:21:10
🛒 域名购买:
dk.gs
uq.gs
app.jl.cn
souzi.com.cn
kingwarchina.com
qg.biz
ww.js.cn
xiongsou.com.cn
jgqg.cn
5.he.cn
❓️ 热门提问:
vps新建网站
电脑1080ti主机
22域名抢注
北京的网站开发公司
云计算黑马
ip埃文
服务器机房的带宽
葛粉如何保存
那个搜索引擎最好用
php 文件上传 404 错误
豌豆Ai站群搜索引擎系统
🌐 域名评估:
su7.host
huev.cn
l.tw.cn
iveh.cn
vv.zj.cn
cxom.cn
vqxj.cn
mo.cx
pztz.cn
vtoltower.space
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
月饼生产厂家
站群平台
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。