CodeIgniter 4 如何将模型方法与分页同行编写实现多列表独立分页
CodeIgniter 4 单页多数据集独立分页实现方案
核心实现逻辑
CI4 内置的分页服务默认仅支持单组分页,要实现三个漫画列表的独立翻页,核心是为每个列表绑定独立的分页组标识,避免不同列表的翻页参数互相串扰。
控制器层修改
移除之前直接在数组里链式调用分页的写法,按照下面的结构调整:
public function komik() { $pager = \Config\Services::pager(); // 分别为三个列表配置独立的每页显示条数 $allPerPage = 4; $regulerPerPage = 4; $plusPerPage = 4; $data = [ 'title' => 'komik learn', // 调用模型方法时传入独立的组名 'komik' => $this->komikModel->getKomikAll($allPerPage, 'komik_all'), 'koikkreguler' => $this->komikModel->getKomikReguler($regulerPerPage, 'komik_reguler'), 'komikplus' => $this->komikModel->getKomikPlus($plusPerPage, 'komik_plus'), // 单独生成每个分组的分页链接对象,传入视图 'pagerAll' => $pager->makeLinks( $this->request->getGet('komik_all_page') ?? 1, $allPerPage, $this->komikModel->getTotalAllCount(), 'default_full', 'komik_all' ), 'pagerReguler' => $pager->makeLinks( $this->request->getGet('komik_reguler_page') ?? 1, $regulerPerPage, $this->komikModel->getTotalRegulerCount(), 'default_full', 'komik_reguler' ), 'pagerPlus' => $pager->makeLinks( $this->request->getGet('komik_plus_page') ?? 1, $plusPerPage, $this->komikModel->getTotalPlusCount(), 'default_full', 'komik_plus' ), ]; return view('komik/index', $data); }
之前尝试的链式调用写法无法生效的核心原因:没有给每个分页分配独立组名,框架会把所有查询绑定到同一个默认URL分页参数上,最终会出现点任意一个列表的翻页按钮,其他列表的页码同步跳转的问题。
模型层匹配调整
修改三个查询方法,接收每页条数、分页组名两个入参,调用框架内置的paginate()方法时传入对应组名:
// 模型中getKomikAll方法修改示例 public function getKomikAll($perPage = 10, $groupName = 'default') { return $this->orderBy('created_at', 'DESC') ->paginate($perPage, $groupName); } // 其余两个查询方法getKomikReguler、getKomikPlus按照同样逻辑修改即可
视图层渲染调整
不需要调用全局的$pager->links()方法,直接把控制器传入的三个独立分页对象渲染在对应列表的下方:
<!-- 全量漫画列表区域 --> <?php foreach ($komik as $item): ?> <div class="komik-card"> <!-- 卡片内容渲染 --> </div> <?php endforeach; ?> <!-- 全量列表的分页组件 --> <?= $pagerAll ?> <!-- 普通漫画列表区域 --> <?php foreach ($koikkreguler as $item): ?> <div class="komik-card"> <!-- 卡片内容渲染 --> </div> <?php endforeach; ?> <!-- 普通列表的分页组件 --> <?= $pagerReguler ?> <!-- Plus漫画列表区域 --> <?php foreach ($komikplus as $item): ?> <div class="komik-card"> <!-- 卡片内容渲染 --> </div> <?php endforeach; ?> <!-- Plus列表的分页组件 --> <?= $pagerPlus ?>
常见注意事项
- 三个分页组的名称不能重复,也不能和框架默认的
default组名冲突,否则会出现页码串扰 - 每个分页组对应的总数据量需要单独统计,不能共用同一个总数值,否则会显示错误的总页数
- 框架会自动为每个分页组生成独立的URL参数,比如全量列表的页码参数为
komik_all_page=2,普通列表为komik_reguler_page=3,Plus列表为komik_plus_page=4,不同参数互不影响
内容的提问来源于stack exchange,提问作者rayhan aulian
相关产品推荐
相关产品推荐

