DetailView

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
SwoDs
Сообщения: 159
Зарегистрирован: 2014.09.03, 10:12

DetailView

Сообщение SwoDs »

Доброго дня.

Как вывести свое содержимое в DetailView, попытался сделать через анонимную функцию как в GridView, но не сработало

Код: Выделить всё

<?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            'user.name_ru',
            [
                //'attribute' => 'status',
                'label' => 'tete',
                'format' => 'html',
                'value' => function ($data) {
                    $lab = Common::getBeautifyStatus($data->status);
                    return sprintf('<span class="label label-%s">%s</span>', $lab[0],$lab[1]);
                }
            ],
            'category.title',
            'start_date',
            'title',
            'text:html',
        ],
    ]) ?>
astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: DetailView

Сообщение astronin »

для DetailView не работает анонимка
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: DetailView

Сообщение Onotole »

В DetailView модель приходит напрямую, и с ней можно играть как угодно

Код: Выделить всё


<?php
$lab = Common::getBeautifyStatus($model->status);
$value = sprintf('<span class="label label-%s">%s</span>', $lab[0],$lab[1]);
?>

<?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            'user.name_ru',
            [
                //'attribute' => 'status',
                'label' => 'tete',
                'format' => 'html',
                'value' => $value
            ],
            'category.title',
            'start_date',
            'title',
            'text:html',
        ],
    ]) ?>
Такой подход, конечно, рабочий, но не удовлетворяет логике MVC. В модели создать геттер:

Код: Выделить всё

public function getStatusHtml() {
    $lab = Common::getBeautifyStatus($this->status);
    return sprintf('<span class="label label-%s">%s</span>', $lab[0],$lab[1]);
}
И в DeatilView выводить уже его

Код: Выделить всё

<?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            'user.name_ru',
            [
                //'attribute' => 'status',
                'label' => 'tete',
                'format' => 'html',
                'value' => $model->statusHtml // $model->getStatusHtml()
            ],
            'category.title',
            'start_date',
            'title',
            'text:html',
        ],
    ]) ?>
Аватара пользователя
SwoDs
Сообщения: 159
Зарегистрирован: 2014.09.03, 10:12

Re: DetailView

Сообщение SwoDs »

Onotole, спасибо, вы оправдали ваш ник =)
Аватара пользователя
SwoDs
Сообщения: 159
Зарегистрирован: 2014.09.03, 10:12

Re: DetailView

Сообщение SwoDs »

И еще спасибо за мини гайд по геттерам, теперь знаю что такое есть и как ими пользоваться )
Idaho
Сообщения: 58
Зарегистрирован: 2017.04.24, 08:06

Re: DetailView

Сообщение Idaho »

Дабы не плодить темы.
Есть ли функция исключений для DetailView при выводе из связанной таблицы?
т.е. если данные берутся из "прямой" связанной таблицы ('fileld'), то поле в котором нет данных выводиться пустым.
Но если данные берутся из связанной таблицы, 'table.field' то получаем в виджете (not set), а хотелось бы так же пусто поле

upd:
нашел решение у буржуев и немного модифицировал под свои нужды

Код: Выделить всё

[
                'label' => 'Name',
                'attribute' => 'field',
                'format' => 'raw',
                'value' => $model->TableName != null ? Html::a($model->TableName->fieldName, ['kennels/view', 'id' => $model->TableName->fieldName_id]) : 'no' ,
                                
],
Ответить