25
Сен
2017

Виджет Yii2 DetailView

Виджет Yii2 DetailView

От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы с вами познакомимся с одним из виджетов для работы с данными – это виджет Yii2 DetailView.

В предыдущих статьях мы с вами знакомились с очень мощным виджетом для работы с данными – widget Yii2 GridView. Данный виджет идеально подходит для админки сайта и позволяет в табличном виде вывести список записей. Работать с таким представлением данных пользователям достаточно удобно. Однако фреймворк не ограничивается только этим виджетом и предлагает нам еще несколько. Одним из таких является виджет DetailView.

Как следует из названия, этот виджет позволяет организовать детальный просмотр записи. Т.е., если GridView, к примеру, позволяет показать список статей сайта, то DetailView позволяет реализовать детальный просмотр отдельной статьи.

Генератор кода Gii по умолчанию генерирует примерно такой код для DetailView:

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        'id',
        'category_id',
        'title',
        'excerpt',
        'text:ntext',
        'keywords',
        'description',
        'created',
        'status',
    ],
]) ?>

Результатом работы такого кода будет примерно такая страница:

Виджет Yii2 DetailView

Для подробного просмотра этого вполне достаточно. Однако, задачи бывают разные, и вам вполне может потребоваться внести некоторые коррективы в вывод. Работа с DetailView очень похожа на работу с GridView. Например, если мы захотим переименовать какое-то поле, скажем ID, то сделать это можно так:

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        // 'id',
        [
            'label' => '№',
            'attribute' => 'id',
        ],
        'category_id',
        'title',
        'excerpt',
        'text:ntext',
        'keywords',
        'description',
        'created',
        'status',
    ],
]) ?>

Виджет Yii2 DetailView

Если мы захотим разрешить обрабатывать HTML для поля, к примеру вывода изображения, а в данном случае это будет поле Text, тогда достаточно использовать соответствующий formatter:

// 'text:ntext',
'text:html',

Виджет Yii2 DetailView

И, конечно же, как и в случае с GridView, здесь мы можем использовать функции обратного вызова для изменения значения поля. Например, сейчас поле статус выглядит так:

Виджет Yii2 DetailView

Изменим циферку на более понятное сообщение:

// 'status',
[
    'attribute' => 'status',
    'format' => 'raw',
    'value' => function($data){
        return $data->status ? '<span class="text-success">Показывается</span>' : '<span class="text-danger">Не показывается</span>';
    }
],

И получим искомый результат:

Виджет Yii2 DetailView

Как видим, в DetailView все достаточно просто и очень похоже на GridView. На этом сегодня все. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.

Share

Тебе может это понравится...