我已按照CakeBook创建基于Ajax的分页。链接都在工作,路由正在工作,因为它正在将请求发送到控制器上的正确操作。我在控制器操作中获取相关页码,然后将其发送到Paginate帮助程序以获取数据。但是,无论页面设置如何,它都只返回结果的第一页。所以我在模型上覆盖了paginate函数,果然我总是将页面设置为1。
控制器操作代码..
public function reviews(){
if ($this->RequestHandler->isAjax()) {
if(!empty($this->params['page'])) {
$review = $this->Page->find('first', array('conditions'=>array('friendly'=>'reviews')));
$this->layout = 'ajax';
$this->paginate = array(
'page' => $this->params['page'],
'limit' => 3,
'order' => array(
'Review.rating'=>'desc')
);
$reviews = $this->paginate('Review');
$this->set(compact('review','reviews'));
}
}
}
那么如何让Paginator使用我发送的页面呢?
答案 0 :(得分:2)
好的,找到了解决方案。分页的默认设置是使用命名参数。这给你像blah / page的网址:6。我不知道为什么,但如果你单独留下Pagination数组并且没有设置页面,那么它似乎忽略了请求中的页码。所以我将分页中的选项更改为
$this->paginate = array('Review'=>array(
'paramType' => 'querystring',
'page' => $this->params['page'],
'limit' => 3,
'order' => array(
'Review.rating'=>'desc')
));
然后没有正确地完成路由,我从AJAX请求中获取了错误的页面。这让我觉得它可能是一个路由问题....我没有太跟随这一点,因为我在创建分页链接时通过将视图上的分页选项设置为强制路由: -
$this->Paginator->options(array(
'update' => '#tabReviews',
'evalScripts' => true,
"url"=>(array("controller"=>'home',"action"=>'reviews',"plugin"=>'tyres'))
));
现在正在运作,所以我希望能帮助其他人解决同样的问题。