2013-01-08 45 views
3

我按照CakeBook创建基于Ajax的分页。链接全部正常工作,路由正在工作,因为它将请求发送到控制器上的正确操作。我在控制器操作中获取相关页码,然后将其发送给Paginate助手以获取数据。但是,只有返回结果的第一页,无论页面是否设置。所以,我没有在模型上果然我总是让网页集的PAGINATE功能的覆盖,以1在Cakephp中设置Ajax分页未设置页面

控制器动作代码..

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

那么,如何让分页程序使用我正在发送的页面?

+0

你不需要设置页面,所以你可以删除它。你确定有多个页面可以显示吗?另外,我没有看到您的分页覆盖。 – jeremyharris

+0

嗨,我手动添加了页面,因为它总是发送第一页。我把分页覆盖掉了。我只做了它看到它正在发送什么页码,它始终是1,因此得出结论,问题出在控制器而不是模型。 –

+0

分页与模型无关:)分页程序只是根据分页参数设置常规查找调用的限制。你确定有第2页?你也看过生成的SQL吗? – jeremyharris

回答

2

好的,找到了解决办法。分页的默认值是使用命名参数。哪些给你像网页/页:6。我不知道为什么,但如果你单独离开分页数组并且不设置页面,那么它似乎忽略请求中的页码。所以我改变了分页选项以

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

这是现在正在工作,所以我希望它可以帮助其他人有同样的问题。