Yii2 framework backup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1.4 KiB

分页

当一次要在一个页面上显示很多数据时,通过需要将其分为 几部分,每个部分都包含一些数据列表并且一次只显示一部分。这些部分被称为 分页,例如 pagination。

如果你使用 data providerdata widgets 中之一, pagination 已经为你自动分页。否则,你需要创建 \yii\data\Pagination 对象,为其填充数据例如 \yii\data\Pagination::$totalCount\yii\data\Pagination::$pageSize\yii\data\Pagination::$page,在 查询中使用它并且填充到 \yii\widgets\LinkPager

首先在 controller action,我们创建 pagination 对象并且为其填充数据:

function actionIndex()
{
    $query = Article::find()->where(['status' => 1]);
    $countQuery = clone $query;
    $pages = new Pagination(['totalCount' => $countQuery->count()]);
    $models = $query->offset($pages->offset)
        ->limit($pages->limit)
        ->all();

    return $this->render('index', [
         'models' => $models,
         'pages' => $pages,
    ]);
}

其次在视图中我们输出的模板为当前页并通过 pagination 对象链接到该页:

foreach ($models as $model) {
    // display $model here
}

// display pagination
echo LinkPager::widget([
    'pagination' => $pages,
]);