两个分页在一个页面中不能独立工作 - CakePHP

时间:2016-08-11 05:29:19

标签: php cakephp pagination

我有一个网页,在这个页面中,我需要为不同的2个表格共有2个分页。

我尝试过不同的分页,但它相互依赖。

例如,如果我选择第一张表的第二页,则第二张表会自动更改为第二页。

这是我的控制器代码:

$page = $this->pageForPagination('User');
$this->paginate = array(
        'User' => array(
            'fields' => array(
                'User.*',
            ),
            'conditions' => $userConditions,
            'page' => $page,
        ),
    );
 $this->set('users', $this->paginate('User'));

 $page1 = $this->pageForPagination('Game');
 $this->paginate = array(
        'Game' => array(
            'fields' => array(
                'Game.*',
            ),
            'conditions' => $conditions,
            'page' => $page1,
        ),
    );
 $this->set('games', $this->paginate('Game'));

以下是上述代码中使用的函数:

function pageForPagination($model) {
    $page = 1;
    $sameModel = isset($this->params['named']['model']) && $this->params['named']['model'] == $model;
    $pageInUrl = isset($this->params['named']['page']);
    if ($sameModel && $pageInUrl) {
        $page = $this->params['named']['page'];
    }

    $this->passedArgs['page'] = $page;
    return $page;
}

这是我的观看代码:

echo $this->element('paging', array('model' => 'User'));
echo $this->element('paging', array('model' => 'Game'));

我已经从这个网址引用了上述代码:http://debuggable.com/posts/how-to-have-multiple-paginated-widgets-on-the-same-page-with-cakephp:48ad241e-b018-4532-a748-0ec74834cda3

任何人都可以帮助我,因为我还没有得到任何解决方案吗?

1 个答案:

答案 0 :(得分:0)

您提到的链接中的解决方案是覆盖默认的分页网址,并且不会同时显示这两个模型。您还没有完全实施解决方案。

您必须为每个模型手动提取页码,如下所示:

function pageForPagination($model) {
    if (isset($this->params['named']['pagefor'.$model])
        return $this->params['named']['pagefor'.$model];
    else
        return 1;
}

以下代码:

echo $this->element('paging', array('model' => 'User'));
echo $this->element('paging', array('model' => 'Game'));

导致cakephp使用默认的分页视图,默认分页中的URL对于两个模型都是相同的。您必须使用自定义分页视图并指定页面链接的模型。

对于上面编辑过的函数,您可以使用这样的url模式:

/Controller/Action/pageforUser:215/pageforGame:35

视图中的每个页面链接。

我认为使用此url模式的最佳做法是覆盖分页帮助程序,以便创建的链接形成以下模式:

'/Controller/Action/pagefor[Model]:215'.[other parameters]