2013-01-08 119 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')) 
)); 

這是現在正在工作,所以我希望它可以幫助其他人有同樣的問題。