2016-03-21 44 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', 
       ), 
      ), 
     ));