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.
 
 
 
 
 

2.0 KiB

ページネーション

一つのページに一度に表示するにはデータ数が多すぎる場合に、それぞれ一定数のデータアイテムを含む部分にデータを分割して、一度に一つの部分だけを表示することがよく行われます。 このような部分はページと呼ばれますが、それがページネーションという名前の由来です。

あなたが データウィジェット の一つとともに データプロバイダ を使っている場合は、ページネーションは既に自動的に設定されて、うまく動作するようになっています。 そうでない場合は、あなたが \yii\data\Pagination オブジェクトを作成し、\yii\data\Pagination::$totalCount\yii\data\Pagination::$pageSize\yii\data\Pagination::$page などのデータを代入して、クエリに適用し、そして \yii\widgets\LinkPager に与えなければなりません。

まず最初に、コントローラアクションの中でページネーションオブジェクトを作成し、データを代入します。

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,
    ]);
}

次に、ビューにおいて、現在のページのモデルを出力し、リンクページャにページネーションオブジェクトを渡します。

foreach ($models as $model) {
    // ここで $model を表示
}

// ページネーションを表示
echo LinkPager::widget([
    'pagination' => $pages,
]);