{{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, ] ]; тогда все лейблы и хинты будут подтягиваться из модели пользователя