Catalyst+DBIC+TT+Data::Page::Navigationでページング
これもよく使うくせによく忘れるので備忘。
まずはCatalystのControllerでData::Page::Navigationをuseして
MyApp::Controller::User
package MyApp::Controller::User use strict; use warnings; use parent 'Catalyst::Controller'; use Data::Page::Navigation; sub index : Path : Args(0) { my ( $self, $c ) = @_; my $page = $c->req->param('page') || 1; my $rows = $c->req->param('rows') || 10; my $users = $c->model('DBIC::Users')->search( {}, { page => $page, rows => $rows, } ); $c->stash->{users} = $users; $c->stash->{template} = 'user/list.tt'; } 1;
ModelにはC::M::DBIC::Schemaを使う。
で、テンプレートは
root/templates/user/list.tt
<html> ... snip [% SET pager = users.pager %] <div class="page-stats"> [% pager.total_entries %]件中 [% pager.first %] - [% pager.last %]件目 </div> <div id="users"> [% WHILE (user = users.next) %] ...snip... [% END %] </div> <div class="page-navi"> <a href="[% c.req.uri_with(page => pager.first_page) %]">« First</a> [% IF pager.previous_page %]<a href="[% c.req.uri_with(page => pager.previous_page) %]">‹ Prev</a>[% ELSE %]‹ Prev[% END %] [% FOREACH page IN pager.pages_in_navigation -%] [% IF page == pager.current_page %][% page %] [% ELSE %]<a href="[% c.req.uri_with(page => page) %]">[% page %] </a>[% END %] [% END -%] [% IF pager.next_page %]<a href="[% c.req.uri_with(page => pager.next_page) %]">Next ›</a>[% ELSE %]Next ›[% END %] <a href="[% c.req.uri_with(page => pager.last_page) %]">Last »</a> </div> </body> </html>
参考: