[英]Multiple ajax pagination for single Model and Controller on the same page in 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
您可以使用2个空div来开始页面,并通过ajax调用映射到控制器/操作的2个不同的URL。 然后,您只需要担心ajax分页,但不会有任何cakephp问题,因为每个分页都可以执行自己的操作。
如果您要使用非JavaScript JavaScript ,这不是一个很好的方法,但是如果您的整个应用程序都需要javascript,它将可以使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.