Скрыть атрибут в Kartik DetailView Yii 2

Я хочу скрыть атрибут в моем DetailView, например:

[
    'attribute' => $attribute,
    'format' => 'raw',
    'value' => Yii::$app->formatter->asDatetime($model->$attribute).' par '.Yii::$app->myFormatter->asUser($model->visited_by),
    'visible' => false,
];

Видимое свойство не работает. Что мне делать?
Есть идеи?

Спасибо


person soussou    schedule 09.01.2017    source источник
comment
Какую версию Yii вы используете?   -  person topher    schedule 09.01.2017
comment
Версия YII2 с расширением kartik для подробного просмотра   -  person soussou    schedule 09.01.2017


Ответы (2)


Если вам нужно динамически определить, что такое visible, тогда вы можете попробовать вариант template для модели DetailView.

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        'id',
        'title',
        'group_id',
    ],
    'template' => function ($item, $index, $widget){
        $classes = '';
        $classes .= ($item['attribute'] == 'your-attr' && $item['value'] == 'your-value') ? 'hidden' : '';

        return "<tr class='$classes'><th>$item[attribute]</th><td>$item[value]</td></tr>";
    }
]) ?>

Если вы знаете, что не будете использовать или даже не будете нуждаться в этих скрытых значениях, вы также можете динамически определить, какие атрибуты вы передаете в DetailView, например:

<?php 
 // your logic to know what attributes display
  echo DetailView::widget([
   'model' => $model,
   'attributes' => $attributes
]) ?>
person Mikołaj Woźniak    schedule 09.01.2017

Вы можете использовать GridView Kartik и классы начальной загрузки hidden и show. См. документацию по Bootstrap.

use kartik\detail\DetailView;
....
[
    'attribute' => $attribute,
    'format' => 'raw',
    'value' => Yii::$app->formatter->asDatetime($model->$attribute).' par '.Yii::$app->myFormatter->asUser($model->visited_by),
    'rowOptions' => [
        'class' => ($i_want_to_see_it ? 'show' : 'hidden'),
    ],
];
person Tibor Nagy    schedule 09.01.2017