ページネーション (1/5)
作成:2015-10-10 09:25
更新:2015-10-10 09:25
更新:2015-10-10 09:25
■ページネーションとPagenator
多量のデータを表示するとき、一度に何千何万ものリストを表示する、なんていうのは避けたいところです。こういう場合に用いられるのが「ページ分け(ページネーション)」です。データを一定数ごとにページ分けし、1ページずつ表示していくのですね。
このページネーションは、まぁ自分で実装することも可能です。CakePHPではデータベースアクセスに「offset」「limit」というものが用意されていましたね。これを使うことで、指定の位置から一定数だけを取り出していくことができます。こんな具合に値を設定するわけです。
これで一定数ごとにページ分けして表示することは可能です。が、正直いって面倒くさいのは確かですね。そこでCakePHPでは、こうしたページネーションに関する機能をフレームワーク側で提供するようにしました。
●コンポーネントのロード
●エンティティの取得
では、実際にやってみましょう。前回まで使ったPersonsをそのまま利用します。まずは、テンプレート(index.ctp)を以下のように用意しておきましょう。ここでは、単純に$personsで渡された値からエンティティをforeachで繰り返し取り出し、中身を表示する、というだけのシンプルなものを用意しておきます。
このページネーションは、まぁ自分で実装することも可能です。CakePHPではデータベースアクセスに「offset」「limit」というものが用意されていましたね。これを使うことで、指定の位置から一定数だけを取り出していくことができます。こんな具合に値を設定するわけです。
offset = n * p, limit = p(p = ページ数。n = 1ページあたりの表示数)
これで一定数ごとにページ分けして表示することは可能です。が、正直いって面倒くさいのは確かですね。そこでCakePHPでは、こうしたページネーションに関する機能をフレームワーク側で提供するようにしました。
●コンポーネントのロード
$this->loadComponent('Paginator');ページネーションは、「Paginator」というコンポーネントとして用意されています。これを利用するには、コントローラー側のinitializeメソッドなどで、loadComponentを使ってロードしておきます。
●エンティティの取得
$this->paginate();
ページのエンティティは、コントローラーの「paginate」メソッドで取り出します。単にこれでエンティティを取り出すだけで、そのページに表示するエンティティがまとめて取り出せます。あとはビューテンプレート側でforeachなどでエンティティを取り出し処理していくだけです。では、実際にやってみましょう。前回まで使ったPersonsをそのまま利用します。まずは、テンプレート(index.ctp)を以下のように用意しておきましょう。ここでは、単純に$personsで渡された値からエンティティをforeachで繰り返し取り出し、中身を表示する、というだけのシンプルなものを用意しておきます。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<div> <h3>List Persons</h3> <table> <thead> <tr> <th>ID</th> <th>NAME</th> <th>AGE</th> <th>MAIL</th> </tr> </thead> <tbody> <?php foreach ($persons as $person): ?> <tr> <td><?= h($person->id) ?></td> <td><?= h($person->name) ?></td> <td><?= h($person->age) ?></td> <td><?= h($person->mail) ?></td> </tr> <?php endforeach; ?> </tbody> </table> </div>
※関連コンテンツ
「初心者のためのCakePHP3 プログラミング入門」に戻る