直接传参控制render()输出结构无需改框架源码,render()支持运行时传入配置数组覆盖默认模板行为,常用配置包括theme、var_page、prev_text/next_text、current_class等。

直接传参控制render()输出结构
不需要改框架源码,render() 方法本身支持运行时传入配置数组,覆盖默认模板行为。常用可配项包括:
-
theme:用占位符拼接 HTML 结构,例如
'%UP_PAGE% <span>%NOW_PAGE%/%LAST_PAGE%</span> %DOWN_PAGE%',支持的占位符有%FIRST%、%UP_PAGE%、%LINKS%、%DOWN_PAGE%、%END%、%TOTAL%、%NOW_PAGE%、%LAST_PAGE% -
var_page:指定分页参数名,比如 URL 里用
?p=2,就得设'var_page' => 'p',否则点击后参数不生效 -
prev_text / next_text:自定义上一页/下一页文字,如
'prev_text' => '‹'、'next_text' => '›' - current_class:当前页码链接的 class 名,方便 CSS 精准控制样式
复制并修改默认分页模板文件
ThinkPHP 默认使用 Bootstrap 风格模板(位于 vendor/topthink/think-orm/src/paginator/driver/bootstrap4.php),你可以把它复制到项目内自定义路径,再通过配置启用:
- 新建目录
template/paginate/,把原模板拷贝过去并重命名为simple.php - 在
config/app.php或config/paginate.php中添加配置:'type' => 'Simple', 'view_path' => app_path() . 'template/paginate/' - 在
simple.php中完全自由编写 HTML,例如只保留“上一页/下一页”按钮 + 总数提示,或加入跳转输入框和 GO 按钮
确保分页链接携带完整查询参数
render() 生成的链接如果丢失搜索条件或路由变量,会直接导致 404 或数据错乱。关键补救方式是提前注入上下文:
- 用 withQuery() 透传全部 GET 参数:
$query->where('status', 1)->withQuery(input('param.'))->paginate(10) - 对带变量的路由(如
/user/:id),手动追加:->appends(['id' => $id]) - 若启用了 URL 后缀(如
.html),建议在 render() 中显式指定 base URL:{$list->render(['url' => url('user/index', [], false, true)])}
避免常见错误操作
有些写法看着合理,实际会破坏分页对象完整性:
立即学习“PHP免费学习笔记(深入)”;
- ❌ 不要先
select()再调paginate()—— 会报Call to undefined method think\Collection::paginate() - ❌ 不要用
count($list)获取总条数 —— 它返回的是当前页数据量;应始终用$list->total() - ❌ 不要在模板里尝试用
$_paginates或类似全局变量 —— ThinkPHP 不自动注入该变量,必须由控制器 assign 显式传入 - ❌ 不要直接修改 vendor 下的分页模板 —— 升级框架时会被覆盖,务必复制到应用目录再改



















