On Tue, Dec 23, 2008 at 9:34 AM, Jesse Sheidlower <jes...@panix.com> wrote: > > Some time ago, I developed or stole a TT pager that I now use > in all of my Cat apps. It looks like this, though occasionally > with minor CSS tweaks:
[snipped code] > However, a frustration is that when I have excessively large > result sets (such as might generate dozens or hundreds of > pages), it takes a long to generate and looks like hell. So > I'd like to change this to one that only shows, say, 10 pages, > and then has a "previous ten/next ten" and/or "first"/"last" > or something like that, whatever the standard is now. > > Does someone have a model I can steal from? > > Thanks. > > Jesse This is what I use in my template: <script type="text/javascript" language="JavaScript"> function resize(uri) { eval( location = uri ); } </script> [% IF pager.total_entries() > 0 -%] <p><b>[% pager.total_entries() -%]</b> records found <b>|</b> Showing page <b>[% pager.current_page() -%]</b> of [% pager.last_page() -%] (records [% pager.first() -%]-[% pager.last() -%]) <b>|</b> Number of records to display <select name="pagesize" onChange="resize(this.value)" style="width: 60px"> [% FOREACH val = [ "25", "50", "100", "150", "200" ] -%] <option [% IF val == pagesize -%]selected[% END -%] value="[% Catalyst.request.uri_with( rows => val ) -%]">[% val -%]</option> [% END -%] </select> </p> <p><small><b>Go to page:</b> [% IF page != pager.first_page() -%] <a href="[% Catalyst.request.uri_with( page => pager.first_page() ) -%]">first</a> [% END -%] [% IF pager.previous_page -%] <a href="[% Catalyst.request.uri_with( page => pager.previous_page() ) -%]">previous</a> [% END -%] [% IF pager.next_page -%] <a href="[% Catalyst.request.uri_with( page => pager.next_page() ) -%]">next</a> [% END -%] [% IF page != pager.last_page() -%] <a href="[% Catalyst.request.uri_with( page => pager.last_page() )-%]"> last</a> [% END -%] </small></p> In the controller, as Zbigniew suggested, you just have to: my $page = $c->req->param('page') || 1; my $rows = $c->req->param('rows') || 25; $c->stash->{page} = $page; $c->stash->{pagesize} = $rows; my $where = { # your SQL/DBIC conditions here }; my $attr = { page => $page, rows => $rows }; my $rs = $model->search( $where, $attr ); my $pager = $rs->pager(); $c->stash->{pager} = $pager; $c->stash->{template} = 'your_template.tt'; HTH, -- fernan _______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/