Catalyst-Plugin-CRUD リリース
0.20 をリリースしました。
モデルとして DBIx::Class を使う場合、ページャが使えるようになりました。
MyApp/lib/MyApp/Controller/XXXX.pm
order 句に、rows と page を追加すると、自動的にページャ対応になります。これは DBIx::Class の機能です。rows は 1 ページの最大件数を、page は現在のページ数を指定します。
package MyApp::Controller::XXXX; use strict; use warnings; use base 'Catalyst::Controller'; use Class::Trigger; use Data::Dumper; sub list : Local { my ( $self, $c ) = @_; my $page = $c->req->param('page') || 1; $c->stash->{xxxx}->{order} = { order_by => 'id desc', rows => 30, page => $page }; $c->list($self); } sub setting { my ( $self, $c ) = @_; my $hash = { 'name' => 'xxxx', 'type' => 'DBIC', 'model' => 'DBIC::XXXX', 'primary' => 'id', 'columns' => [qw(col1 col2 col3 ...)], 'default' => '/xxxx/list', 'template' => { 'prefix' => 'template/xxxx/', 'suffix' => '.tt' }, }; return $hash; } 1;
MyApp/root/template/xxxx/list.tt
c.stash.xxxx.pager.total で全件数が、c.stash.xxxx.pager.pages で全ページ数が、c.stash.xxxx.pager.current で現在のページ数が取得できます。
<p>検索結果ページ(全 [% c.stash.xxxx.pager.total %] 件) [% FOREACH page = [1 .. c.stash.xxxx.pager.pages] %] [% IF page == c.stash.xxxx.pager.current %] [% page %] [% ELSE %] <a href="/xxxx/list?page=[% page %]">[% page %]</a> [% END %] [% END %]</p> [% FOREACH xxxx = c.stash.xxxxs -%] <ul> <li>[% xxxx.col1 %] [% xxxx.col2 %] ...</li> </ul> [% END -%]