CakePHP Paginaton:当我对帖子使用分页时,如何获得评论的分页


CakePHP Paginaton: How to get pagination for comments when I'm using pagination for posts

我有一个帖子模型和一个评论模型。后期模型和蛋糕模型之间的关联如下

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