Qiang Xue
10 years ago
4 changed files with 142 additions and 10 deletions
@ -1,6 +1,40 @@
|
||||
ページネーション |
||||
================ |
||||
|
||||
> Note|注意: この節はまだ執筆中です。 |
||||
> |
||||
> まだ内容がありません。 |
||||
一つのページに一度に表示するにはデータ数が多すぎる場合に、それぞれ一定数のデータアイテムを含む部分にデータを分割して、一度に一つの部分だけを表示することがよく行われます。 |
||||
このような部分はページと呼ばれますが、それがページネーションという名前の由来です。 |
||||
|
||||
あなたが [データウィジェット](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, |
||||
]); |
||||
``` |
||||
|
@ -1,6 +1,50 @@
|
||||
並べ替え |
||||
======== |
||||
|
||||
> Note|注意: この節はまだ執筆中です。 |
||||
> |
||||
> まだ内容がありません。 |
||||
表示するデータを一つまたはいくつかの属性に従って並べ替えなければならないことがあります。 |
||||
あなたが [データウィジェット](output-data-widgets.md) の一つとともに [データプロバイダ](output-data-providers.md) を使っている場合は、並べ替えはあなたに代って自動的に処理されます。 |
||||
そうでない場合は、コントローラの中で [[\yii\data\Sort]] のインスタンスを作成して構成し、クエリに適用し、そしてビューに渡して、属性による並べ替えのためのリンクを作成できるようにしなければなりません。 |
||||
|
||||
典型的な使用方法の例を次に示します。 |
||||
|
||||
```php |
||||
function actionIndex() |
||||
{ |
||||
$sort = new Sort([ |
||||
'attributes' => [ |
||||
'age', |
||||
'name' => [ |
||||
'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC], |
||||
'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC], |
||||
'default' => SORT_DESC, |
||||
'label' => 'Name', |
||||
], |
||||
], |
||||
]); |
||||
|
||||
$models = Article::find() |
||||
->where(['status' => 1]) |
||||
->orderBy($sort->orders) |
||||
->all(); |
||||
|
||||
return $this->render('index', [ |
||||
'models' => $models, |
||||
'sort' => $sort, |
||||
]); |
||||
} |
||||
``` |
||||
|
||||
ビューにおいては、 |
||||
|
||||
```php |
||||
// 並べ替えのアクションに導くリンクを表示 |
||||
echo $sort->link('name') . ' | ' . $sort->link('age'); |
||||
|
||||
foreach ($models as $model) { |
||||
// ここで $model を表示 |
||||
} |
||||
``` |
||||
|
||||
上記においては、並べ替えをサポートする二つの属性、すなわち、`name` と `age` を宣言しています。 |
||||
並べ替えの情報を Article クエリに渡して、クエリ結果が Sort オブジェクトで指定された順序に従って並べ替えられるようにしています。 |
||||
ビューにおいては、二つのハイパーリンクを表示して、対応する属性によって並べ替えられたデータを表示するページへ移動できるようにしています。 |
||||
|
Loading…
Reference in new issue