显示评论和回复?

时间:2016-09-19 16:24:11

标签: php mysql yii2

我正在尝试显示评论和回复,但我真的不知道该怎么做。这是我的桌子。

,

我写的这段代码只是为了显示评论,但我希望评论能够显示评论的回复(如果有的话)。在它显示下一个评论之前

\

2 个答案:

答案 0 :(得分:3)

我不熟悉Yii。但是你可以使用递归来实现这一点。尝试实现类似于以下内容:

function show_replies($parent_id = 0, $level = 0) {
    $query = "select * from comments where parent_id = $parent_id";
    $result = mysql_query($query);
    if (!$result || !mysql_num_rows($result)) {
        return;
    }

    while($detail = mysql_fetch_array($result)) {
        $space ='';
        for ($i = 0; $i < $level; $i++) {
            $space .= "--";
        }

        echo $space.'Country Name: '.$detail['user_comment'].'</br>';
        echo $space.'State Name: '.$detail['byy'].'</br>';
        echo $space.'City Name: '.$detail['name'].'</br>';
        show_replies($detail['comment_id'], $level + 1);
    }
}

show_replies();

答案 1 :(得分:0)

以下是pseudocode的实际代码:

<?php 
// print comments and/or replies body
function print_comments( $topic_id, $parent_id ) {
   $all_comments = Comment::find()
               ->where(
                   'topic_id' => $topic_id,
                   'parent_id' => $parent_id
               )->all();

    if( empty($all_comment) ) {
      return "";
    }

    $comments = '<ul>';
    foreach( $all_comments as $comment ) {
        $comments .= '<li>
            <p> '.$comment->user_comment.' </p>
            <p> by: '.$comment->byy.' </p>';

            // print replies
            $comments .= print_comments( $topic_id, $comment->comment_id ); // recursive

        $comments .= '</li>';
    }
    $comments .= '</ul>';

    return $comments;
}
?>

将上述代码放在视图文件的顶部。现在使用以下行显示/回显您的评论和回复。

<?php echo print_comments( Yii::$app->getRequest()->getQueryParam('id'), 0); ?>

(上一个回答)

您可以尝试遵循此pseudocode

print_comments( queryParam(id),  0); // parent_id = 0

// print comments and/or replies body
print_comments ( $topic_id, $parent_id ) {
   $all_comments = Comment::find()
               ->where(
                   topic_id => $topic_id,
                   parent_id => $parent_id
               )->all();

    if( $all_comment count = zero )
      return

    <ul>
    foreach( $all_comments as $comment ) {
        <li>
            <p> $comment->user_comment </p>
            <p> by: $comment->byy </p>

            // print replies
            print_comments( $topic_id, $comment->comment_id ); // recursive

        </li>
    }
    </ul>
}

优点:更易于理解和实施。
缺点:使用大量查询。

任何其他方式来克服利弊? 请记住,当与分页一起使用时,这种做法很难实现。

  1. 使用单个查询获取所有评论和回复
  2. 将所有这些格式化为comment =&gt;回复关系
  3. 循环关系并显示它