2017-08-02 12 views
0

私のプロジェクトには、アクションボタンを読み込むためのフィルタフィールドとアクションカラムを示す'filterModel' => $searchModel,のGridviewウィジェットがあります。私の問題は、コントローラの2つの別々のアクションでこのGridviewを再利用したいと思うことです。 1つのアクション、すなわちindexアクションは、ユーザーのデータをロードし、ユーザーがフィルターフィールドを使用してフィルターをかけ、アクション列でさまざまなアクションを実行できるようにします。もう1つはcontroller actionです。これはpdfレポートを生成するので、フィルターフィールドとアクション列をレポートに残したくありません。 if elseを使用してコード全体を書き直すことなく、条件をGridviewに渡す方法はありますか?使用するコードの量に関しては効果がありません。ここまでは私が今までに書いたコードですが、最小限のコードで短いフォームが必要です。条件ならば、フィルタを非表示にするにはYii2:GridViewウィジェット内での条件の使い方

のindex.php

<?php 

$action_id = Yii::$app->controller->action->id; 

if ($action_id == 'index') { 
    \yiister\adminlte\widgets\grid\GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 
     "condensed" => false, 
     "hover" => true, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      'name', 
      'mobile_number', 
      'sex', 
      [ 
       // the attribute 
       'attribute' => 'date', 
       // format the value 
       'value' => function ($model) { 
        if (extension_loaded('intl')) { 
         return Yii::t('app', '{0, date, MMMM dd, YYYY HH:mm}', [$model->date]); 
        } else { 
         return date($model->date); 
        } 
       }, 
       // some styling? 
       'headerOptions' => [ 
        'class' => 'col-md-2' 
       ], 
       // here we render the widget 
       'filter' => DateRangePicker::widget([ 
        'model' => $searchModel, 
        'attribute' => 'date_range', 
        'pluginOptions' => [ 
         'format' => 'd-m-Y', 
         'autoUpdateInput' => false 
        ] 
       ]) 
      ], 
      [ 
      'attribute' => 'officer', 
      'value' => 'officer.first_name' 
      ], 
      ['class' => 'yii\grid\ActionColumn', 
      'template' => '{view}&nbsp{update}', //{view}&nbsp; 
      'buttons' => [ 
       'view' => function($url, $model) { 
         return Html::a('<button class="btn btn-success"><i class="glyphicon glyphicon-eye-open"></i></button>',$url, [ 
          'class' => 'showModalButton', 
          'id' => 'lead-view', 
          'title' => 'View Customer Details', 
          'value' => $url, 
          'data-toggle' => 'modal', 
          'data-target' => 'modal', 
          ]); 
        }, 
       'update' => function($url, $model) { 
         return Html::a('<button class="btn btn-primary"><i class="glyphicon glyphicon-pencil"></i></button>',$url, [ 
           'title' => 'Edit Customer Details', 
          ]); 
        }, 
       'urlCreator' => function($action, $model, $key, $index) { 
         if ($action == 'view') { 
          return Html::a('Action', $url); 
         } 
         if ($action == 'update') { 
         return Html::a('Action', $url); 
         } 
        } 
       ],    
      ], // fin ActionColumn 
     ], 
    ]); 
} else { 
    \yiister\adminlte\widgets\grid\GridView::widget([ 
     'dataProvider' => $dataProvider, 
     "condensed" => false, 
     "hover" => true, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      'name', 
      'mobile_number', 
      'sex', 
      [ 
       // the attribute 
       'attribute' => 'date', 
       // format the value 
       'value' => function ($model) { 
        if (extension_loaded('intl')) { 
         return Yii::t('app', '{0, date, MMMM dd, YYYY HH:mm}', [$model->date]); 
        } else { 
         return date($model->date); 
        } 
       }, 
       // some styling? 
       'headerOptions' => [ 
        'class' => 'col-md-2' 
       ], 
       // here we render the widget 
       'filter' => DateRangePicker::widget([ 
        'model' => $searchModel, 
        'attribute' => 'date_range', 
        'pluginOptions' => [ 
         'format' => 'd-m-Y', 
         'autoUpdateInput' => false 
        ] 
       ]) 
      ], 
      [ 
      'attribute' => 'officer', 
      'value' => 'officer.first_name' 
      ], 
     ], 
    ]); 
} 

答えて

1

は短い構文を使用します。

'filterModel' => $myCondition ? $searchModel : null, 

ActionColumn使用visible属性非表示にするには:

[ 
    'class' => 'yii\grid\ActionColumn', 
    'visible' => $myCondition ? true : false, 
    // here rest of your code 
], 
+0

をあなたにユピックをありがとうございます。あなたは私の友人をたくさん救った。これは私のためにうまく動作します。 – japheth

関連する問題