thinkphp 6 的 render() 默认输出 bootstrap 样式,只需引入 bootstrap css 即可生效;若无 class,需检查是否误用 simple() 或 page()、是否切断分页对象上下文;保留查询参数须用 withquery() 或 appends(),结构合规(如、)和语义属性(aria-current、aria-disabled)不可缺失。

ThinkPHP 6 的 render() 默认就是 Bootstrap 样式
不用额外装插件、不用改源码、不用手动拼 HTML——只要项目里引入了 Bootstrap CSS,$list->render() 输出的 HTML 就自带 pagination、page-item、page-link 这些 class。前提是:你用的是 TP6(或 TP5.1+),且没显式禁用 Bootstrap 驱动。
常见错误现象:render() 输出一堆 <div><a></a></div>,没有 Bootstrap class。
- 检查是否误用了
simple():它不带页码列表,只输出上/下一页,且默认不走 Bootstrap 模板 - 确认分页对象来自
paginate()而非page():后者是低层方法,不绑定渲染器 - 别在控制器里调用
toArray()或items()后再传给模板:这会切断分页对象与 URL 上下文的关联,render()失效
render() 参数控制分页结构和 URL 行为
默认样式够用,但点击后跳转 404、参数丢失、页码不连续,八成是 render() 没传对参数,不是样式问题。
- 保留搜索条件等 query 参数:必须在控制器中用
withQuery(input('param.'))或appends(request()->param()),否则分页链接里只有?page=2,丢了&q=abc - 自定义分页参数名(比如用
p代替page):要同步设['var_page' => 'p'],不然点击时框架仍读$_GET['page'],拿不到值 - 强制指定分页链接路径(如伪静态):加
'path' => '/news',避免生成/index/news/index?page=2这类冗长 URL - 想换占位符文字?直接改
theme字符串,例如:['theme' => '%FIRST% %UP_PAGE% %LINKS% %DOWN_PAGE% %END%'],其中%LINKS%是核心页码区,不能删
Bootstrap 分页 HTML 结构必须合规,否则键盘/屏幕阅读器失效
即使 render() 输出了 class,如果外层结构错,语义和可访问性就垮了——这不是“不好看”,是残障用户根本无法操作。
- 最外层必须是
<nav aria-label="Page navigation"></nav>,不能只是<div> <li>分页容器必须是 <code><ul class="pagination"></ul>,不是<div class="pagination"> <li>每个页码项必须是 <code><li class="page-item"><a class="page-link">2</a></li>,禁用状态写<li class="page-item disabled"><a class="page-link" aria-disabled="true">上一页</a></li>,而不是给<a></a>加disabled属性(HTML 不允许) - 当前页的
<a></a>必须同时有class="active"和aria-current="page",缺一不可 - Bootstrap 分页的 class 命名非常规范,直接写 CSS 覆盖更安全:
.pagination .page-link:hover { background: #007bff; } - 需要响应式调整?用
@media (max-width: 768px)控制.pagination字体大小和 padding,比硬编码pagination-sm更可控 - 移动端点不准?给
.page-link加min-width: 36px; padding: .375rem .75rem;,别依赖 Bootstrap 默认值 - IE11 兼容问题?
pagination-sm里的 rem 单位需补 px 回退值,例如:font-size: 12px; font-size: .75rem;
真要深度定制样式,优先覆盖 CSS,而非重写 PHP 类
改 think\paginator\driver\Bootstrap.php 或派生新类,短期见效快,长期维护成本高——TP 升级时容易被覆盖,且所有项目逻辑耦合在一处。
真正难的从来不是“怎么让分页看起来像 Bootstrap”,而是确保每次点击都更新 URL、状态同步不丢参、键盘 Tab 可达、屏幕阅读器能播报“第 3 页,当前页”。这些细节一旦漏掉,美化就只剩空壳。











