CodeIgniter分页记录计数显示异常:第二页计数未更新
解决分页记录计数显示异常的问题
嘿,我一眼就看出你这问题出在当前页码的计算逻辑上,咱们一步步捋清楚:
原代码的核心错误
你写的这段代码:
$curpage=floor(($this->uri->segment(1)/$config['per_page']) + 1);
有两个致命问题:
- 取错了URL分段:
$this->uri->segment(1)获取的是URL的第一个分段,通常是控制器名称(比如你的URL是yourdomain.com/post/list/5,segment(1)是post,不是分页偏移量5)。用字符串除以数字会得到0,所以$curpage永远等于1,自然计数一直显示第一页的内容。 - 没必要用floor:分页偏移量本身就是
每页条数的整数倍(CodeIgniter分页类会自动处理),直接计算就行,不需要取整。
修复后的完整代码
我给你调整了逻辑,同时处理了边界情况(比如最后一页条数不足每页上限的情况):
// 1. 获取正确的分页偏移量:默认取URL第3段,不存在则为0(第一页) // 注意:如果你的偏移量在其他分段(比如segment(2)),对应修改数字即可 $offset = $this->uri->segment(3, 0); // 2. 从配置中取出总条数和每页条数 $total = $config["total_rows"]; $per_page = $config['per_page']; // 3. 计算当前页码:偏移量/每页条数 + 1(因为偏移量从0开始) $curpage = ($offset / $per_page) + 1; // 4. 计算显示的起始和结束条数 $result_start = $offset + 1; $result_end = $offset + $per_page; // 处理最后一页的边界情况:如果结束条数超过总条数,直接取总条数 if ($result_end > $total) { $result_end = $total; } // 5. 拼接最终显示文本 $display_text = "显示{$result_start}-{$result_end}条,共{$total}条";
验证你的例子
假设总条数10,每页5条:
- 第一页偏移量是
0:显示1-5条,共10条(正确) - 第二页偏移量是
5:显示6-10条,共10条(符合你的预期,你之前写的“显示第10条”应该是笔误啦)
额外注意点
如果你的路由做了自定义配置,分页偏移量不在URL第3段,一定要修改$this->uri->segment()的参数,比如如果URL是yourdomain.com/post/5,那偏移量在segment(2),就改成$this->uri->segment(2, 0)。
内容的提问来源于stack exchange,提问作者MSZ900
相关产品推荐
相关产品推荐

