Рабочий пример использования виджета 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}'
]);
