とほほのN88-BASIC日記 このページをアンテナに追加 RSSフィード

2008-10-06

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) %]">&laquo; First</a>
[% IF pager.previous_page %]<a href="[% c.req.uri_with(page => pager.previous_page) %]">&lsaquo; Prev</a>[% ELSE %]&lsaquo; Prev[% END %]
[% FOREACH page IN pager.pages_in_navigation -%]
[% IF page == pager.current_page %][% page %]&nbsp;[% ELSE %]<a href="[% c.req.uri_with(page => page) %]">[% page %]&nbsp;</a>[% END %]
[% END -%]
[% IF pager.next_page %]<a href="[% c.req.uri_with(page => pager.next_page) %]">Next &rsaquo;</a>[% ELSE %]Next &rsaquo;[% END %]
<a href="[% c.req.uri_with(page => pager.last_page) %]">Last &raquo;</a>
</div>
</body>
</html>

そーすっとこんな感じないけてるページャが簡単に表示できる。

f:id:hide-K:20081006150849p:image

参考:

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証