从CI3升级到CI4了,看着官方的中文文档,太头痛了无力吐槽。摸索了好久才把分页搞定,记录一下过程。
一、模型
public function getUserList($where,$p){
$result = $this->select('users_id,mobile,name,sex,age,addtime')->where($where)->orderBy('users_id', 'DESC')->limit($p['page_num'],$p['start_position'])->get()->getResultArray();
return $result;
}
二、控制器
$model = new UsersModel();
// 加载所需的 helper
helper(['url', 'pagination']);
// 定义分页配置
$config = [
'baseURL' => base_url('main/users_list'), // 设置分页链接的基本URL
'totalRows' => $model->countAll(), // 获取总行数
'perPage' => 3, // 每页显示的记录数
];
// 初始化分页类
$pager = \Config\Services::pager();
// 获取当前页码
$currentPage = $this->request->getVar('page') ? $this->request->getVar('page') : 1;
// 获取分页数据
$data['users'] = $model->getUserList([], array('page_num' => $config['perPage'],'start_position' => ($currentPage - 1) * $config['perPage']));
// 生成分页链接
// my_template在app\Config\Pager.php中配置
$data['pager'] = $pager->makeLinks($currentPage, $config['perPage'], $config['totalRows'],'my_template');
echo view('admin/users', $data);
三、视图
<?php foreach ($users as $user) : ?>
<p><?= $user['users_id'] ?></p>
<p><?= $user['username'] ?></p>
<?php endforeach; ?>
<!-- 分页链接 -->
<?= $pager ?>
四、app\Config\Pager.php配置
public array $templates = [
'default_full' => 'CodeIgniter\Pager\Views\default_full',
'default_simple' => 'CodeIgniter\Pager\Views\default_simple',
'default_head' => 'CodeIgniter\Pager\Views\default_head',
'my_template' => 'CodeIgniter\Pager\Views\page_test',
];
//page_test.php文件在\system\Pager\Views文件夹中创建
五、分页模板page_test.php
<?php $pager->setSurroundCount(2) ?>
<ul class="pagination">
<?php if ($pager->hasPreviousPage()) : ?>
<li class="page-item">
<a href="<?= $pager->getFirst() ?>" class="page-link" aria-label="First">
<span aria-hidden="true">«</span>
</a>
</li>
<li class="page-item">
<a href="<?= $pager->getPreviousPage() ?>" class="page-link" aria-label="Previous">
<span aria-hidden="true">‹</span>
</a>
</li>
<?php endif ?>
<?php foreach ($pager->links() as $link) : ?>
<?php if ($link['active']) : ?>
<li class="page-item active">
<a href="<?= $link['uri'] ?>" class="page-link"><?= $link['title'] ?></a>
</li>
<?php else : ?>
<li class="page-item">
<a href="<?= $link['uri'] ?>" class="page-link"><?= $link['title'] ?></a>
</li>
<?php endif ?>
<?php endforeach ?>
<?php if ($pager->hasNextPage()) : ?>
<li class="page-item">
<a href="<?= $pager->getNextPage() ?>" class="page-link" aria-label="Next">
<span aria-hidden="true">›</span>
</a>
</li>
<li class="page-item">
<a href="<?= $pager->getLast() ?>" class="page-link" aria-label="Last">
<span aria-hidden="true">»</span>
</a>
</li>
<?php endif ?>
</ul>