我只想显示属于每个帖子的评论,
我这样做了:
在帖子view.php
中,我渲染了一个视图:
<?php
$this->renderPartial('/TblComments/_comment',array(
'comments'=>$model_comments,
));
&GT;
这里是_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
我不知道为什么?请解释并帮助我!
答案 0 :(得分:1)
那是因为你没有将$data
变量传递给_comment.php
,而是在调用$comments
时只传递renderPartial()
变量。
像上面示例那样采用$data
param的文件通常被设计为在CListView或类似内容中使用,您需要传递data provider而不是数组(我假设$model_comments
是?)。
CListView接受数据提供程序,并为数据提供程序中的每条记录转换为$data
变量(就像您在_comments.php
文件中看到的那样)。
假设$model_comments
是模型的'comments'关系,这应该是一个模型对象数组?如果是这种情况,您不必创建与CListView一起使用的新CDataProvider,您可以使用CArrayDataProvide将该关系数组转换为可在CListView中使用的数据提供程序。所以这样的事情对你有用;
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>new CArrayDataProvider($model_comments, array()),
'itemView'=>'/TblComments/_comment',
));
未经测试,您可能需要进行编辑才能尝试。