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

SYNOPSIS
     package CD;
     use base qw(Class::DBI);
     __PACKAGE__->set_db(...);

     use Class::DBI::Pager;        # just use it

     # then, in client code!
     package main;

     use CD;
     my $pager = CD->pager(20, 1);     # ($items_per_page, $current_page)
     my @disks = $pager->retrieve_all;

DESCRIPTION
   Class::DBI::Pager is a plugin for Class::DBI, which glues Data::Page
   with Class::DBI. This module reduces your work a lot, for example when
   you have to do something like:

     * retrieve objects from a database
     * display objects with 20 items per page

   In addition, your work will be reduced more, when you use
   Template-Toolkit as your templating engine. See the section on "EXAMPLE"
   for details.

EXAMPLE
     # 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,
     });

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

NOTE / TODO
   This modules internally retrieves itertors, then creates "Data::Page"
   object for paging utility. Using SQL clauses "LIMIT" and/or "OFFSET"
   with "DBIx::Pager" might be more memory efficient.

AUTHOR
   Tatsuhiko Miyagawa <[email protected]>

   Original idea by Tomohiro Ikebe <[email protected]>

   This library is free software; you can redistribute it and/or modify it
   under the same terms as Perl itself.

SEE ALSO
   the Class::DBI manpage, the Data::Page manpage