Продолжаю пополнять свой багаж знаний в Yii2.
О своих колонках в Grid слышал конечно же, но на практике не использовал. Но когда дубляж кода дошел до 5ти штук в разных местах. Вот и задумался, а почему бы и не попробовать? И казалось довольно не плохо и удобно. А главное гибко!
Ниже приведен полный листинг кода примера колонки наследуемой от DataColumn:
namespace backendgrid; use Yii; use yiihelpersHtml; use yiigridDataColumn; class ActiveColumn extends DataColumn { public $headerOptions = [ 'style' => 'width: 80px;' ]; public $contentOptions = [ 'class' => 'text-center' ]; public $attribute = 'is_active'; /** * @inheritdoc */ protected function renderDataCellContent($a) { if($a['is_active'] == 1) { return Html::a('<span class="glyphicon glyphicon-ok-circle"></span>', [ 'active', 'id' => $a['id'], 'is_active' => 0], [ 'title' => Yii::t('app', 'Unactivate this'), 'data-pjax' => '0', ] ); } return Html::a('<span class="glyphicon glyphicon-lock"></span>', [ 'active', 'id' => $a['id'], 'is_active' => 1], [ 'title' => Yii::t('app', 'Activate this'), 'data-pjax' => '0', ] ); } }
Уверен, тому кто сталкивался хоть раз с GridView в Yii тот знает некоторые параметры. Но я бы остановился на:
public $attribute = 'is_active';
он определяет название поля в БД по которому будет идти поиск Label в модели и соответственно сортировка, при клике по названию поля в таблице (то что в хеадере).
Как использовать? Просто, GridView указываем название нашего класса, и если нужно параметры.
... echo GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ ['class' => ActiveColumn::className()], ], ]); ...