📅  最后修改于: 2023-12-03 15:06:06.249000             🧑  作者: Mango
在开发 Web 应用时,分页功能是必不可少的。Yii 框架提供了强大的分页功能,能够方便地对数据进行分页处理。
要使用 Yii 的分页功能,首先需要创建一个 yii\data\Pagination
对象。在创建 Pagination 对象时,需要指定总数据量、每页显示数量等参数。
// 总数据量
$total = 100;
// 每页显示数量
$pageSize = 10;
// 创建 Pagination 对象
$pagination = new \yii\data\Pagination([
'totalCount' => $total,
'pageSize' => $pageSize,
]);
接下来,可以使用 yii\db\Query
或 yii\data\ActiveDataProvider
查询数据并使用 limit
和 offset
来实现分页。例如:
// 使用 Query 查询数据并进行分页
$query = new \yii\db\Query();
$data = $query->select('*')
->from('user')
->offset($pagination->offset)
->limit($pagination->limit)
->all();
// 使用 ActiveDataProvider 查询数据并进行分页
$dataProvider = new \yii\data\ActiveDataProvider([
'query' => User::find(),
'pagination' => $pagination,
]);
$data = $dataProvider->getModels();
最后,可以在视图中输出分页控件,例如:
// 控制分页按钮数量
$pagination->maxButtonCount = 5;
// 输出分页控件
echo \yii\widgets\LinkPager::widget([
'pagination' => $pagination,
]);
这样就可以实现简单的分页功能。
Yii 的分页控件默认使用 Bootstrap 样式,但是也可以自定义样式。可以通过配置 LinkPager 的属性来修改分页控件的 HTML 结构和样式。
例如,可以通过配置 options
属性来添加样式类:
echo \yii\widgets\LinkPager::widget([
'pagination' => $pagination,
'options' => [
'class' => 'pagination-lg',
],
]);
这样,分页控件的 ul
标签就会添加 pagination-lg
样式类。
Yii 的分页控件默认使用普通的链接方式进行分页。如果希望使用 Ajax 方式进行分页,可以使用 yii\widgets\Pjax
、yii\widgets\ListView
和 yii\widgets\LinkPager
。
首先,在视图文件中使用 yii\widgets\Pjax
包裹 yii\widgets\ListView
和 yii\widgets\LinkPager
,实现列表和分页部分的 Ajax 加载,例如:
<?php \yii\widgets\Pjax::begin(); ?>
<?= \yii\widgets\ListView::widget([
'dataProvider' => $dataProvider,
'itemView' => '_user_item',
]) ?>
<?= \yii\widgets\LinkPager::widget([
'pagination' => $dataProvider->pagination,
]) ?>
<?php \yii\widgets\Pjax::end(); ?>
然后,在控制器中处理分页请求并返回数据。例如:
// 处理分页请求
if (Yii::$app->request->isAjax) {
return $this->renderPartial('_user_list', [
'dataProvider' => $dataProvider,
]);
}
// 处理普通请求
return $this->render('index', [
'dataProvider' => $dataProvider,
]);
其中,_user_list
是包含用户列表部分 HTML 的局部视图文件。
Yii 的分页功能简单易用,可以轻松处理大量数据的分页需求。除了基本使用外,还可以自定义样式和实现 Ajax 分页等高级功能。