You can do it either with PRG (post redirect get) concept:
http://bakery.cakephp.org/articles/luciansabo/2011/08/12/post_redirect_get_design_pattern_component
http://cakedc.com/downloads/view/cakephp_search_plugin
or with write the posted form data to a session once and keep reading it
through pagination
something like:
if(!empty($this->data['User']['search_name'])) {
$this->Session->write('conditions.firstname',
$thisis->data['User']['search_name']);
}
if($this->Session->check('conditions')) {
$conditions = $this->Session->read('conditions');
} else {
$conditions = null
}
$this->paginate = array(
'recursive' => -1,
'conditions' => $conditions,
Andras Kende
http://www.kende.com
On Oct 29, 2011, at 1:27 PM, andrewperk 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
> [email protected] 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
[email protected] For more options, visit this group at
http://groups.google.com/group/cake-php