繁体   English   中英

如何在CakePHP中为单个模型/控制器创建多个分页实例

[英]How do I create multiple pagination instances for a single model/controller in CakePHP

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

在此先感谢您的帮助。

到目前为止我尝试过的

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

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

这就是帮助程序的外观,并且它可以提供任何限制。 即使我删除了该限制并尝试像这样应用它:

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个项目

我误解了您的原始问题。 如果要为每个操作设置不同的限制,则可以执行此操作

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'));

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

您已经尝试了什么? 我确定您可以有两个实例,但是您需要将参数直接传递到函数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

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

如果您要使用非JavaScript JavaScript ,这不是一个很好的方法,但是如果您的整个应用程序都需要javascript,它将可以使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM