0

我只想显示属于每个帖子的评论,

我已经这样做了:在帖子view.php中我渲染了一个视图:

<?php 

 $this->renderPartial('/TblComments/_comment',array(

     'comments'=>$model_comments,
        ));

?>

这是_comment.php

<div class="view">

    <b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>
    <?php echo CHtml::link(CHtml::encode($data->id), array('view', 'id'=>$data->id)); ?>
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('user_id')); ?>:</b>
    <?php echo CHtml::encode($data->user_id); ?>
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('post_id')); ?>:</b>
    <?php echo CHtml::encode($data->post_id); ?>
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('comment_body')); ?>:</b>
    <?php echo CHtml::encode($data->comment_body); ?>
    <br />


        <?php echo CHtml::link('Edit', array('tblComments/update', 'id'=>$data->id)); ?>
        <br/>
        <?php echo CHtml::link('Delete', array('tblComments/delete', 'id'=>$data->id)); ?>

</div>

现在的问题是:

Undefined variable: data 

我不知道为什么 ?请解释并帮助我!

4

1 回答 1

1

那是因为你没有将$data变量传递给_comment.php,你只是$comments在调用时传递了一个变量renderPartial()

像上面的示例那样采用$data参数的文件通常设计为在 CListView 或类似内容中使用,您需要传递数据提供程序而不是数组(我假设$model_comments是这样吗?)。

CListView 接受一个数据提供者,它为数据提供者中的每条记录转换为一个$data变量(就像您在文件中看到的那样)。_comments.php

假设$model_comments您的模型是“评论”关系,这应该是模型对象的数组吗?如果是这种情况,您不必创建新的 CDataProvider 来与 CListView 一起使用,您可以使用CArrayDataProvide将该关系数组转换为可在 CListView 中使用的数据提供程序。所以这样的事情可能对你有用;

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>new CArrayDataProvider($model_comments, array()),
    'itemView'=>'/TblComments/_comment',
));

未经测试,您可能需要编辑才能品尝。

于 2012-10-31T08:36:00.743 回答