CodeIgniter分页生成多余页面链接问题排查
解决CodeIgniter分页多生成不必要页码的问题
嘿,我来帮你搞定这个分页的小bug!你说的情况很典型——总共有2条记录,每页显示2条,结果却出现了页码2的链接,这明显不符合预期对吧?咱一步步来排查解决:
最可能的问题:总记录数计算错误
CodeIgniter的分页类是靠total_rows和per_page来计算页码数的,要是total_rows的值不对,分页链接肯定会出问题。比如你不小心把带LIMIT的查询结果数当成总记录数传进去,那逻辑就乱了。
先检查控制器里的分页配置
确保你给total_rows传的是不带任何限制的总记录数,而不是当前页的记录数。举个正确的写法:
public function index() { $this->load->library('pagination'); // 分页核心配置 $config['base_url'] = base_url('users/index'); $config['per_page'] = 2; // 重点:这里必须是总记录数,不是当前页的条数! $config['total_rows'] = $this->users_model->count_total_users(); // 可选:调整分页链接的显示样式 $config['num_links'] = 1; $config['use_page_numbers'] = TRUE; $config['cur_tag_open'] = '<span class="active-page">'; $config['cur_tag_close'] = '</span>'; $this->pagination->initialize($config); // 获取当前页码,默认第一页 $current_page = $this->uri->segment(3) ? $this->uri->segment(3) : 1; $offset = ($current_page - 1) * $config['per_page']; // 带分页的用户列表查询 $data['users'] = $this->users_model->get_paginated_users($config['per_page'], $offset); $data['pagination_links'] = $this->pagination->create_links(); $this->load->view('users/list', $data); }
再检查模型的计数方法
模型里的计数方法必须返回所有符合条件的总记录数,如果有筛选条件(比如按角色、分支过滤),计数查询也要带上相同的条件,不能直接用count_all:
// 模型users_model.php public function count_total_users() { // 如果有查询条件,比如只查某个分支的用户,要加上where // $this->db->where('branch_id', $some_id); return $this->db->count_all_results('users'); } // 带分页的用户查询方法 public function get_paginated_users($limit, $offset) { // 同样要带上和计数方法一样的筛选条件 // $this->db->where('branch_id', $some_id); return $this->db->get('users', $limit, $offset)->result(); }
其他可能的排查点
- 确认总记录数确实是2:可以在控制器里加
var_dump($config['total_rows']);看看输出是不是2,如果是3或者其他数,那肯定会多出来页码。 - 检查分页类版本:老版本的CodeIgniter分页类可能有小bug,如果是CI3之前的版本,试试升级到稳定版。
- URL参数干扰:如果你的分页URL带了其他GET参数(比如
users/index?role=admin),要把参数加到base_url里,不然分页链接可能会丢失参数,虽然这一般不会导致多生成页码,但也可以排查下:$config['base_url'] = base_url('users/index') . '?role=' . $this->input->get('role');
按照上面的步骤排查,应该就能解决页码2不该显示的问题啦!
内容的提问来源于stack exchange,提问作者bhavesh
相关产品推荐
相关产品推荐

