可通过CI分页配置项完整重写HTML标签结构,如设置full_tag_open等12个tag配置为Bootstrap 5所需标签,并确保initialize()在create_links()前一次性传入全部配置;URL后缀需用preg_replace在生成后正则替换。

分页 HTML 标签结构怎么替换(不是改 class)
CI 的 create_links() 默认输出的是带 <div class="pagination"> 包裹的纯链接序列,没法直接换模板文件,但你可以用配置项逐层替换所有外层标签。关键不是“覆盖 CSS”,而是把生成逻辑里的 HTML 片段全换成你想要的结构。
<p>比如你要输出 Bootstrap 5 的 <code><nav><ul class="pagination"></ul></nav> 结构,就得显式重写全部 tag 配置:
-
full_tag_open→'<nav><ul class="pagination">'</ul></nav> -
full_tag_close→'
first_tag_open → '<li class="page-item">'</li>(注意:不能只写 <li>,否则 first_link 渲染时会缺容器)num_tag_open → '<li class="page-item">'</li>,num_tag_close → '
next_tag_open 和 prev_tag_open 同样要配对,否则下一页按钮会丢掉 <li>
漏掉任意一个 _tag_open / _tag_close 对,对应位置就会回退到默认空字符串或原始标签,导致 DOM 结构断裂。
为什么设置了 full_tag_open 却没生效
常见原因是配置传入时机不对:$this->pagination->initialize() 必须在调用 create_links() 前执行,且配置数组必须完整传递——CI 不会合并默认值和你传入的部分,而是全量覆盖。如果只传了 full_tag_open,其他如 first_tag_open 等会变成 NULL,最终渲染时被跳过。
正确做法是把所有 tag 配置一次性写进初始化数组,不要拆开赋值:
$config = [
'full_tag_open' => '<nav><ul class="pagination">',
'full_tag_close' => '</ul></nav>',
'first_tag_open' => '<li class="page-item">',
'first_tag_close'=> '</li>',
'num_tag_open' => '<li class="page-item">',
'num_tag_close' => '</li>',
'next_tag_open' => '<li class="page-item">',
'next_tag_close' => '</li>',
'prev_tag_open' => '<li class="page-item">',
'prev_tag_close' => '</li>',
// ... 其他必要参数(base_url、total_rows 等)
];
另外注意:CI 3.x 中这些配置项名区分大小写,写成 Full_tag_open 或 full_Tag_open 都会被忽略。
next_link 和 prev_link 显示文字还是图标
默认值是 '>' 和 ',纯文本。想换成 Font Awesome 图标,直接赋值即可,但得处理引号和转义:
- 写成
next_link => '<i class="fa fa-chevron-right"></i>'(单引号内用双引号,不需转义) - 若用双引号包裹整个字符串,内部双引号必须转义:
"<i class='\"fa' fa-chevron-right></i>" - 别在
next_link里写 JavaScript,比如onclick="return false;"—— CI 会把它当 URL 路径拼进去,链接直接失效
更稳妥的方式是留空 next_link,靠 CSS 控制箭头样式,或在视图中用 JS 动态注入图标,避免服务端拼 HTML 的转义风险。
URL 后缀(.html)怎么加到分页链接里
CI 原生不支持给分页链接自动加后缀,比如要把 /news/page/3 变成 /news/page/3.html,得手动干预 create_links() 输出结果。
最轻量的做法是在控制器里拿到生成的 HTML 后做一次正则替换:
$links = $this->pagination->create_links();
$url_suffix = '.html';
$links = preg_replace('/\/(\d+)(?![\d\.])/', '/$1' . $url_suffix, $links);
注意两点:
- 别用
str_replace('/page/', '/page' . $url_suffix . '/')这种硬编码,URI 路由可能不含page字段 - 正则里加
(?![\d\.])是防止把/123.45这类数字带小数点的路径误替换
这个替换必须放在 create_links() 之后、传给视图之前,且不能重复执行(否则第二次会把 /3.html 再改成 /3.html.html)。

















