От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы с вами познакомимся с одним из виджетов для работы с данными – это виджет Yii2 GridView.
Фреймворк Yii2 предлагает сразу несколько виджетов для отображения данных – это виджет DetailView, ListView и мощный виджет для работы с данными GridView, который мы и начнем рассматривать в данной статье.
Виджет GridView (или таблица данных) представляет из себя таблицу, которую очень удобно использовать в админке сайта. В нее построчно выводятся данные конкретной таблицы БД и управлять этими данными – одно удовольствие. В таблицу мы можем вывести только те данные, которые нам нужны, мы можем определять формат этих данных, сортировать их по любому полю, производить быстрые операции (переход к детальному просмотру записи, редактирование выбранной записи или ее удаление).
Прелесть работы с этим провайдером данных заключается еще и в том, что изначально нам не придется даже писать код, мы можем воспользоваться генератором кода Gii, который по умолчанию сгенерирует в индексных видах представление данных табличным списком, т.е. с использованием виджета GridView. Вот какой код генератор выдал для списка постов в админке:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'id', 'category_id', 'title', 'excerpt', 'text:ntext', // 'keywords', // 'description', // 'created', // 'status', ['class' => 'yii\grid\ActionColumn'], ], ]); ?> |
А вот так выглядит результат работы данного кода на странице списка постов в админке:
Каждая строка таблицы – это одна статья, т.е. одна запись из соответствующей таблицы в БД. По умолчанию фреймворк может вывести в таблицу не совсем те данные, которые нам нужны. Например, в моем случае краткий и полный текст записи явно лишние и выводить их не нужно. А вот поля created и status можно было бы вывести (в коде они есть, но закомментированы). Поправить это легко. Поля таблицы перечислены в свойстве columns виджета, просто уберем или закомментируем лишние поля и добавим или раскомментируем нужные.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'id', 'category_id', 'title', // 'excerpt', // 'text:ntext', // 'keywords', // 'description', 'created', 'status', ['class' => 'yii\grid\ActionColumn'], ], ]); ?> |
В итоге мы получим следующую картину:
Согласитесь, таблица стала выглядеть куда приятнее. Она стала компактной, в ней появились недостающие данные и управлять такой таблицей теперь гораздо удобнее. Идем дальше и попробуем воспользоваться возможностью настройки содержимого колонок. Например, в колонке Title у нас имеется наименование поста. Представим, что там могут быть теги HTML, например, обрамим наименование первой записи в теги b.
Как видим, теги не работают, они преобразуются в HTML-сущности. Так происходит, потому что по умолчанию виджет использует для форматирования данных в этой колонке компонент Formatter и тип формата text. Если мы хотим, чтобы теги работали, нам достаточно изменить форматирование колонки. Для этого мы немного перепишем вывод указанной колонки, вот так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'id', 'category_id', // 'title', [ 'attribute' => 'title', 'format' => 'html' ], // 'excerpt', // 'text:ntext', // 'keywords', // 'description', 'created', 'status', ['class' => 'yii\grid\ActionColumn'], ], ]); ?> |
Здесь мы использовали formatter html для нужного нам атрибута title. Также можно вместо html использовать значение raw. В результате теги сработают:
Такая возможность вряд ли нужна нам для заголовка, но безусловно потребуется, например, для показа миниатюры записи. Кроме форматтеров text (по умолчанию) и html (или raw) мы можем использовать и набор других методов форматирования, полный их список можно найти в документации.
Возьмем еще один пример, давайте изменим формат даты поста. Сейчас у нас выводится дата в формате YYYY-MM-DD. Пара примеров форматирования даты. Заменим простой вывод атрибута created таким:
1 2 3 4 5 |
// 'created', [ 'attribute' => 'created', 'format' => ['date', 'dd/MM/yyyy'] ], |
Результат:
Также можно встретить и такой вариант форматирования даты:
1 2 3 4 |
[ 'attribute' => 'created', 'format' => ['date', 'php:d/m/Y'] ], |
Результат будет аналогичен предыдущему. На этом сегодня все. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.