2017-02-22 5 views
2

GridView:widget()の列インデックスを使用してyii2 gridviewにデータを表示しようとしています。私はデータベースに多数のフィールド(約40)があり、それらのすべてを表示する必要があり、THとTDにフィールド名と同じCSSクラス名を追加したい。 私は、私は、コードの下に使用していることを達成することができます知っているが、私は多くのコードを記述する必要があります。yii2 GridViewの各THとTDにcssクラスを追加する方法

'columns' => [ 
     [ 
      'attribute' => 'ID', 
      'contentOptions' => ['class' => 'ID'], 
      'headerOptions' => ['class' => 'ID'] 
     ], 
     [ 
      'attribute' => 'Insured', 
      'contentOptions' => ['class' => 'Insured'], 
      'headerOptions' => ['class' => 'Insured'] 
     ], 

     . 
     . 

     [ 
      'attribute' => 'Phone', 
      'contentOptions' => ['class' => 'Phone'], 
      'headerOptions' => ['class' => 'Phone'] 
     ] 
], 

は、いくつかのコールバック関数または他の何かを使用していると、他の効率的な方法はありますか?あなたのGridViewのデフォルトとして

答えて

3

設定カスタム列クラス:

'dataColumnClass' => 'name\space\for\MyDataColumn', 

yii\grid\DataColumnを拡張MyDataColumnクラスを作成します。

はInsideは、追加:

public function init() 
{ 
    parent::init(); 
    if (!empty($this->attribute) { 
     $this->headerOptions = array_merge($this->headerOptions, [ 
      'class' => $this->attribute, 
     ]); 
     $this->contentOptions = array_merge($this->contentOptions, [ 
      'class' => $this->attribute, 
     ]); 
    } 
} 
+0

おかげ@Bizley、それは働きました。 'parent :: init();'について少し説明してください。 –

+0

'init()'メソッドは、オブジェクトが与えられた設定で初期化された後にコンストラクタの最後で呼び出されます。このメソッドをオーバーライドするときは、親の 'init()'を呼び出すことをお勧めします。 – Bizley

関連する問題