CodeIgniter分页无法生成链接,请求排查代码错误原因
我帮你排查了CodeIgniter分页无法生成链接的问题,主要有几个关键错误点,下面逐个分析并给出修正方案:
核心错误点分析
Base URL未保留部门ID参数
你的base_url设置只到emp/emp/getByDept,但分页需要携带$idDept参数才能保证后续查询的正确性。如果不把部门ID拼接到base_url中,点击分页链接时会丢失这个关键参数,导致分页逻辑失效。缺少
per_page配置项
分页类必须知道每页显示的条数才能计算总页数和生成正确的分页链接。你在模型查询里用了limit => 2,但分页配置里没同步设置'per_page' => 2,这会让分页类无法正常工作。uri_segment设置错误uri_segment需要指定分页偏移量($offset)在URI中的固定段位置,而不是动态的$this->uri->total_segments()。因为用户点击不同分页时,URI总段数会变化,动态值会导致分页类无法正确识别偏移量。总记录数计算的性能问题(可选优化)
用count($this->employee->get(...))会先取出所有符合条件的记录再计数,数据量大时性能很差。建议新增一个专门统计总记录数的模型方法,直接执行COUNT(*)查询。
修正后的控制器代码
public function getByDept($idDept = NULL, $offset = 0) { // 处理部门ID为空的情况,比如跳转到员工列表页 if ($idDept === NULL) { redirect('emp/emp'); return; } // 分页配置(添加了必要参数和可选的Bootstrap样式) $config = array ( 'base_url' => site_url('emp/emp/getByDept/' . $idDept), // 携带部门ID 'total_rows' => $this->employee->count_by_dept($idDept), // 用专门的计数方法 'per_page' => 2, // 匹配每页显示条数 'uri_segment' => 5, // 偏移量在URI的第5段:emp/emp/getByDept/[idDept]/[offset] // 可选:Bootstrap分页样式配置 'full_tag_open' => '<ul class="pagination">', 'full_tag_close' => '</ul>', 'first_link' => '首页', 'last_link' => '末页', 'next_link' => '»', 'prev_link' => '«', 'cur_tag_open' => '<li class="active"><a href="#">', 'cur_tag_close' => '</a></li>', 'num_tag_open' => '<li>', 'num_tag_close' => '</li>' ); $this->pagination->initialize($config); // 获取分页数据 $data['employee'] = $this->employee->get(array( 'idDept' => $idDept, 'limit' => $config['per_page'], 'offset' => $offset )); $data['pagings'] = $this->pagination->create_links(); $this->load->view('emp/default', $data); }
模型补充代码
新增统计部门员工总数的方法:
public function count_by_dept($idDept) { $this->db->where('idDept', $idDept); return $this->db->count_all_results('your_employee_table'); // 替换为你的员工表名 }
确保你的get方法正确处理limit和offset参数:
public function get($params = array()) { if (!empty($params['idDept'])) { $this->db->where('idDept', $params['idDept']); } if (!empty($params['limit'])) { $offset = isset($params['offset']) ? $params['offset'] : 0; $this->db->limit($params['limit'], $offset); } return $this->db->get('your_employee_table')->result_array(); }
修正后的视图代码
修复了循环中多余的闭合div问题,保证HTML结构正确:
<div class="row"> <?php foreach ($employee as $row) : ?> <div class="col-xs-12 col-sm-6 col-md-6 margin-bottom-60px"> <div class="well well-sm"> <div class="col-sm-6 col-md-8"> <h4><?php echo $row["emp_name"];?></h4> <button class="btn btn-secondary btn-xs" onclick="view_master('<?php echo $row["id_aphris"] ?>')">Detail</button> </div><!-- /.col-sm-6 col-md-8 --> </div><!-- /.well well-sm --> </div><!-- /.col-xs-12 col-sm-6 col-md-6 --> <?php endforeach ?> <div id="paging" class="col-xs-12"> <?php echo $pagings; ?> </div><!-- /.pagination --> </div>
额外注意事项
- 确保你已经加载了
pagination库:可以在application/config/autoload.php中配置$autoload['libraries'] = array('pagination');,或者在控制器中手动加载$this->load->library('pagination');。
内容的提问来源于stack exchange,提问作者daud
相关产品推荐
相关产品推荐

