【问题标题】:Multiple paginations in one controller一个控制器中的多个分页
【发布时间】:2011-09-22 16:01:02
【问题描述】:

是否有可能在同一个控制器中使用多个$paginate 变量?

我的问题是 LinksTags 之间存在 hasAndBelongsToMany-Relation。 我已经自定义了分页选项,以便它与 habtm 一起使用:

public $paginate = array(
'limit' => 25,
'joins' => array(
    array(
        'table' => 'links_tags',
        'type' => 'inner',
        'alias' => 'LinkTag',
        'conditions' => array(
            'Link.id = LinkTag.link_id'
        )
    )
));

它工作正常,但还有另一个动作也应该分页。在此操作中,没有可用的标签,因此每个链接的显示频率与该链接的 links_tags 表中的条目一样频繁。

解决此问题的最简单方法是使用第二个$paginate 变量,但我没有找到解决方案。

【问题讨论】:

    标签: cakephp controller pagination cakephp-1.3


    【解决方案1】:

    根据Cake Book分页页面(HERE),可以为不同的模型设置不同的分页变量(都在同一个控制器内):

    其实你可以定义多个 中的一组分页默认值 控制器,您只需命名碎片 在你想要的模型之后的数组 配置:

    class RecipesController extends AppController {
        var $paginate = array(
            'Recipe' => array (...),
            'Author' => array (...)
        );
    }
    

    【讨论】:

    • 我如何使用不同的 poagination 设置?
    • 当你调用$this-Recipe->paginate();时,它将使用你为Recipe设置的选项,当你调用$this->Author->paginate();时,它将使用Author选项。
    【解决方案2】:

    在设置 $paginate 变量后,您可以通过各种方式自定义分页方法,例如 Cake Cookbook 中的示例:

    function list_recipes() {
        $this->paginate = array(
            'conditions' => array('Recipe.title LIKE' => 'a%'),
            'limit' => 10
        );
        $data = $this->paginate('Recipe');
        $this->set(compact('data'));
    );
    

    我还没有对其进行测试,但我原以为您可以在 $this->paginate 调用中而不是在 $paginate 变量中放置诸如 join 之类的东西,它需要从一个操作到另一个操作有所不同。嗯,我得看看这是否可行 - 知道如何做这种事情可能对我非常有用,以备后用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 2016-09-02
      相关资源
      最近更新 更多