有条件地从 CGridView 中删除按钮
remove button from CGridView with condition
您好,我在 yii 中使用 CRUD 生成了 CGridView。如果 appointment_status(CGridView 列之一)值等于 0
,我需要向 CGridView 行添加一个新按钮并隐藏它
这是我的CGridView代码,
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'bookings-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'id',
'name',
'email',
'telephone',
'time',
'employee',
'appointment_status',
'client_ip',
'link' => array(
'header' => 'Confirmation',
'type' => 'raw',
'value' => 'CHtml::button("$data->appointment_status",array("onclick"=>"document.location.href=\'".Yii::app()->controller->createUrl("controller/action",array("id"=>$data->id))."\'"))',
'visible'=>$data->appointment_status==1,
),
array(
'class' => 'CButtonColumn',
),
),
));
但我得到的只是错误说明,
Undefined variable: data
如果有人能研究一下,那将是很大的帮助。
visible
是一个布尔值或一个 PHP 表达式,它将被计算为一个布尔值。在评估期间,$data
被分配给所使用的 dataProvider 中的当前项。 $data
在评估函数 evaluateExpression()
之外不存在。因此,实施应该是:
`visible` => '$data->appointment_status == 1',
您需要在 link 数组中引用可见键的值。所以不是这个:
'visible'=>$data->appointment_status==1
应该是:
'visible'=>'$data->appointment_status==1'
现在应该可以了。
你会得到未定义的变量,因为visible
不允许任何回调。
试试这个解决方案,它是 yii2 代码,我对 Yii 了解不多。
'delete' => function ($url, $model) {
return ($model->isVisible($model)) ?
Html::a('<span class="glyphicon glyphicon-trash"></span>',
$url,
['title' => Yii::t('app', 'Delete')]) : '';
public static function isVisible($data)
{
return ($data->appointment_status == 1) ? true : false;
}
您的 'visible' 处理列可见性而不是按钮,您可以使用模型上的自定义属性来创建和处理按钮可见性。
添加到您的模型:
public function getConfirmationButton()
{
if ($data->appointment_status == 1) {
return CHtml::button($this->appointment_status,array("onclick"=>"document.location.href=\'".Yii::app()->controller->createUrl("controller/action",array("id"=>$this->id))."\'"));
} else {
return '';
}
}
并在您的视图中调用它:
..........
'link' => array(
'header' => 'Confirmation',
'type' => 'raw',
'value' => '$data->confirmationButton',
),
...........
你可以这样使用:
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'bookings-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'id',
'name',
'email',
'telephone',
'time',
'employee',
'appointment_status',
'client_ip',
'link' => array(
'header' => 'Confirmation',
'type' => 'raw',
'value' => function ($data) {
if ($data->appointment_status == 1) {
return CHtml::button("$data->appointment_status", array("onclick" => "document.location.href=\'" . Yii::app()->controller->createUrl("controller/action", array("id" => $data->id)) . "\'"));
} else {
return;
}
}
),
array(
'class' => 'CButtonColumn',
),
),
));
您好,我在 yii 中使用 CRUD 生成了 CGridView。如果 appointment_status(CGridView 列之一)值等于 0
,我需要向 CGridView 行添加一个新按钮并隐藏它这是我的CGridView代码,
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'bookings-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'id',
'name',
'email',
'telephone',
'time',
'employee',
'appointment_status',
'client_ip',
'link' => array(
'header' => 'Confirmation',
'type' => 'raw',
'value' => 'CHtml::button("$data->appointment_status",array("onclick"=>"document.location.href=\'".Yii::app()->controller->createUrl("controller/action",array("id"=>$data->id))."\'"))',
'visible'=>$data->appointment_status==1,
),
array(
'class' => 'CButtonColumn',
),
),
));
但我得到的只是错误说明,
Undefined variable: data
如果有人能研究一下,那将是很大的帮助。
visible
是一个布尔值或一个 PHP 表达式,它将被计算为一个布尔值。在评估期间,$data
被分配给所使用的 dataProvider 中的当前项。 $data
在评估函数 evaluateExpression()
之外不存在。因此,实施应该是:
`visible` => '$data->appointment_status == 1',
您需要在 link 数组中引用可见键的值。所以不是这个:
'visible'=>$data->appointment_status==1
应该是:
'visible'=>'$data->appointment_status==1'
现在应该可以了。
你会得到未定义的变量,因为visible
不允许任何回调。
试试这个解决方案,它是 yii2 代码,我对 Yii 了解不多。
'delete' => function ($url, $model) {
return ($model->isVisible($model)) ?
Html::a('<span class="glyphicon glyphicon-trash"></span>',
$url,
['title' => Yii::t('app', 'Delete')]) : '';
public static function isVisible($data)
{
return ($data->appointment_status == 1) ? true : false;
}
您的 'visible' 处理列可见性而不是按钮,您可以使用模型上的自定义属性来创建和处理按钮可见性。
添加到您的模型:
public function getConfirmationButton()
{
if ($data->appointment_status == 1) {
return CHtml::button($this->appointment_status,array("onclick"=>"document.location.href=\'".Yii::app()->controller->createUrl("controller/action",array("id"=>$this->id))."\'"));
} else {
return '';
}
}
并在您的视图中调用它:
..........
'link' => array(
'header' => 'Confirmation',
'type' => 'raw',
'value' => '$data->confirmationButton',
),
...........
你可以这样使用:
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'bookings-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'id',
'name',
'email',
'telephone',
'time',
'employee',
'appointment_status',
'client_ip',
'link' => array(
'header' => 'Confirmation',
'type' => 'raw',
'value' => function ($data) {
if ($data->appointment_status == 1) {
return CHtml::button("$data->appointment_status", array("onclick" => "document.location.href=\'" . Yii::app()->controller->createUrl("controller/action", array("id" => $data->id)) . "\'"));
} else {
return;
}
}
),
array(
'class' => 'CButtonColumn',
),
),
));