[Catalyst] Paging thru a complex POSTed search -- HOWTO?

Oleg Pronin syber.rus at gmail.com
Thu Jun 3 12:51:16 GMT 2010


<form id="myform">
  <input type="hidden" name="..." value="..."/>
  ... any number of params
  <input type="hidden" name="page" value="[%page%]"/>
  ...

  <a href="#" onclick="$('#myform input[name=page]').val(2);
$('#myform').submit()">
    Page 2
  </a>

</form>

2010/6/2 will at serensoft.com <will at serensoft.com>:
> Short version:
> Using [% c.req.uri_with({ page => pager.next_page }) %] is fine for a simple
> single-field search (where the form uses GET instead of POST)... but how do
> we PAGE through (and/or cache) a multi-field form search that uses POST?
>
> Long version:
> This is probably already a posted recipe somewhere, but I haven't had much
> luck finding answers via googling combinations of 'perl catalyst post cache
> pager' ... so pointers are welcome:
>
> # Form has lots of fields, we'll just nab a sample handful from the POST:
> my @terms = map{s/\s+//; $_} split /,/, $form->field('keywords');
> # I know, but it's just an example, this isn't a robust search-field parser
> :)
> my %search = (
>     asof => {
>         # date field "asof" must be within date range
>         '>=' => $form->field('start_date'),
>         '<=' => $form->field('end_date'),
>     },
>     terms => [
>         # field "terms" can contain any of the keywords
>         map { +{ -like => '%' . $_ . '%' } } @terms
>     ],
> );
> my $page = $c->req->param('page');
> $page = 1 if ! defined( $page ) || ! $page || $page =~ /\D/;
> my $result = $c->model('Package')->search( \%search, {page=>$page} );
> $c->stash->{results} = $result;
> $c->stash->{pager} = $result->pager;
>
> Then, in the template:
>
> <a href="[% c.req.uri_with({page => pager.prev_page}) %]">Prev</a>
> <a href="[% c.req.uri_with({page => pager.next_page}) %]">Next</a>
>
> That works well for simple GET forms where the ?field=val syntax is used in
> the URI.
> What's the approach for paging the (cached?) query results from a
> complex-field POSTed search form?
> I'm imagining a two-table DB solution where we cache the found row-id's in
> table `cached_search_row` and link that to `cached_search`, then have the
> cached_search.id mentioned in the URI. I'm hoping there's a better way
> someone has already conjured up that doesn't have all the drawbacks of this
> approach that we haven't even thought of...
> Thanks in advance!
>
> --
> will trillich
> "It's only by saying 'no' that you can concentrate on the things that are
> really important." -- Steve Jobs
> --
> will trillich
> "It's only by saying 'no' that you can concentrate on the things that are
> really important." -- Steve Jobs
>
> _______________________________________________
> List: Catalyst at 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/
>
>



More information about the Catalyst mailing list