CakePHP分页:当#39; m对帖子使用分页时,如何对评论进行分页

时间:2014-12-27 18:15:39

标签: php ajax facebook cakephp

我有一个帖子模型和一个评论模型。 Post Model和Cake Model之间的关联如下

 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获取另外三条等来轻松实现该功能,依此类推。但我正在寻找一种更好,更简单的方法。

1 个答案:

答案 0 :(得分: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应用程序)。不要让它做得太多!