2014-11-26 13 views
28

Chcę ukryć przyciski kolumny akcji GridView Yii2 na podstawie stanu pola modelu. Jeśli status wynosi = 1, a następnie ukryj tylko przycisk widoku. Jak mogę?Ukryj Yii2 GridView Przyciski akcji

Kod:

 [ 
     'class' => 'yii\grid\ActionColumn', 
     'contentOptions' => ['style' => 'width:260px;'], 
     'header'=>'Actions', 
     'template' => '{view} {delete}', 
     'buttons' => [ 

      //view button 
      'view' => function ($url, $model) { 
       return Html::a('<span class="fa fa-search"></span>View', $url, [ 
          'title' => Yii::t('app', 'View'), 
          'class'=>'btn btn-primary btn-xs',         
       ]); 
      }, 
     ], 

     'urlCreator' => function ($action, $model, $key, $index) { 
      if ($action === 'view') { 
       $url ='/jobs/view?id='.$model->jobid; 
       return $url; 
     } 

     ], 
+1

https://github.com/yiisoft/yii2/blob/5c79ab202cce74048957dce586d7ef2796908138/framework/grid/ActionColumn.php#L70 wystarczy dodać 'return $ model-> Status == 1? Html :: a (' Wyświetl', $ url, [ 'title' => Yii :: t ('app', 'View'), 'class' = > 'btn btn-primary btn-xs', ]): ''; ' –

+0

Twój kod pracował dla mnie, dzięki –

+0

Czy możesz zmienić swój komentarz jako odpowiedź poniżej? –

Odpowiedz

17

Read

Wystarczy dodać

return $model->status == 1 
    ? Html::a('<span class="fa fa-search"></span>View', $url, [ 
     'title' => Yii::t('app', 'View'), 
     'class' =>'btn btn-primary btn-xs', 
     ]) 
    : ''; 
1

To co mam zrobić https://github.com/Mihai-P/yii2theme-brain/blob/master/widgets/ActionColumn.php w skrócie mam przedłużony klasę ActionColumn i użyć własnego zamiast domyślnego. Moja klasa ma więcej rzeczy, jak sprawdzanie uprawnień dostępu i pokazywanie tylko przycisków, do których ma dostęp, możesz zignorować tę część i po prostu użyć tej metody, aby sprawdzić sposób sprawdzenia modelu. Uważam to za bardziej nadające się do ponownego użycia, a następnie pisanie kodu w widoku. Jeśli zaczniesz pisać kod w widoku, musisz pisać ten sam kod w kółko dla każdego ekranu.

Jestem pewien, że można również zrobić to, co chcesz w środku zdania, spróbuj użyć

'template' => function ($model) { 
      ............. 
     } 

i powrócić albo '{Widok} {delete}' lub '{delete}'

0

swoje prace dla mnie:

to to samo co: return $ model-> status == ''? "show_action_here": "no_show";

+0

Czy możesz wyjaśnić, jak to działa? – rayryeng

+0

tak ... jest taki sam jak: return $ model-> status == ''? 'tak nie'; – gugoan

+0

ok, rozumiesz? @rayryeng – gugoan

6

W yii2 użytku return Url::to(['controler/action']);

całkowicie

 [ 
     'class' => 'kartik\grid\ActionColumn', 
     'template' => '{today_action}', 
     'buttons' => [ 
         'today_action' => function ($url, $model) { 
         return Html::a('<span class="glyphicon glyphicon-check"></span>', $url, 
         [ 
          'title' => Yii::t('app', 'Change today\'s lists'), 
         ]); 
        } 
       ], 
       'urlCreator' => function ($action, $model, $key, $index) { 
      if ($action === 'today_action') { 
       return Url::to(['customers/today']); 
      } 
     } 
      ], 

Używam rozszerzenie Kartik ale działa dobrze z Yii

25

Można użyć ['class' => ActionColumn::className(),'template'=>'{view} {update}' ] na GridView.

+1

Prosty i łatwy sposób, dzięki – Mohsen

+1

Dobra odpowiedź, proste. –

0

ten pracował dla mnie. Kompletny kod ActionColumn

[ 
       'class' => 'yii\grid\ActionColumn', 
       'contentOptions' => ['style' => 'width:260px;'], 
       'header'=>'Actions', 
       'template' => '{view}', 
       'buttons' => [ 

        //view button 
        'view' => function ($url, $model) { 
         return Html::a('<span class="fa fa-search"></span>View', $url, 
[ 'title' => Yii::t('app', 'View'), 'class'=>'btn btn-primary btn-xs', ]) ; 
        }, 
       ], 

       'urlCreator' => function ($action, $model, $key, $index) { 
        if ($action === 'view') { 
         $url = \yii\helpers\Url::toRoute(['general-info/viewalldetails', 'id' => $key]); 
         return $url; 
       } 
       } 
], 
2

trzeba dodać propiety szablonu ('szablon' => '{Aktualizacja} {delete}') do Arry kolumnowej, gdzie można umieścić opcje

'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      'id', 
      'otherfield' 
['class' => 'yii\grid\ActionColumn','template'=>'{update} {delete}'],
0

Trzeba aby zmienić tylko jedną linię.

Wymienić:

'template' => '{update} {delete}',

Z:

'template' => function($model){ 
 
    return ($model->status==1)?'{update} {delete}':'{view} {update} {delete}'; 
 
},

2

Można to zrobić jak ten

[ 
    'class' => 'yii\grid\ActionColumn', 
    'contentOptions' => [], 
    'header'=>'Actions', 
    'template' => '{view} {update} {delete}', 
    'visibleButtons'=>[ 
     'view'=> function($model){ 
       return $model->status!=1; 
     }, 
    ] 
], 
+0

Nie wiedziałem o tablicy visibleButtons - ładnie i czysto. Dzięki. –

Powiązane problemy