【问题标题】:CakePHP Paginaton: How to get pagination for comments when I'm using pagination for postsCakePHP Paginaton:当我为帖子使用分页时如何为评论分页
【发布时间】:2014-12-27 18:15:39
【问题描述】:

我有一个帖子模型和一个评论模型。 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);

但这会检索与帖子关联的所有 cmets。我也想要评论的分页。有什么方法可以在 cakephp 中实现吗?我只想显示 3 个 cmets 和“查看更多 cmets”链接,就像我们在 Facebook 上一样。

我知道我可以通过最初从数据库中获取所有 cmets 但仅显示最后三个 cmets 然后使用 ajax 获取另外三个等来轻松实现该功能。但我正在寻找一种更好更简单的方法。

【问题讨论】:

  • 如果它是一个单独的东西(cmets 与帖子听起来很像),那么您所需要的只是对第二个操作“get_cmets”等的第二个 AJAX 请求。
  • 编辑您的问题并显示您的用户界面,以便我能够回答。

标签: php ajax facebook cakephp


【解决方案1】:

我建议拆分帖子和相关 cmets 的检索,而不是依赖于 CakePHP 的模型引擎,以便将管理 cmets 的逻辑合并到尽可能少的代码区域(正如 cmets 中的标记首次建议的那样)。换句话说,先渲染帖子,然后为 cmets 的第一页触发 AJAX 请求。

在 AJAX 请求中,您需要传达要检索其 cmets 的帖子 ID 和页面。例如,假设您的请求格式为SomeController/comments/[postId]/[commentsPage]

在您的控制器中,您将拥有如下布局的操作:

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

您还需要调整 Paginator 设置,以便它可以包含 cmets。像这样布置它(当然,在Comment 部分添加您自己的详细信息):

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

在您的 cmets 操作中,您需要向 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 请求并跟踪您所在的 cmets 页面。管理所有这些是客户端的责任,而不是服务器(您的 CakePHP 应用程序)的责任。不要让它做得太多!

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 1970-01-01
    • 2020-07-07
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    相关资源
    最近更新 更多