You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codeigniter 3博客分页仅显示第一页问题求助

解决CodeIgniter 3.1.8分类文章分页仅显示第一页的问题

你的分页失效核心问题很明确:一是模型方法没用到传入的分页参数,二是控制器的分页逻辑不完整。我来一步步帮你修复:

1. 修复Posts_model中的get_posts_by_category方法

你定义了$limit和$offset参数,但完全没在查询里使用,导致每次都会返回该分类下的所有文章,分页自然无法生效。修改后的代码如下:

public function get_posts_by_category($id, $limit, $offset) {
    $this->db->order_by('posts.id', 'DESC');
    $this->db->join('categories', 'categories.id = posts.cat_id');
    // 加入limit和offset实现分页查询
    $this->db->limit($limit, $offset);
    $query = $this->db->get_where('posts', array('cat_id' => $id));
    return $query->result();
}

另外,还需要新增一个方法来获取该分类下的文章总数,用于分页计算总页数:

public function get_post_count_by_category($id) {
    $this->db->where('cat_id', $id);
    return $this->db->count_all_results('posts');
}

2. 完善Categories控制器的posts方法

你原代码没写完,我帮你补全完整的分页逻辑:

public function posts($id, $offset = 0) {
    // 加载分页库(如果没在autoload.php里配置自动加载的话)
    $this->load->library('pagination');

    // 分页核心配置
    $config['base_url'] = base_url('categories/posts/' . $id);
    $config['total_rows'] = $this->posts_model->get_post_count_by_category($id); // 分类下总文章数
    $config['per_page'] = 5; // 每页显示5篇,可按需调整
    $config['uri_segment'] = 4; // 页码在URL的第4段:categories/posts/[分类ID]/[页码]
    
    // 可选:自定义分页样式(适配你的前端框架)
    $config['full_tag_open'] = '<nav><ul class="pagination">';
    $config['full_tag_close'] = '</ul></nav>';
    $config['num_tag_open'] = '<li class="page-item">';
    $config['num_tag_close'] = '</li>';
    $config['cur_tag_open'] = '<li class="page-item active"><a class="page-link" href="#">';
    $config['cur_tag_close'] = '</a></li>';

    // 初始化分页配置
    $this->pagination->initialize($config);

    // 获取当前页的文章数据
    $data['posts'] = $this->posts_model->get_posts_by_category($id, $config['per_page'], $offset);
    $data['category'] = $this->categories_model->get_category($id); // 可选:获取分类信息用于页面标题
    $data['pagination_links'] = $this->pagination->create_links();

    // 加载视图
    $this->load->view('templates/header', $data);
    $this->load->view('categories/posts_list', $data);
    $this->load->view('templates/footer');
}

3. 关键注意事项

  • 确保你的URL结构正确,测试时可以访问类似http://yourdomain.com/categories/posts/1/5的地址,确认第二页是否能加载对应数据;
  • 如果分页样式显示异常,直接调整$config里的标签配置即可,或者适配你正在使用的前端框架样式;
  • 若你的项目开启了自定义路由,要保证路由规则支持categories/posts/[分类ID]/[页码]这种参数传递格式。

这样修改后,分页就能正常工作了,每一页都会加载对应数量的分类文章,分页链接也能正确跳转。

内容的提问来源于stack exchange,提问作者Razvan Zamfir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:35:22