Бортовой журнал Ктулху

Yii 2 виджет GridView полный пример | Yii 2 GridView widget full example

Рабочий пример использования виджета GridView. Это такой виджет, который позволяет отображать данные в виде таблицы с фильтрацией, сортировкой и постраничной навигацией, также, с возможностью менять как внешний вид отдельных элементов так и модифицировать выводимые данные.

Как сделать контроллер, модель и представление я писал ранее, в этот раз будет подробный разбор настроек виджета.

model.php

Метод в модели, который будет использоваться для вывода информации из одного из полей в GridView.

Внутри этого метода можно производить любые манипуляции и результат будет выводиться в указанное поле, в данном случае "field".

public function getfieldFunc()
 {
 return $this->field;
 }

 

view.php

Код для представления:

 
$dataProvider = new ActiveDataProvider([
 'query' => modelName::find(),
 'pagination' => [
 'pageSize' => 25,
 ],
 'sort' => false, //если не нужна сортировка. Если нужна - пример кода ниже, этот закомментировать, тот раскомментировать 
/*
'sort' =>
 ['defaultOrder' => [
 'idx' => SORT_ASC]
 ],
*/
]);
echo GridView::widget([
 'dataProvider' => $dataProvider,
 'formatter' => ['class' => 'yii\i18n\Formatter','nullDisplay' => ''], // вместо текста типа "не указано" будет указанное в nullDisplay значение
 'tableOptions' => [
 'class' => 'table table-striped table-bordered',
 'id' => 'test'
 ],
// в этой секции перечисляются выводимые поля и прочие виджеты
 'columns' => [
 [
 'class' => 'yii\grid\SerialColumn' // сквозная нумерация строк
 ],
// эти поля выводятся как есть
'id',
 'idx',
 'field',
 'value',
 'timestamp',
// поле обрабатывается геттером из модели, пример геттера выше
 [
 'attribute' => 'field',
 'value' => 'fieldFunc', // в модели метод с названием getfieldFunc()
 ],
 [ // для кастомизации вывода поля используется анонимная функция, примерно те же яйца но сбоку в предыдущем поле с методом getFieldFunc() в модели
 'attribute' => 'usr', // название поля
 'header' => 'User', // текст в шапке. Если не указывать, будет использоваться название поля или соответствие, указанное в attributeLabels()
 'format' => 'raw', // формат
 'value' => function($model) {
 //
 // return $model->value;
 return "User Name";
 },
 ],
 [
 'class' => 'yii\grid\ActionColumn',
 'template' => '{view}',
 'header' => '<a href="javascript: alert()"><i style="color: forestgreen;" class="fa fa-plus"></i></a>',
 'buttons' => [
 'view' => function ($url, $model) {
 return '<p style="display: inline-flex"><a href="javascript:assocEdit(\'' . $model->idx . '\')"><i style="color: forestgreen" class="fa fa-edit"></i> </a></p>';
 },
 ]
 ],
 ],
'emptyText' => 'Ничего не найдено',
 'summary' => 'На странице {count} из {totalCount}'
]);

 

2022 09 07 8.42.56