Продовжую поповнювати свій багаж знань у 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()], ], ]); ...
