2017-02-22 36 views
2

Я пытаюсь отобразить данные в gridview yii2 с использованием индекса столбцов в GridView: widget(). У меня есть большое количество полей в базе данных (около 40) и вам нужно отобразить их все, и вы хотите добавить такое же имя класса css, что и имя поля для каждого TH и TD. Я знаю, что я могу добиться того, что с помощью кода ниже, но я должен писать много кода:Как добавить класс CSS для каждого TH и TD в yii2 GridView

'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'] 
     ] 
], 

есть ли другой эффективный способ, что с помощью некоторой функции обратного вызова или что-нибудь еще?

ответ

3

Установить пользовательский класс столбец по умолчанию в вашем GridView:

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

Создать MyDataColumn класс, который расширяет yii\grid\DataColumn.

Внутри добавить:

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