📜  Yii-分页(1)

📅  最后修改于: 2023-12-03 15:06:06.249000             🧑  作者: Mango

Yii 分页

在开发 Web 应用时,分页功能是必不可少的。Yii 框架提供了强大的分页功能,能够方便地对数据进行分页处理。

基本使用

要使用 Yii 的分页功能,首先需要创建一个 yii\data\Pagination 对象。在创建 Pagination 对象时,需要指定总数据量、每页显示数量等参数。

// 总数据量
$total = 100;

// 每页显示数量
$pageSize = 10;

// 创建 Pagination 对象
$pagination = new \yii\data\Pagination([
    'totalCount' => $total,
    'pageSize' => $pageSize,
]);

接下来,可以使用 yii\db\Queryyii\data\ActiveDataProvider 查询数据并使用 limitoffset 来实现分页。例如:

// 使用 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 样式类。

Ajax 分页

Yii 的分页控件默认使用普通的链接方式进行分页。如果希望使用 Ajax 方式进行分页,可以使用 yii\widgets\Pjaxyii\widgets\ListViewyii\widgets\LinkPager

首先,在视图文件中使用 yii\widgets\Pjax 包裹 yii\widgets\ListViewyii\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 分页等高级功能。