От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы с вами познакомимся с одним из виджетов для работы с данными – это виджет Yii2 DetailView.
В предыдущих статьях мы с вами знакомились с очень мощным виджетом для работы с данными – widget Yii2 GridView. Данный виджет идеально подходит для админки сайта и позволяет в табличном виде вывести список записей. Работать с таким представлением данных пользователям достаточно удобно. Однако фреймворк не ограничивается только этим виджетом и предлагает нам еще несколько. Одним из таких является виджет DetailView.
Как следует из названия, этот виджет позволяет организовать детальный просмотр записи. Т.е., если GridView, к примеру, позволяет показать список статей сайта, то DetailView позволяет реализовать детальный просмотр отдельной статьи.
Генератор кода Gii по умолчанию генерирует примерно такой код для DetailView:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?= DetailView::widget([ 'model' => $model, 'attributes' => [ 'id', 'category_id', 'title', 'excerpt', 'text:ntext', 'keywords', 'description', 'created', 'status', ], ]) ?> |
Результатом работы такого кода будет примерно такая страница:
Для подробного просмотра этого вполне достаточно. Однако, задачи бывают разные, и вам вполне может потребоваться внести некоторые коррективы в вывод. Работа с DetailView очень похожа на работу с GridView. Например, если мы захотим переименовать какое-то поле, скажем ID, то сделать это можно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?= DetailView::widget([ 'model' => $model, 'attributes' => [ // 'id', [ 'label' => '№', 'attribute' => 'id', ], 'category_id', 'title', 'excerpt', 'text:ntext', 'keywords', 'description', 'created', 'status', ], ]) ?> |
Если мы захотим разрешить обрабатывать HTML для поля, к примеру вывода изображения, а в данном случае это будет поле Text, тогда достаточно использовать соответствующий formatter:
1 2 |
// 'text:ntext', 'text:html', |
И, конечно же, как и в случае с GridView, здесь мы можем использовать функции обратного вызова для изменения значения поля. Например, сейчас поле статус выглядит так:
Изменим циферку на более понятное сообщение:
1 2 3 4 5 6 7 8 |
// 'status', [ 'attribute' => 'status', 'format' => 'raw', 'value' => function($data){ return $data->status ? '<span class="text-success">Показывается</span>' : '<span class="text-danger">Не показывается</span>'; } ], |
И получим искомый результат:
Как видим, в DetailView все достаточно просто и очень похоже на GridView. На этом сегодня все. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.