codeigniter分页需先加载库并配置total_rows、per_page、base_url等核心参数;ci3.x默认从uri第三段取页码,须手动同步limit/offset查询;链接样式可自定义,数据重复或缺失主因是总数与列表查询条件不一致。

CodeIgniter 分页类怎么初始化并配置基础参数
CI 的 Pagination 类不处理数据查询,只负责生成页码 HTML,必须配合手动分页逻辑(如 limit + offset)使用。初始化前得先加载类,并明确指定总记录数、每页条数、当前页码——这三个是硬性依赖。
-
$this->load->library('pagination')是前提,别漏掉 -
total_rows必须是真实总数(建议用count()单独查一次,别直接用带limit的查询结果 count) -
per_page建议设为变量,方便后续统一调整;若为 0 或负数,分页将失效且不报错,只显示第一页内容 -
base_url必须写全(含域名或相对路径),且需预留{page}占位符(CI 3.x)或用uri_segment(CI 4.x);写错会导致链接全部指向首页
CI 3.x 中 URL 分页参数怎么取、怎么传
CI 3.x 默认从 URI 第三段读取页码(如 /news/page/2),不是 GET 参数。如果你用的是 ?page=2 这种方式,pagination 类压根不会识别,页码永远是 1。
- 用 URI 路径方式:设置
uri_segment = 3(默认值),确保路由或控制器方法能接收该段,例如public function index($page = 1) - 改用 GET 方式:必须手动获取
$_GET['page']并传给initialize()的cur_page参数,同时关掉自动解析:use_page_numbers = FALSE,否则会冲突 - 注意:CI 3.x 的
cur_page值必须是整数,字符串如"2"会导致跳转异常;建议用(int) $this->uri->segment(3)强转
分页链接样式怎么自定义,避免和前端框架冲突
CI 默认生成的 <div class="pagination"> 和内部 <code><span></span>/<a></a> 标签结构固定,但 class 名可改,HTML 模板也可重写——尤其当你用 Bootstrap、Tailwind 或 Vue 渲染时,原生输出常会打架。
- 改 class 名:设置
full_tag_open、first_tag_open等参数,例如full_tag_open => '<nav><ul class="pagination">'</ul></nav> - 禁用默认标签:把
first_link、last_link设为空字符串,避免多余“首页”“末页”干扰 - 关键陷阱:
next_link和prev_link默认是文字(如>),不是图标;若你用 Font Awesome,得手动写成next_link => '<i class="fa fa-chevron-right"></i>',且确保引号转义正确 - 不要在
anchor()回调里拼接 JS 事件(如onclick="return false;"),CI 会把它当 URL 处理,导致链接失效
为什么分页后数据重复或缺失?常见数据层错误
最典型的症状是:点第 2 页,数据显示第 1 页的内容;或总数 100 条、每页 10 条,但第 10 页只显示 5 条。问题几乎 100% 出在 SQL 查询没同步应用 limit 和 offset,或 offset 计算错误。
立即学习“PHP免费学习笔记(深入)”;
- offset 公式必须是:
($this->uri->segment(3) - 1) * $config['per_page'](CI 3.x 路径模式),不是直接用 segment 值 - 查总数和查列表必须用完全一致的
WHERE条件,否则total_rows和实际数据对不上;建议把条件抽成复用的私有方法 - 如果用了
GROUP BY或DISTINCT,COUNT(*)必须套一层子查询,否则总数不准(例如SELECT COUNT(*) FROM (SELECT DISTINCT ... ) AS t) - 数据库排序(
ORDER BY)必须显式指定,否则不同页可能因索引顺序不稳导致重复或跳行
CI 分页本身轻量,但和业务查询耦合极深;最容易被忽略的是「总数查询」和「列表查询」条件不一致,以及 URI 解析模式与实际路由不匹配——这两处出错,页面能渲染,但数据永远不对。











