Yii 根据条件从CGridView中删除按钮

Yii 根据条件从CGridView中删除按钮,yii,cgridview,Yii,Cgridview,您好,我已经在yii中生成了CRUD CGridView。我需要在CGridView行中添加一个新按钮,如果约会状态(CGridView列之一)值等于0,则将其隐藏 这是我的CGridView代码 $this->widget('zii.widgets.grid.CGridView', array( 'id' => 'bookings-grid', 'dataProvider' => $model->search(), 'filter' =>

您好,我已经在yii中生成了CRUD CGridView。我需要在CGridView行中添加一个新按钮,如果约会状态(CGridView列之一)值等于0,则将其隐藏

这是我的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',
        ),
    ),
));
但我得到的只是错误陈述

未定义变量:数据


如果有人可以查看它,那将是一个很大的帮助。

visible
是一个布尔值或一个PHP表达式,它将被计算为一个布尔值。在评估过程中,
$data
从使用的数据提供程序分配给当前项目<代码>$data不存在于求值函数之外。因此,实施应:

`visible` => '$data->appointment_status == 1',
 'visible'=>'$data->appointment_status==1'

visible
是一个布尔值或PHP表达式,将对其求值以给出布尔值。在评估过程中,
$data
从使用的数据提供程序分配给当前项目<代码>$data不存在于求值函数之外。因此,实施应:

`visible` => '$data->appointment_status == 1',
 'visible'=>'$data->appointment_status==1'

您需要引用链接数组中可见键的值。因此,与此相反:

'visible'=>$data->appointment_status==1
应该是:

`visible` => '$data->appointment_status == 1',
 'visible'=>'$data->appointment_status==1'

它现在应该可以工作了。

您需要引用链接数组中可见键的值。因此,与此相反:

'visible'=>$data->appointment_status==1
应该是:

`visible` => '$data->appointment_status == 1',
 'visible'=>'$data->appointment_status==1'

它现在应该可以工作了。

您将得到未定义的变量,因为
可见
不允许任何回调

试试这个解决方案,它是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;
}
'delete'=>函数($url$model){
返回($model->isVisible($model))?
Html::a(“”,
$url,
['title'=>Yii::t('app','Delete')):'';
公共静态函数isVisible($data)
{
返回($data->约会\状态==1)?真:假;
}

您将得到未定义的变量,因为
可见
不允许任何回调。

试试这个解决方案,它是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;
}
'delete'=>函数($url$model){
返回($model->isVisible($model))?
Html::a(“”,
$url,
['title'=>Yii::t('app','Delete')):'';
公共静态函数isVisible($data)
{
返回($data->约会\状态==1)?真:假;
}

您的“可见”处理列可见性而不是按钮,您可以使用模型上的自定义属性来创建和处理按钮可见性

添加到您的模型中:

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',
    ),
...........

您的“可见”处理列可见性而不是按钮,您可以使用模型上的自定义属性来创建和处理按钮可见性

添加到您的模型中:

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',
                ),
            ),
        ));
您可以这样使用:

 $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',
                ),
            ),
        ));

非常感谢您的回答。现在错误没有出现,但遗憾的是,即使约会状态为0,它也会显示按钮提示答案。现在错误没有出现,但遗憾的是,即使约会状态为0,它也会显示按钮提示答案。现在错误没有出现,但遗憾的是,即使约会状态为0,它也会显示按钮提示答案ALS 0它显示了按钮为什么不尝试获取有关它为什么不工作的更多信息。硬编码true和false以显示,并查看它是否工作。如果它工作,那么您的问题在于表达式或您编写列的方式。我编写列的方式不会错,因为它来自CRUD。它在n我添加true或false…如果一切正常,则您的语句是不正确的。尝试以某种方式将其转储并查看您得到的结果。还可以尝试以下操作:'($data->appointment\u status==1)?true:false)“非常感谢您的回答。现在不会出现错误,但遗憾的是,即使约会状态等于0,它也会显示按钮。您为什么不尝试获取有关它不起作用的更多信息。请硬编码true和false以显示它是否起作用。如果它起作用,则您的问题在于表达式或您编写专栏的方式。Th我写这个列的方式不会错,因为它来自CRUD。当我添加true或false时,它会正常工作……如果一切正常,那么您的语句就是不正确的。尝试将它变为var_dump,看看您得到了什么。还可以尝试以下操作:“($data->约会状态==1)?true:false)”