奇怪的CakePHP(1.3)分页组件行为

时间:2010-10-07 16:21:57

标签: cakephp pagination components behavior


我有一个用户列表页面,其中可以使用性别,城市和国家/地区选择(下拉菜单)修改结果,并且它的工作非常好。由于我们有很多用户,我也需要加入一个分页,这里有“怪异的”部分(我确定这并不奇怪,但我无法弄清楚问题的来源) :当我选择性别时,分页效果很好,我可以在所有页面之间导航,但是如果我选择一个城市(除了性别之外),分页编号是正确的但是我失去了城市限制当我搬到另一页时。


所以我尝试通过显示$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 个答案:

答案 0 :(得分:1)

在帮助程序中,您的问题不在控制器中。当你第一次传递变量时,它正在工作,因为有post变量,但是除非你将它们传递给分页助手,否则分页不会处理这些变量。

阅读this article,我认为最好通过_GET传递性别和城市。