2016-03-21 68 views
0

您好我有CRUD在yii中生成CGridView。我需要一个新的按钮添加到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', 
     ), 
    ), 
)); 

但是,所有我得到被错误陈述,

未定义的变量:数据

这将是如果someon很大的帮助e可以查看它。

回答

1

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

visible是一个布尔或PHP表达式,将被评估为布尔值。在评估期间,$data被分配给来自所使用的dataProvider的当前项目。 $data在评估函数evaluateExpression()之外不存在。因此,实施应该是:

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

感谢这么多的答案。现在,即使** appointment_status **等于0,错误也不会发生,但是可悲的是,它显示按钮 – vimuth

1

您需要引用链接数组中可见键的值。因此,而不是这样的:

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

它应该是:

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

应该现在的工作。

+0

非常感谢您的答案。现在,即使** appointment_status **等于0,错误也没有出现,但是可悲的是,它显示按钮 – vimuth

+0

为什么你不试图获得更多关于它为什么不起作用的信息。硬编码真和假的可见,看看它是否会工作。如果它起作用,那么你的问题要么在表达中要么在你写列的方式中。 – peaceman

+0

我写这个专栏的方式不能错,因为它来自CRUD。当它加上true或false时,它就会正常工作...... – vimuth

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; 
} 
1

你可以使用这样的:

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