在Yii Framework上遇到CGridView问题...
我希望根据它所拥有的值替换列的内容。
我需要处理特殊情况,所以我在模型中添加了一个函数,将值返回给GridView。
我得到了结果错误“Undefined variable: model
”。
我确信它可能很简单。是因为我的dataProvider不是模型吗?
以下是我的代码的缩短版本:
<?php
/* @var $this BookController */
/* @var $dataProvider CActiveDataProvider */
/* @var $model Book */
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'book-grid',
'dataProvider'=>$dataProvider,
'columns'=>array(
array(
'name'=>'userName',
'header'=>'Name',
),
array(
'name'=>'status',
'header'=>'Status',
'type'=>'raw',
'value'=>array($model, 'statusText')
),
)
));
?>
这是models / Book.php中的代码
class Book extends CActiveRecord
{
...
...
public function statusText($data, $row) {
$content = '';
if (CHtml::encode($data->status) == "processed") {
$content = "Process completed";
}
else if ($data->status=="") {
$content = "Queued for Processing";
}
else {
$content = CHtml::encode($data->status);
}
return $content;
}
...
...
}
答案 0 :(得分:1)
以下是我当前项目的简化示例;
<?php
//My controller
class NewsController extends CController {
//The admin action
public function actionAdmin() {
$model = new News;
$this->render('admin', array(
'model' => $model
));
}
}
//In my view file
$this->widget('ext.widgets.MyTbGridView', array(
'dataProvider' => $model->search(),
'columns' => array(
array(
'name' => 'id',
'filter' => false,
),
array(
'name' => 'title',
),
array(
'value' => array($model, 'gridDate')
),
),
));
//My model function
class News extends CActiveRecord {
public function gridDate($data, $row) {
return 'Date formatted!';
}
}
?>
代码'value' => array($model, 'gridFormatDate'),
很重要。这里有两种可能性。该函数可以驻留在控制器中,在这种情况下,它应该是'value' => array($this, 'gridFormatDate'),
,或者它可以在模型中,在这种情况下,给出正确的代码
答案 1 :(得分:0)
代替array($model, 'statusText')
,尝试'$data->statusText'
。
模型中的方法应如下所示:
public function getStatusText() {
$content = '';
if (CHtml::encode($this->status) == "processed") {
$content = "Process completed";
}
else if ($this->status=="") {
$content = "Queued for Processing";
}
else {
$content = CHtml::encode($this->status);
}
return $content;
}