* Catalystページング処理 [#ca9a4ad8]
ページ番号のパラメーターをpageとする。ページ番号は1から始まる。1画面で表示する件数は30件とする。
** アクションクラス [#v28a477f]
以下のように、DBからデータを取得する時にページ番号を渡す。結果セットからページャーオブジェクトを取得し、stashに入れる。
sub list {
my $page = int($c->req->param('page') || 1);
$rs = $rs->search(undef,{
page => $page, rows => 30, order_by => 'regist_date desc'
});
$c->stash->{pager} = $rs->pager;
}
** テンプレートファイル [#i174ffca]
stashにあるpagerオブジェクトからページ番号が取り出せるが、uri_with()を使うことにより、このページをリクエストされた際のクエリストリングが再現される。
<div>
<a href="[% Catalyst.request.uri_with(page=>pager.first_page) %]"><<</a>
<a href="[% Catalyst.request.uri_with(page=>pager.previous_page) %]"><</a>
<a href="[% Catalyst.request.uri_with(page=>pager.next_page) %]">></a>
<a href="[% Catalyst.request.uri_with(page=>pager.last_page) %]">>></a>
<span>[ [% pager.current_page %] / [% pager.last_page %] ]</span>
</div>
** uri_with() [#wa38cfb1]
例えばage=18やsex=manを検索条件とし、その検索結果の一覧をページングありで表示したような場合、このAタグのとび先は、
<a href="/list?age=18&sex=man&page=1">
のようになってくれる。自分でいちいちパラメーターを組み立てなくて済む。ただし、これはGETメソッドの場合のみで、POSTでリクエストした場合は組み立てられない。