Фильтрация данных с использованием поля наблюдения ajax - PullRequest
0 голосов
/ 30 октября 2010

Я пытался внедрить фильтрацию данных (список по выбранной категории), используя раскрывающийся список с поле наблюдения и пагинацией ajax. Я использую сессию, чтобы запомнить выбранную категорию, чтобы сохранить нумерацию страниц.

Вот мой код (Cakephp 1.2)

В поле зрения:

echo $form->select('Category.id', $categories, null, array('id' => 'categories'),'Filter by Categories')
echo $ajax->observeField('categories' ,array('url' =>'update_category','update' => 'collectionDiv'));

В контроллере:

if(!empty($this->data['Category']['id'])) 
{ 
    $cat_id=$this->data['Category']['id'];
    $filters=array('Collection.category_id' => $cat_id); 
    $this->set('collections', $this->paginate('Collection', $filters));
    $this->Session->write($this->name.'.$cat_id', $category_id);
}
else
{
    $cat_id=$this->Session->read($this->name.'.cat_id');
    $filters=array('Collection.category_id' => $cat_id);
    $this->set('collections', $this->paginate('Collection'));
}

Фильтр работает так, как я хотел, но проблема в том, что когда я выбираю пустое значение ('Фильтровать по категории), он все еще запоминает последний сеанс категории, поэтому я не могу вернуться к списку по умолчанию (Список всех записей без фильтра).

Я пытался сделать какое-то условие, но все еще не удалось. Есть ли другой способ? Пожалуйста, я ценю вашу помощь. спасибо

Хермаван

Ответы [ 2 ]

0 голосов
/ 01 ноября 2010

Я понял, теперь это работает, как я надеюсь.Я сам объясняю условие и решение.Когда я выбираю категорию из выпадающего списка, он отображает страницу с кодом:

If ($this->data['Category']['id']) {
  $cat_id=$this->data['Category']['id'];
  $this->Session->write($this->name.'.category_id', $category_id);
  // I will use this session next when I click page number
  $filters=array('Collection.art_type_id' => $category_id); 
  $this->set('collections', $this->paginate('Collection', $filters));

}else{
//if clik page number, next or whatever, $this->data['Category']['id'] will empty so 
// use session to remember the category so the page will display next page or prev 
// page with the proper category, But the problem is, when I set category fillter to
// "All Category" it will dislpay last category taked from the session. To prevent it 
// I used $this->passedArgs['page']. When I clik the page paginator it will return 
// current number page, but it will be empty if we click dropdown. 

    if (!empty($this->passedArgs['page']) {
       $cat_id=$this->Session->read($this->name.'.category_id');
       $filters=array('Collection.category_id' => $cat_id);
       $this->set('collections', $this->paginate('Collection',$filters));
    }else{
       $this->set('collections', $this->paginate('Collection'));
  }
}

. В этом случае я думаю, что наблюдаемое поле не будет отправлять passArg, как мы получаем из URL, например, из ссылки ajax или html->ссылка на сайт.Я надеюсь, что это будет полезно для всех

0 голосов
/ 31 октября 2010

Возможно, я не понимаю вопроса, но мне кажется, что его стоит изменить:

else
{
    $cat_id=$this->Session->read($this->name.'.cat_id');
    $filters=array('Collection.category_id' => $cat_id);
    $this->set('collections', $this->paginate('Collection'));
}

на:

else
{
    $this->set('collections', $this->paginate('Collection',array()));
}

В действительности ваш код выглядит так:делать это в любом случае.Проверьте, что URL находится в верхней части окна браузера после его возвращения.Содержит ли он по-прежнему директивы разбиения на страницы из предыдущего запроса?

Возможно, вы захотите просмотреть http://book.cakephp.org/view/167/AJAX-Pagination и убедиться, что вы отметили все поля.

...