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

Oleg Pronin syber.rus at gmail.com
Thu Jun 3 12:52:13 GMT 2010


i forgot

<form method="POST">

2010/6/3 Oleg Pronin <syber.rus at gmail.com>:
> <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