Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pagination with search results in cakephp

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.

like image 756
KomalJariwala Avatar asked Nov 06 '12 16:11

KomalJariwala


1 Answers

$this->data is empty on the 2nd page as it's populated by posting your search form (which isn't posting to the 2nd page).

Change your search form post to a GET ( $this->Form->create('ModelName', array('type'=>'get') ) and parse $this->params instead of $this->data

like image 100
RichardAtHome Avatar answered Oct 20 '22 00:10

RichardAtHome