Weird CakePHP (1.3) Поведение компонента пагинации - PullRequest
1 голос
/ 07 октября 2010

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

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

Ура,Николя.

1 Ответ

1 голос
/ 07 октября 2010

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

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

...