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.
|
|
|
ページネーション
|
|
|
|
================
|
|
|
|
|
|
|
|
一つのページに一度に表示するにはデータ数が多すぎる場合に、それぞれ一定数のデータアイテムを含む部分にデータを分割して、一度に一つの部分だけを表示することがよく行われます。
|
|
|
|
このような部分はページと呼ばれますが、それがページネーションという名前の由来です。
|
|
|
|
|
|
|
|
あなたが [データウィジェット](output-data-widgets.md) の一つとともに [データプロバイダ](output-data-providers.md) を使っている場合は、ページネーションは既に自動的に設定されて、うまく動作するようになっています。
|
|
|
|
そうでない場合は、あなたが [[\yii\data\Pagination]] オブジェクトを作成し、[[\yii\data\Pagination::$totalCount|総アイテム数]]、[[\yii\data\Pagination::$pageSize|ページサイズ]]、[[\yii\data\Pagination::$page|現在のページ]] などのデータを代入して、クエリに適用し、そして [[\yii\widgets\LinkPager|リンクページャ]] に与えなければなりません。
|
|
|
|
|
|
|
|
まず最初に、コントローラアクションの中でページネーションオブジェクトを作成し、データを代入します。
|
|
|
|
|
|
|
|
```php
|
|
|
|
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,
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
次に、ビューにおいて、現在のページのモデルを出力し、リンクページャにページネーションオブジェクトを渡します。
|
|
|
|
|
|
|
|
```php
|
|
|
|
foreach ($models as $model) {
|
|
|
|
// ここで $model を表示
|
|
|
|
}
|
|
|
|
|
|
|
|
// ページネーションを表示
|
|
|
|
echo LinkPager::widget([
|
|
|
|
'pagination' => $pages,
|
|
|
|
]);
|
|
|
|
```
|