CakePHP Paginaton:如何获得分页的评论当我使用分页的帖子
问题描述:
我有一个发表模型和评论模型。 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获取另外三条评论,等等。但我正在寻找更好更简单的方法。
答
我建议将帖子和相关注释的检索分开,而不是依赖于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应用程序)。不要让它做太多!
如果它是一个单独的东西(评论和帖子听起来像它),那么你需要的是第二个AJAX请求到第二个动作“get_comments”等。 – mark 2014-12-27 20:07:30
编辑你的问题并显示你的用户界面,所以我将能够回答。 – 2014-12-28 08:50:51