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() внутри контроллера. Я до сих пор не понимаю, почему это работает для гендерного фильтра, а не для остальных


С уважением,
Николай.


person Nicolas    schedule 07.10.2010    source источник


Ответы (1)


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

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

person Nik Chankov    schedule 07.10.2010
comment
Привет, я прочитал всю статью и после некоторого времени, потраченного на то, чтобы все заработало, это работает как шарм с вашим предложением _GET. Спасибо. - person Nicolas; 08.10.2010