使用Codeigniter创建评论系统

时间:2016-06-13 06:06:53

标签: php codeigniter frameworks

我正在尝试为每个评论创建一个具有回复功能的评论系统。在过去,O用本机php编写了这个评论系统,但现在当我尝试用codeigniter重写它时,存在一些问题。< / p>

当我用本机php写这个评论系统时,我有一个带有这段代码的HTML文件:

<?php
                $q = "SELECT * FROM productcomments WHERE productId = '$getProductId' AND parentid='0' AND isconfrim!=0";
                $r = mysqli_query($xcon, $q);
                while ($row = mysqli_fetch_assoc($r)):
                    getComments($row);
                endwhile;
?>

这是getComments()函数:

function getComments($row){
global $xcon;
echo "<li class='comment' id='" . $row['commentId'] . "'>";
echo "<div class='commentInfo'>";
echo "<div class='aut'>" . $row['userName'] . "</div>";
echo "<div class='timestamp'>&nbsp;-&nbsp;" . $row['date'] . "</div>";
echo "</div>";
echo "<div class='comment_body'>" . $row['comment'] . "</div>";
echo "<a href='#comment_form' class='reply' id='" . $row['commentId'] . "'>پاسخ به این نظر</a>";
$q = "SELECT * FROM productcomments WHERE parentid = " . $row['commentId'] . " AND isconfrim=1";
$r = mysqli_query($xcon, $q);
if (mysqli_num_rows($r) > 0) {
    echo "<ul>";
    while ($row = mysqli_fetch_assoc($r)) {
        getComments($row);
    }
    echo "</ul>";
}
echo "</li>";
}

现在,当我尝试使用codeigniter框架重写上面的代码时,我的view文件中存在一些问题。但首先请看我的Controller

public function detail($product_id){
    $data['comments'] = $this->products_model->get_comments($product_id);
    $this->load->view('pages/product-detail', $data));
}

和我的Model

  public function get_comments($product_id){
    $this->db->where('product_id', $product_id);
    $this->db->where('is_confirm', '1');
    $query = $this->db->get('xbl_product_comments');
    return $query->result_array();
}

但问题出在这里。我应该编码而不是????我是php本机我只是重新调用我的getComments函数,但我能在这做什么?我该怎么做才能获得parent_id的评论?

<?php foreach ($comments as $comment) { ?>
            <li class='comment' id='<?php echo $comment['id'] ?>'>
                <div class='commentInfo'>
                    <div class='aut'><?php echo $comment['user_name'] ?></div>
                    <div class='timestamp'>&nbsp;-&nbsp;<?php echo $comment['date'] ?></div>
                </div>
                <div class='comment_body'><?php echo $comment['comment'] ?></div>
                <a href='#comment_form' class='reply' id='<?php echo $comment['id'] ?>'>reply</a>
                <?php if ($comment['parent_id']) { ?>
                    <ul>
                        ??? // What should I code here ?
                    </ul>
                <?php } ?>
            </li>
<?php } ?>

1 个答案:

答案 0 :(得分:0)

您可以通过多种方式尝试获取评论数据。一个想法是,您可以调用模型函数在视图文件中获取注释,例如

            <?php if ($comment['parent_id']) { ?>
                <ul>
                    $this->products_model->get_comments($parent_id);
                </ul>
            <?php } ?>

另一个想法是更改你的get_comments模型函数以包含所有父子数据......

  public function get_comments($product_id){
    $this->db->where('product_id', $product_id);
    $this->db->where('is_confirm', '1');
    $query = $this->db->get('xbl_product_comments');
    $data = array();
    foreach($query->result_array() as $row) {
        $data[] = $row;
        if($row['parent_id'] != 0) { 
            $data = $this->get_comments($parent_id);
        }
    }
    return $data;
}

请注意我没有测试过它可能有错误。只需根据您的需要进行更改。

另一个想法是简单地创建一个帮助函数来获取评论

 function get_comments($product_id){
    $ci = &get_instance();    
    $ci->db->where('product_id', $product_id);
    $ci->db->where('is_confirm', '1');
    $query = $ci->db->get('xbl_product_comments');
    return $query->result_array();
}

然后只需在您的“原生”php应用程序中调用此视图中的函数。