我有一个视图,它有两个不同的同一个模型的动作(按最新排序的项目列表,以及按最常用排序的相同列表)。一个列表我想一次分页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个项目
答案 0 :(得分:3)
我误解了你原来的问题。如果要为每个操作设置不同的限制,可以执行此操作
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'));
答案 1 :(得分:1)
我以前做过这件事,我希望自己没有。保持两者同步对最终用户来说是困惑的,也是开发人员的噩梦。
你有什么尝试?我确信你可以有两个实例,但是你需要将参数直接传递给函数paginate()
,而不是将它们设置在类变量paginate
上。
修改的
为避免混淆,我几乎总是在调用本身中定义分页选项。
在第二个示例中,您将六个参数传递给paginate(),但它只需要三个:
function paginate($object = null, $scope = array(), $whitelist = array())
如果省略$ object并将数组作为第一个arg传递,则最后两个args向左移动。
您是否尝试输入订单并将值限制为第三个位置的数组($ whitelist)?
http://api13.cakephp.org/class/controller#method-Controllerpaginate
答案 2 :(得分:0)
你可以用2个空div开始你的页面,并通过ajax调用2个映射到controller / action的不同url。然后你只需要担心ajax分页,但你不会有任何cakephp问题,因为每个分页都会影响他自己的行为。
如果您需要unbostrusive javascript,这不是一个非常好的方法,但如果您的整个应用需要javascript,它将会有效。