从条件中删除CGridView中的按钮

时间:2016-03-21 14:04:08

标签: yii cgridview

嗨我在yii中有CRUD生成的CGridView。我需要向CGridView行添加一个新按钮,如果 appointment_status (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',
        ),
    ),
));

但我得到的只是错误陈述,

  

未定义的变量:数据

如果有人可以调查它会很有帮助。

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您需要在链接数组中引用可见键的值。所以不要这样:

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

应该是:

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

现在应该可以了。

答案 2 :(得分: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;
}

答案 3 :(得分:1)

你的可见&#39;处理列可见性而不是按钮,您可以使用模型上的自定义属性来创建和处理按钮可见性。

添加到您的模型中:

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

答案 4 :(得分: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',
                ),
            ),
        ));