Saturday, October 29, 2011

Re: How to Paginate Search Results?

You can do it either with PRG (post redirect get) concept:


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



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
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php

No comments: