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.
$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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With