🗣 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地址: 86.230.130.217
搜索次数: 201
提问时间: 2025-12-23 06:02:44
本站所有
❓
问答
均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
本站由
🟢
豌豆Ai
提供技术支持,使用的最新版:
豌豆Ai站群搜索引擎系统 V.25.10.25
搭建本站。