CodeIgniter3单视图双分页页码高亮异常问题求助
CodeIgniter 3 双分页表格页码高亮失效问题解决
问题描述
需在CodeIgniter 3视图中实现两个独立分页表格,目前表格可正常显示,但切换第一个表格分页功能正常,切换第二个表格至第二页时,对应页码的高亮效果不生效。
原代码问题分析
控制器配置问题
- 第二个分页的
base_url硬拼接了第一个分页的URI分段值,导致分页类无法正确识别当前页码位置,无法激活active样式 - 模型方法调用错误:用统计方法
get_count_pending_applications/get_count_open_applications去获取列表数据,应该调用对应的列表方法 - 初始化分页与获取页码的顺序颠倒,影响分页类对当前页的判断
模型代码问题
get_count_open_applications方法存在未闭合的if(empty($searchBook))语句,导致语法错误
修复方案
1. 修正控制器代码
$data['title'] = 'Dashboard '; $configPendingDash = array(); $configOpenDash = array(); // 第一个分页(Pending)配置 $configPendingDash["base_url"] = base_url("Users/dashboard"); $configPendingDash["total_rows"] = $this->Users_model->get_count_pending_applications(); $configPendingDash["per_page"] = 5; $configPendingDash["uri_segment"] = 3; // 第二个分页(Open)配置 - 移除动态拼接的URI值 $configOpenDash["base_url"] = base_url("Users/dashboard"); $configOpenDash["total_rows"] = $this->Users_model->get_count_open_applications(); $configOpenDash["per_page"] = 5; $configOpenDash["uri_segment"] = 4; // 以下分页HTML结构配置保持不变 $configPendingDash['full_tag_open'] = '<div class="pagination">'; $configPendingDash['full_tag_close'] = '</div>'; $configPendingDash['first_link'] = 'First'; $configPendingDash['last_link'] = 'Last'; $configPendingDash['first_tag_open'] = '<li class="page-item"><span class="page-link">'; $configPendingDash['first_tag_close'] = '</span></li>'; $configPendingDash['prev_link'] = '«'; $configPendingDash['prev_tag_open'] = '<li class="page-item"><span class="page-link">'; $configPendingDash['prev_tag_close'] = '</span></li>'; $configPendingDash['next_link'] = '»'; $configPendingDash['next_tag_open'] = '<li class="page-item"><span class="page-link">'; $configPendingDash['next_tag_close'] = '</span></li>'; $configPendingDash['last_tag_open'] = '<li class="page-item"><span class="page-link">'; $configPendingDash['last_tag_close'] = '</span></li>'; $configPendingDash['cur_tag_open'] = '<li class="page-item active"><a class="page-link" href="#">'; $configPendingDash['cur_tag_close'] = '</a></li>'; $configPendingDash['num_tag_open'] = '<li class="page-item"><span class="page-link">'; $configPendingDash['num_tag_close'] = '</span></li>'; $configOpenDash['full_tag_open'] = '<div class="pagination">'; $configOpenDash['full_tag_close'] = '</div>'; $configOpenDash['first_link'] = 'First'; $configOpenDash['last_link'] = 'Last'; $configOpenDash['first_tag_open'] = '<li class="page-item"><span class="page-link">'; $configOpenDash['first_tag_close'] = '</span></li>'; $configOpenDash['prev_link'] = '«'; $configOpenDash['prev_tag_open'] = '<li class="page-item"><span class="page-link">'; $configOpenDash['prev_tag_close'] = '</span></li>'; $configOpenDash['next_link'] = '»'; $configOpenDash['next_tag_open'] = '<li class="page-item"><span class="page-link">'; $configOpenDash['next_tag_close'] = '</span></li>'; $configOpenDash['last_tag_open'] = '<li class="page-item"><span class="page-link">'; $configOpenDash['last_tag_close'] = '</span></li>'; $configOpenDash['cur_tag_open'] = '<li class="page-item active"><a class="page-link" href="#">'; $configOpenDash['cur_tag_close'] = '</a></li>'; $configOpenDash['num_tag_open'] = '<li class="page-item"><span class="page-link">'; $configOpenDash['num_tag_close'] = '</span></li>'; // 先获取当前页码,再初始化分页 $page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0; $page2 = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0; // 初始化第一个分页 $this->pagination->initialize($configPendingDash); $data["pendinglink"] = $this->pagination->create_links(); // 初始化第二个分页 $this->pagination->initialize($configOpenDash); $data["openlink"] = $this->pagination->create_links(); // 修正模型方法调用:使用列表方法而非统计方法 $data['pending_applications'] = $this->Users_model->get_maximum_applications($configPendingDash["per_page"], $page); $data['open_applications'] = $this->Users_model->get_open_applications($configOpenDash["per_page"], $page2); $this->load->view('include/header', $data); $this->load->view('include/sidetopbar', $data); $this->load->view('user/dashboard', $data);
2. 修正模型代码
public function get_count_open_applications() { // 移除未闭合的无效判断语句 $this->db->where('col_status', 'OPEN'); $this->db->from($this->tbl_loan_application); return $this->db->count_all_results(); } public function get_count_pending_applications() { $this->db->where('col_status', 'PENDING'); $this->db->from($this->tbl_loan_application); return $this->db->count_all_results(); } public function get_maximum_applications($limit, $start) { $this->db->limit($limit, $start); $this->db->select('*'); $this->db->from($this->tbl_loan_application); $this->db->where('col_status', 'PENDING'); $this->db->order_by('loan_id','desc'); return $this->db->get()->result(); } public function get_open_applications($limit, $start) { $this->db->limit($limit, $start); $this->db->select('*'); $this->db->from($this->tbl_loan_application); $this->db->where('col_status', 'OPEN'); $this->db->order_by('loan_id','desc'); return $this->db->get()->result(); }
3. 视图代码补充
确保第二个表格的分页链接正确调用$openlink:
<div class="table-responsive"> <table class="table table-sm table-hover table-bordered"> <thead class="thead"> <?php if(empty($open_applications)){ echo "<strong>Whoops!</strong> Looks like there's no open loans as of the moment."; } else {?> <tr> <!-- 表头字段根据需求调整 --> <th scope="col">Name</th> <th scope="col">Company Code</th> <th scope="col">Status</th> </tr> <?php } ?> </thead> <tbody> <?php foreach($open_applications as $row): ?> <tr> <td><?php echo $row->col_full_name; ?></td> <td><?php echo $row->col_comp_code; ?></td> <td> <button class="btn btn-primary btn-xs">Open</button> <button class="btn btn-link btn-xs">View</button> </td> </tr> <?php endforeach; ?> </tbody> </table> <p><?php echo $openlink; ?></p> </div>
核心修复要点
- 分页URL配置:第二个分页的
base_url无需拼接动态值,保持与第一个分页一致的基础URL,CI会通过uri_segment自动识别页码位置 - 初始化顺序:必须先获取当前页码,再初始化分页配置,确保分页类能正确判断当前页
- 方法调用匹配:统计方法用于获取总条数,列表方法用于获取分页数据,避免调用混淆
- 语法错误修复:清理模型中未闭合的无效代码
内容的提问来源于stack exchange,提问作者charlesultor
相关产品推荐
相关产品推荐

