Saturday, October 29, 2011

Re: How to Paginate Search Results?

I am also interested in this answer.   I just started learning cakephp, and 2.0 is what I'm starting on.  If there is an example app I can download with a database and browse it's code, I would be appreciative of that as well.   I had the same complication as andrew, and I did it another way, and it was creating two queries, one with the search filter and one without it.  



On Sat, Oct 29, 2011 at 1:27 PM, andrewperk <andrewperk@gmail.com> wrote:
Hello,

I've implemented a user model and I have a simple search form for
searching by gender, age, location. I'm using the paginator to
paginate the results. The problem is that it's only remembering the
search criteria on the first page. When I click on page 2, or next
etc.. It defaults back to searching all users.

Here's my dirty search code in my controller, basically it just checks
the submitted form fields and does a query on the matching field in
the Users table and then paginates the results:

if (!empty($this->data)) {
   // by name
   if (!empty($this->data['User']['search_name'])) {
       $this->paginate = array('conditions' => array('visible'=>1,
'OR'=>array(
               'User.username LIKE' => '%'.$this->data['User']['search_name'].'%',
               'User.firstname LIKE' => '%'.$this->data['User']['search_name'],
               'User.lastname LIKE' => '%'.$this->data['User']['search_name'])
                ), 'limit'=>'10', 'order'=>'User.username');
  }
  // by gender
  else if (!empty($this->data['User']['search_gender'])) {
       $this->paginate = array('conditions' => array(
               'visible'=>1,
               'User.gender' => $this->data['User']['search_gender']
               ), 'limit'=>'10', 'order'=>'User.username');
 }
 // by state
 else if (!empty($this->data['User']['search_state'])) {
       $this->paginate = array('conditions' => array(
               'visible'=>1,
               'User.state' => $this->data['User']['search_state']
               ), 'limit'=>'10', 'order'=>'User.username');
 }

  // Send the results for the above criteria to the view
  $results = $this->paginate('User');
  $this->set('users', $results);

    }
    // Default retrieval of all users
   else {
       $this->paginate = array('conditions'=>array('visible'=>1),
'limit'=>'10', 'order'=>'User.username');
       $this->set('users', $this->paginate('User'));
       }

I'm trying to figure out how to make subsequent pages of the
pagination remember my search criteria. Thanks for any help.

--
Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions.


To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php

--
Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions.
 
 
To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php

No comments: