Виджет Gridview используется для отображения различных данных в сетке, таких как текст, изображения и имеет множество функций, таких как сортировка, постраничная разбивка и т.д.
<?= GridView::widget([ // объявление виджета 'dataProvider' => $dataProvider, // входящие данные 'filterModel' => $searchModel, // фильтрация и поиск 'columns' => [ ['class' => 'yii\grid\SerialColumn'], // Атрибуты таблицы 'categoryid', 'categoryname', 'parentid', 'createdon', ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
По умолчанию класс Gridview называется 'grid-view', если мы хотим его изменить добавляем свойство options
<?= GridView::widget([ // объявление виджета 'dataProvider' => $dataProvider, // входящие данные 'filterModel' => $searchModel, // фильтрация и поиск 'columns' => [ ['class' => 'yii\grid\SerialColumn'], // Атрибуты таблицы 'categoryid', 'categoryname', 'parentid', 'createdon', ['class' => 'yii\grid\ActionColumn'], ], 'options'=>['class'=>'mynewclass'], // новый класс ]); ?>
Таблица с данными в GridView по умолчанию содержит классы ‘table table-striped table-bordered', для смены этих классов добавляем свойство 'tableOptions'
<?= GridView::widget([ // объявление виджета
'dataProvider' => $dataProvider, // входящие данные
'filterModel' => $searchModel, // фильтрация и поиск
'columns' => [
['class' => 'yii\grid\SerialColumn'],
// Атрибуты таблицы
'categoryid',
'categoryname',
'parentid',
'createdon',
['class' => 'yii\grid\ActionColumn'],
],
'tableOptions'=>['class'=>'mytableclass'], // класс таблицы
]); ?>
Для этого используем свойстов 'rowOptions'
<?= GridView::widget([ // объявление виджета 'dataProvider' => $dataProvider, // входящие данные 'filterModel' => $searchModel, // фильтрация и поиск 'columns' => [ ['class' => 'yii\grid\SerialColumn'], // Атрибуты таблицы 'categoryid', 'categoryname', 'parentid', 'createdon', ['class' => 'yii\grid\ActionColumn'], ], 'rowOptions'=>function ($model, $key, $index, $grid){ $class=$index%2?'odd':'even'; // стилизация четной и нечетной строки return array('key'=>$key,'index'=>$index,'class'=>$class); }, ]); ?>
По умолчанию Gridview содержит постраничную разбивку (pager), информацию о количестве записей (summary), сортировку (sorter) и саму таблицу с данными (items). Настраивается шаблон gridview через свойство layout .
<?= GridView::widget([ // объявление виджета 'dataProvider' => $dataProvider, // входящие данные 'filterModel' => $searchModel, // фильтрация и поиск
'layout'=>"{sorter}\n{pager}\n{summary}\n{items}", 'columns' => [ ['class' => 'yii\grid\SerialColumn'], // Атрибуты таблицы 'categoryid', 'categoryname', 'parentid', 'createdon', ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
<?= GridView::widget([ // объявление виджета 'dataProvider' => $dataProvider, // входящие данные 'filterModel' => $searchModel, // фильтрация и поиск 'summary'=>'', // скрыть 'showFooter'=>true, // показать 'showHeader' => true, // показать 'columns' => [ ['class' => 'yii\grid\SerialColumn'], // Атрибуты таблицы 'categoryid', 'categoryname', 'parentid', 'createdon', ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
<?= GridView::widget([ // объявление виджета 'dataProvider' => $dataProvider, // входящие данные 'filterModel' => $searchModel, // фильтрация и поиск 'showOnEmpty'=>true, // показывать всегда 'columns' => [ ['class' => 'yii\grid\SerialColumn'], // Атрибуты таблицы 'categoryid', 'categoryname', 'parentid', 'createdon', ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
<?= GridView::widget([ // объявление виджета 'dataProvider' => $dataProvider, // входящие данные 'filterModel' => $searchModel, // фильтрация и поиск 'emptyCell'=>'-', // если ячейка пустая, отобразится прочерк 'columns' => [ ['class' => 'yii\grid\SerialColumn'], // Атрибуты таблицы 'categoryid', 'categoryname', 'parentid', 'createdon', ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], ......... [ 'class' => 'yii\grid\ActionColumn', 'header'=>'Кнопки действия', // заголовок столбца 'headerOptions' => ['width' => '100'], // ширина столбца 'template' => '{view} {update} {delete}{link}', // кнопка просмотра, изменения, удаления, ссылка ], ], ]); ?>
Настройка кнопок
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], ......... [ 'class' => 'yii\grid\ActionColumn', 'header'=>'Кнопки действия', // заголовок столбца 'headerOptions' => ['width' => '100'], // ширина столбца 'template' => '{view} {update} {delete}{link}', // кнопка просмотра, изменения, удаления, ссылка 'buttons' => [ 'update' => function ($url,$model) { return Html::a( '', $url); }, 'link' => function ($url,$model,$key) { return Html::a('Определенное действие', $url); }, ], ], ], ]); ?>
Для назначения атрибутов ячейкам таблицы GridView используем параметр 'contentOptions'. Атрибуты таблицы могут быть определены как анонимной функцией, так и массивом. Первый и второй вариант наглядно это показывают.
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], ... // Вариант первый [ 'attribute'=>'parent_id', 'label'=>'Родительская категория', 'contentOptions' =>function ($model, $key, $index, $column){ return ['class' => 'name']; }, 'content'=>function($data){ return "value"; } ], // Вариант второй [ 'attribute'=>'category_image', 'contentOptions' =>['class' => 'table_class','style'=>'display:block;'], 'content'=>function($data){ return "value"; } ], ... ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], ..... [ 'label'=>'Изображение', 'format'=>'raw', 'value' => function($data){ $url = "http://www.mysite.ru/logo.png"; return Html::img($url,['alt'=>'myimage']); } ], .... ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], ......... [ 'label'=>'Ссылка', 'format'=>'raw', 'value' => function($data){ $url = "http://www.mysite.ru; return Html::a('Перейти, $url, ['title' => 'Перейти']); } ], ......... ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], ......... [ 'attribute'=>'parentid', 'label'=>'Имя родительского столбца', 'format'=>'text',//raw, html 'content'=>function($data){ return $data->getParentName(); // функция получения имени из родительской таблицы } ], // ***** или ***** 'parent.categoryname', ......... ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
Модель родительской таблицы
namespace app\models; use Yii; ........ class TblCategory extends \yii\db\ActiveRecord { ......... public function getParent() { return $this->hasOne(TblCategory::className(), ['categoryid' => 'parentid']); // связь таблиц один ко многим } public function getParentName(){ // функция получения значения из родительской таблицы $model=$this->parent; return $model?$model->categoryname:''; } .......... }
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], ......... [ 'attribute'=>'createdon', 'label'=>'Created On', 'format'=>'datetime',//date,datetime, time 'headerOptions' => ['width' => 300'], ], [ 'attribute' => 'createdon', //'format' => ['raw', 'Y-m-d H:i:s'], 'format' => ['date', 'php:Y-m-d H:i:s'], 'options' => ['width' => '300'] ], ......... ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
Вариант 1
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], ......... [ 'attribute'=>'isactive', 'filter'=>array("1"=>"Активный","2"=>"Не активный"), //TblCategory::get_status(), ], ......... ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
Вариант 2
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], ......... [ 'attribute'=>'isactive', 'filter'=>TblCategoryStatus::get_status(), // функция получения статуса ], ......... ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
Функция получения статуса из модели
public static function get_status(){ $cat = TblCategoryStatus::find()->all(); // выбор всего из таблицы $cat = ArrayHelper::map($cat, 'id', 'name'); // приводим к формату выпадающего списка return $cat; }