1

有没有办法用树行为对 cakePHP 中的评论进行分页?我应该使用树行为还是编写自己的代码来查看评论?

抱歉,这个问题以前有人问过。我找到了一篇文章:在 MySQL 中管理分层数据 ……我将发布我的解决方案。

不,我没有找到好的解决方案。我不想重新发明轮子,我想用蛋糕的方式来做。

我写了一个帮助递归打印评论:

# view/helpers/comments
class CommentsHelper extends AppHelper{
public function printComments($comments = array(), $params = array()){

    if (empty($comments) || !is_array($comments)) return false;

    echo '<ul id="comments-'.$comments[0]['Forum']['id'].'">';
    if (is_array($comments)){
        foreach($comments as $comment):
            ?>
            <li id="<?php echo $comment['Forum']['id']; ?>">
                <div class="inner">
                    <h4><?php echo $comment['Forum']['title']; ?></h4>
                    <div class="meta">
                        <?php echo $comment['User']['first_name']; ?>
                    </div>
                    <div class="content">
                        <?php echo $comment['Forum']['content']; ?>
                    </div>
                </div>
            <?php

            if (isset ($comment['children']))
            if (is_array($comment['children'])){
                if (!empty($comment['children'])) $this->printComments($comment['children']);
            }
            echo '</li>';

        endforeach;
    }
        else{
            echo '<li>'.$comment['Forum']['title'].'</li>';
        }
    echo '</ul>';
}

以下是我从数据库中检索数据的方法:

# controllers/forums.php
$this->set('tree', $this->Forum->find('threaded'););

问题是如何对评论进行分页?

目前我正在使用 2 个表,一个用于根目录,第二个用于线程注释。我没有找到解决办法。

4

5 回答 5

1

您必须通过分页在控制器中手动执行此操作。

关键是正确排序 mysql 查询以首先按 parent_id 然后按 id 查找评论而不是 id(列只是示例) - 这适用于 2 级评论:

    $this->paginate = array(
            'recursive' => -1,
            'conditions' => array(
                'Comment.blog_id' => 0,
            ),
            'order' => array('parent_id', 'id'),
            'limit' => 10   
    );
    $this->set('comments', $this->paginate('Comment'));
于 2011-08-05T18:51:52.663 回答
0

你不能。我所做的是一个在全线程评论视图和平面分页列表之间切换的链接。

于 2011-04-30T16:17:19.860 回答
0

恕我直言:你认为分页评论是个好主意吗?只需最小化页面上的评论空间,并将它们放入一个浮动中。不要让您的用户点击太多链接...

于 2011-04-30T16:28:23.750 回答
0

你可以做到这一点

您的模态代码:

var $hasMany = array(
    'Pages' => array(
        'className' => 'Page',
        'foreignKey' => 'parent_id',
    )
);

您的控制器代码:

$this->paginate = array(
        'Page' => array(
            'contain' => array(
                'Pages'
            ),
            'conditions' => array(
                'Page.parent_id' => null
            )
        )
    );
    $pages = $this->paginate();
于 2015-05-10T10:58:39.163 回答
0

您应该使用树行为并按 lft 排序。

于 2017-12-22T15:46:15.243 回答