ねもぷらす

ふぁいんでぃんぐねもの日記。プログラミングとか育児とか

Class::DBI::Pager - クラスDBIのページャー

参考
>http://cpan.uwinnipeg.ca/htdocs/Class-DBI-Pager/Class/DBI/Pager.html

Class::DBI::Pager - Pager utility for Class::DBI

  • 親モジュール 「CD」
package CD;
use base qw(Class::DBI);
__PACKAGE__->set_db(...);

use Class::DBI::Pager;  # just use it
  • 子モジュール 「main」
package main;

use CD;

my $pager = CD->pager(20, 1);     # ($取得する個数, $現在位置)
my @disks = $pager->retrieve_all; # 全部持ってくる。
  • 使用例
    • 子モジュール
# Controller: (MVC's C)
my $query    = CGI->new;
my $template = Template->new;

my $pager    = Film->pager(20, $query->param('page') || 1);
my $movies   = $pager->retrieve_all;
$template->process($input, {
  movies => $movies,
  pager  => $pager,
} );
    • 表示用TT
# View: (MVC's V)
Matched [% pager.total_entries %] items.

[% WHILE (movie = movies.next) %]
Title: [% movie.title | html %]
[% END %]

### navigation like: [1] [2] [3]
[% FOREACH num = [pager.first_page .. pager.last_page] %]
[% IF num == pager.current_page %][[% num %]]
[% ELSE %]<a href="display?page=[% num %]">[[% num %]]</a>[% END %]
[% END %]

### navigation like: prev 20 | next 20
[% IF pager.previous_page %]
<a href="display?page=[% pager.previous_page %]">
prev [% pager.entries_per_page %]</a> |
[% END %]
[% IF pager.next_page %]
<a href="display?page=[% pager.next_page %]">
next [% pager.entries_per_page %]</a>
[% END %]