2014-12-27 41 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应用程序)。不要让它做太多!