В третьей части курса по изучению фреймворка Yii2 разберём работу с GridView, а также воспользуемся встроенным модулем gii для генерации CRUD.
С прошлых двух уроков у нас уже есть некая база, которую мы будем использовать сегодня. Внизу будут ссылки на предыдущие две статьи, в них есть подробный разбор работы со связями в моделях (а с ними как раз-таки и предстоит вновь иметь дело).
Сейчас в учебном проекте имеется три модели (пользователи, работники и организации). В этом уроке сделаем общий список юзеров, в котором в том числе будет использовать связные данные.
Шаг 1: CRUD Generator
Чтобы не создавать кучу файлов ручками - можно воспользоваться встроенным модулем gii. Для этого переходим по адресу site/gii и выбираем CRUD Generator и жмём на кнопку start:
Далее необходимо заполнить форму и нажать на кнопку Preview (для предпросмотра) и на кнопку Generate (для автоматической генерации файлов):
Если при попытке перейти на site/member появляется подобная ошибка - значит индексном файле вида нужно дописать пространство имён в urlCreator:
Шаг 2: GridView
Ошибку устранили, теперь можно посмотреть на промежуточный результат:
И сразу же давайте уберём первые два столбца с айдишниками, они явно тут не нужны. Для этого стираем вот эти две строчки в файле views/member/index.php:
Также хотелось бы убрать вывод количества найденных записей в БД, поэтому я также добавлю в общий массив ключ 'layout' со значением '{items}{pager}'. Отсутствие сего элемента эквивалентно значению '{summary}{items}{pager}':
Теперь бы русифицировать заголовки колонок таблицы. Для этого переходим в модель Member и добавляем метод attributeLabels() (если его нет). Я пока что впишу сюда только три элемента. Ключом ассоциативного массива должно быть название поля из БД, а значением - расшифровка.
public function attributeLabels() : array
{
return [
'oid' => 'Место работы',
'name' => 'Имя',
'joined' => 'Дата регистрации',
];
}
И теперь можно заметить, что в шапке таблицы выводятся те заголовки, которые мы только что задали.
А сейчас я вновь перемещусь в индексный вид для того, чтобы немного поиграться с выводом данных. Сейчас в массив передан список названий полей из БД в виде строк. То есть все данные выводятся так, как они записаны в базе данных. А что, если эти самые данные нам нужно отформатировать или вывести как-то иначе?
Попробуем напечатать имена пользователей в таблице жирным шрифтом, используя следующую конструкцию:
Теперь смотрим и видим, что html-теги вывелись как обычный текст:
Чтобы это исправить - нужно либо изменить ключ value на content, либо добавить в массив элемент 'fotmat' => 'html':
Для добавления атрибутов ячейкам таблицы можно добавить элемент 'contentOptions', в качестве значения используется ассоциативный массив или анонимная функция:
Далее я хочу, чтобы дата регистрации пользователей отображалась в адекватной форме, а не таймштампом. Для этого использую анонимную функцию, в которую передаю модель $member. Возвращаться будет результат работы date():
Также добавим в таблицу столбцы, в которых будет содержаться информация о трудоустройстве и должностях пользователей:
И таблица на текущий момент выглядит таким образом:
Можно ещё заменить наполнение правого крайнего столбца с кнопками, если дефолтные вас чем-то не устраивают. К примеру, сделать это можно так:
Чтобы задать свои атрибуты для всей таблицы - используйте массив tableOptions. Допустим, зададим для таблицы класс kotoff-table:
Как видите - класс успешно добавился. Правда таблица слегка сломалась из-за отсутствия стилей, ну да ладно.
И на этой ноте, думаю, пора заканчивать эту статью. В следующий раз будем разбираться с фильтрами, сортировкой и поиском.
Перед публикацией, советую ознакомится с правилами!
Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter