[英]Yii CGridView handle special cases using model function
在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;
}
...
...
}
這是我當前項目中的簡化示例;
<?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'),
或者可以在模型中,在這種情況下,給出正確的代碼
代替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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.