我正在构建一个动态视图(Page
),该视图由通过$this->element('messages_unread')
调用的多个元素(小部件)组成。其中一些元素需要与页面模型相关的不数据
在现实生活中的话:我的用户将能够通过从众多元素中选择构建自己的页面(“前5个帖子”,“10个未读消息”等等)
我通过从元素中调用$this->requestAction(array('controller'=>'events','action'=>'archive')
来获取数据,每个元素的url变量都不同。
我知道requestAction()
价格昂贵,我打算通过适当的缓存来限制成本。
实际问题:
我的问题是分页。当我在Page
视图中并调用requestAction('/events/archive')
时,页面视图中的PaginatorHelper将不知道Event
模型及其分页器变量和$this->Paginator->next()
等...不会工作。
我怎样才能实现正确的分页?我试图通过调用$this->Paginator->options(array('model'=>'Event'))
来设置模型,但这不起作用
我是否需要在requestAction
中返回自定义的分页变量,从而构建我自己的?
还是有另一种方法甚至可以避免requestAction()
吗?请记住,请求的数据与Page无关。
亲切的问候, 巴特
[编辑]我的临时解决方案,但仍然可以发表评论/解决方案:
在requestedAction Event/archive
中,返回paginator变量以及如下数据:
return array('data'=>$this->paginate(), 'paging' => $this->params['paging']);
答案 0 :(得分:1)
我已经修改了一下,以下内容适用于我,而PaginationHelper也适用:
在元素中:
// requestAction returns an array('data'=>... , 'paging'=>...)
$data = $this->requestAction(array('controller'=>'events','action'=>'archive'));
// if the 'paging' variable is populated, merge it with the already present paging variable in $this->params. This will make sure the PaginatorHelper works
if(!isset($this->params['paging'])) $this->params['paging'] = array();
$this->params['paging'] = array_merge( $this->params['paging'] , $data['paging'] );
foreach($data['events'] as $event) {
// loop through data...
}
在控制器中:
public function archive() {
$this->paginate = array(
'limit' => 10
);
if ($this->params['requested'])
return array('events'=>$this->paginate('Event'), 'paging' => $this->params['paging']);
$this->set('events', $this->paginate('Event') );
}