2014-12-27 39 views
0

我有一個發表模型和評論模型。 Post Model和Cake Model之間的關聯如下CakePHP Paginaton:如何獲得分頁的評論當我使用分頁的帖子

Post has many comments 
Comments belongs to Post 

我正在使用分頁在我的頁面上實現「無限滾動」。

public $paginate = array('limit' => 15, 
     'order' => array('Post.id' => 'desc'),'conditions' => array('Post.hidden' => 0) 
    ); 

 $this->Paginator->settings = $this->paginate; 
     $post = $this->Paginator->paginate('Post'); 
     $this->set('posts',$post); 

但檢索與帖子相關聯的所有評論。我也想爲評論分頁。有沒有什麼辦法可以在cakephp中實現它?我只想顯示3條評論和「查看更多評論」鏈接,就像我們在Facebook上看到的一樣。

我知道我可以很容易地實現該功能,最初從數據庫中獲取所有評論,但只顯示最後三條評論,然後通過使用ajax獲取另外三條評論,等等。但我正在尋找更好更簡單的方法。

+2

如果它是一個單獨的東西(評論和帖子聽起來像它),那麼你需要的是第二個AJAX請求到第二個動作「get_comments」等。 – mark 2014-12-27 20:07:30

+0

編輯你的問題並顯示你的用戶界面,所以我將能夠回答。 – 2014-12-28 08:50:51

回答

1

我建議將帖子和相關注釋的檢索分開,而不是依賴於CakePHP的模型引擎,以便將管理註釋的邏輯合併到儘可能少的代碼區域(正如註釋中的標記所提示的那樣)。換句話說,首先呈現帖子,然後發出第一頁評論的AJAX請求。

在AJAX請求中,您需要傳遞想要檢索註釋的帖子ID和頁面。例如,假設您的要求是在SomeController/comments/[postId]/[commentsPage]

格式在你的控制,你會擁有這是奠定了像一個動作如下:

public function comments($postId, $page) { 
    ... 
} 

你也將需要調整Paginator設置,以便它可以包含評論。攤開來有點像這樣的(當然增加自己的細節爲Comment部分):

public $paginate = array(
    'Post' => array('limit' => 15, 'order' => array('Post.id' => 'desc'),'conditions' => array('Post.hidden' => 0)), 
    'Comment' => array(...) 
); 

內,您的意見採取行動,你需要提供附加條件和頁碼的Paginator

// tweak the paginator settings for the Comments model 
$this->paginate['Comments']['page'] = $page; 
$this->paginate['Comments']['conditions'] = array('Comments.postId', $postId); 
// get some comments 
$comments = $this->Paginator->paginate('Comments'); 
$this->set('comments', $comments); 

當然,您將不得不編寫一些JavaScript來發出AJAX請求並跟蹤您所在的評論頁面。這是客戶端管理所有這些的責任,而不是服務器的(您的CakePHP應用程序)。不要讓它做太多!