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 -%]

ダウンロード先は こちら です(CPAN からダウンロードできるようになるまでには、しばらく時間がかかります)。