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

2010-06-03 Thread Oleg Pronin
i forgot

form method=POST

2010/6/3 Oleg Pronin syber@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 w...@serensoft.com w...@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@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/




___
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/


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

2010-06-03 Thread Oleg Pronin
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 w...@serensoft.com w...@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@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/



___
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/