{{tag>инвентаризация dev widget}}
====== Инвентаризация: Widget: DynaGridWidget ======
для отображения списка моделей используем компонент /app/components/DynaGridWidget (который в свою очередь использует [[github>kartik-v/yii2-dynagrid]] а тот [[github>kartik-v/yii2-grid]])
echo DynaGridWidget::widget([
'id' => 'arms-index', //обязательно, т.к. на основании ID формируется имя таблицы-виджета, а на основании имени хранятся настройки отображения отдельно на для каждой таблицы
'header' => Html::encode($this->title),
'columns' => require 'columns.php',
'createButton' => Html::a('Создать АРМ', ['create'], ['class' => 'btn btn-success']),
'hintButton' => \app\components\HintIconWidget::widget(['model'=>'\app\models\Arms','cssClass'=>'btn']),
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
]);
==== Columns ====
Передаваемые колонки не совсем те, которые требуется для yii2-gridview или же kartik-v/yii2-grid: {{https://www.yiiframework.com/doc/api/2.0/yii-grid-datacolumn}}
Им конечно можно было передавать класс, но уже есть куча классных классов :-), поэтому сделал просто обертку над ними всеми для унификации вывода
=== format ===
По умолчанию raw (вместо text)
=== label ===
Если не задано явно, то ищется по алгоритму
$model->getAttributeIndexLabel($attr)
Это добавлено, проверяется наличие такого метода, он добавлен в [[инвентаризация:dev:models:armsModel#getAttributeIndexLabel]]
дальше как и в DataColumn
$model->getAttributeLabel($attr))
и потом уже
camel2words($attr)
=== hint ===
такого атрибута нет ни в DataColumn ни в Column
Если он указан, то к Label добавляется hint
Если не указан явно, то проверяется
$model->getAttributeIndexLabel($attr)
=== model ===
если атрибут ссылается на другую модель
например атрибут **name** of user of computer
тогда можно прописать следующим образом:
$columns=[
'user_name'=>[
'attribute'=>name,
'model'=new app\models\Users,
]
];
тогда все лейблы и хинты будут подтягиваться из модели пользователя