Инвентаризация: Widget: DynaGridWidget

для отображения списка моделей используем компонент /app/components/DynaGridWidget (который в свою очередь использует kartik-v/yii2-dynagrid а тот 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,
]);

Передаваемые колонки не совсем те, которые требуется для yii2-gridview или же kartik-v/yii2-grid: yii-grid-datacolumn
Им конечно можно было передавать класс, но уже есть куча классных классов :-), поэтому сделал просто обертку над ними всеми для унификации вывода

format

По умолчанию raw (вместо text)

label

Если не задано явно, то ищется по алгоритму

$model->getAttributeIndexLabel($attr)

Это добавлено, проверяется наличие такого метода, он добавлен в 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,
    ]
];

тогда все лейблы и хинты будут подтягиваться из модели пользователя

  • инвентаризация/dev/widget/dynagridwidget.txt
  • Последнее изменение: 2023/04/02 05:34
  • admin