【问题标题】:How do I create multiple pagination instances for a single model/controller in CakePHP如何在 CakePHP 中为单个模型/控制器创建多个分页实例
【发布时间】:2011-05-03 18:16:06
【问题描述】:

我有一个视图,其中包含同一模型的两个不同操作(按最新排序的项目列表和按最流行排序的相同列表)。一个列表我想一次分页 8 个项目,一个列表一次分页 12 个项目。我正在使用 AJAX 对项目进行分页。如何设置控制器来处理此任务?问题似乎是我无法创建两个不同的分页实例,因此无论操作如何,我都只能在相同数量的项目中分页。

提前感谢您的帮助。

到目前为止我所做的尝试

基本上尝试为每个操作设置特定的限制,而不是初始分页助手:

var $paginate = array('order'=>array('Category.name'), 'limit'=>'8');

这就是 helper 的样子,它会提供任何限制。即使我删除该限制并尝试像这样应用它:

var $paginate = array('order'=>array('Item.name'));

function discover_list(){    
    $this->set('d_ajax_items', $this->paginate('Item', array('Item.discover_order' => null, 'Item.moderated' => 1), null, 'Item.id DESC', null, 8));
}

function trend_paging(){
    $this->set('trend_items', $this->paginate('Item', array('Item.moderated' => 1),NULL,  'rank DESC', NULL, 12));  
}

操作结束的限制被忽略,它一次输入一些默认的 20 个项目

【问题讨论】:

    标签: php ajax cakephp pagination


    【解决方案1】:

    我误解了你原来的问题。如果你想为每个动作设置不同的限制,你可以这样做

    function discover_list() {    
        $this->paginate['limit'] = 8;
        $this->paginate['conditions'] = array('Item.discover_order' => null, 'Item.moderated' => 1);
        $this->set('d_ajax_items', $this->paginate('Item'));
    }
    

    编辑

    一个不错的方法

    $this->paginate = array(
        'limit' => 8,
        'conditions' => array('Item.discover_order' => null, 'Item.moderated' => 1),
    );
    $this->set('d_ajax_items', $this->paginate('Item'));
    

    【讨论】:

    • 这看起来不错。稍后我将不得不尝试,但非常感谢您!只是出于好奇,我怎么能让它更清楚一点?
    • 工作出色,伙计。非常感谢!
    【解决方案2】:

    我以前做过,但我希望我没有。使两者保持同步对于最终用户来说是令人困惑的,而对于开发人员来说则是一场噩梦。

    您已经尝试过什么?我确定您可以有两个实例,但您需要将参数直接传递到函数paginate(),而不是在类变量paginate 上设置它们。

    编辑

    为避免混淆,我几乎总是在调用本身中定义分页选项。

    在第二个示例中,您向 paginate() 传递了六个参数,但它只需要三个:

    function paginate($object = null, $scope = array(), $whitelist = array())
    

    如果您省略 $object 并将数组作为第一个 arg 传递,则最后两个 args 向左移动。

    您是否尝试在第三个位置 ($whitelist) 以数组形式输入订单和限制值?

    http://api13.cakephp.org/class/controller#method-Controllerpaginate

    http://api13.cakephp.org/view_source/controller/#line-1056

    【讨论】:

    • 了解您的第一点。这是客户需求 :) 查看我更新的问题以获取更多信息。
    • 总是如此。我到家时会检查的。
    【解决方案3】:

    您可以从 2 个空 div 开始您的页面,并通过 ajax 调用 2 个映射到控制器/动作的不同 url。然后你只需要担心 ajax 分页,但你不会有任何 cakephp 问题,因为每个分页都有自己的动作。

    如果您想要unbostrusive javascript,这不是一个非常好的方法,但如果您的整个应用程序都需要 javascript,它会起作用。

    【讨论】:

    • 问题不在于javascript,而在于Cake。我需要后端来提供正确的数据。使用您描述的方法,AJAX 分页效果很好。只是框架返回的数据集很不稳定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多