2010-10-07 1 views
1


У меня есть страница списка пользователей, где результат может быть изменен с помощью выбора полов, города и страны (выпадающих списков), и он работает отлично. Поскольку у нас есть много пользователей, мне также нужно поставить разбивку на страницы, и вот идет «странная» часть (я уверен, что это не странно, но я просто не могу понять, откуда эта проблема): когда я выбираю пол, разбиение на страницы отлично работает, и я могу перемещаться между всеми страницами, но, если я выбираю город, например (кроме или не пола), номера разбивки на страницы верны, но я потерял ограничение города, когда перехожу к другому стр.Weird CakePHP (1.3) Поведение компонента для разбиения на страницы


Итак, я попытался понять, что происходит с моими фильтрами, отображая $this->data. И он говорит точно так же, как и раньше: отлично работает с полом ($this->data['users']['gender'] просматривает все страницы разбивки на страницы), но другие параметры просто потерялись, как только я попытаюсь уйти.
Дело в том, что нет никакой разницы между фильтром gender и другими, либо на стороне контроллера, либо в представлении (оба являются входами выбора).

На более технической стороне, вот немного моего кода:

//In the controller function 
    if (!empty($this->data['users']['gender'])) { 
     $conditions['gender'] = $this->data['users']['gender']; 
    } 
    if (!empty($this->data['users']['country_id'])) { 
     $conditions['city_id'] = 
      $this->User->City->find(
       'list', 
       array(
        'conditions' => array(
         'country_id' => $this->data['users']['country_id']), 
        'fields' => 'City.id')); 
    } 
    if (!empty($this->data['users']['city_id'])) { 
     if($this->data['users']['city_id'] == 'NULL') { 
      $conditions['city_id IS ?'] = NULL; 
     } else { 
      $conditions['city_id'] = $this->data['users']['city_id']; 
     } 
    } 
    //debug($this->data); 

    $options = array(
     'limit' => 20, 
     'order' => 'User.lastname ASC', 
     'conditions' => $conditions); 
    $this->paginate = $options; 
    $users = $this->paginate('User'); 


Как вы можете видеть, я использую функцию paginate() внутри контроллера. Я до сих пор не понимаю, почему это работает для пола фильтр, а не остальные


Cheers,
Nicolas.

ответ

1

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

Прочтите this article и, на мой взгляд, лучше передать пол и город через _GET.

+0

Привет, я прочитал всю статью и несколько раз потратил на то, чтобы все работало, оно работает как шарм с вашим предложением _GET. Благодарю. – Nicolas

 Смежные вопросы

  • Нет связанных вопросов^_^