Метки gridview при пустом списке

166
21 мая 2018, 05:20

Я использую стандартный GridView для вывода таблички. При пустом списке элементов выводится надпись задаваемая параметром emptyText. С этим все в порядке. Но! Заголовки столбцов при пустом списке меняются на значение параметра attribute для конкретного столбца... Вместо того чтобы оставаться той меткой которая указана в модели методом attributeLabels. Например:

echo GridView::widget([
    'dataProvider' => new ArrayDataProvider(['allModels' => $items]),
    'columns' => [
        [ 'attribute' => 'name' ],
        [ 'attribute' => 'phone' ],
    ],
    'emptyText' => 'пусто'
]);

Если элементы есть то отображается так (в соответствии с метками в attributeLabels модели):

| Имя  | Телефон      |
|------|--------------|
| Тест | +79081234567 |

Но если элементов нет то отображаются названия атрибутов:

| name  | phone |
|-------|-------|
|     пусто     | 

Как этого избежать? Указывать дополнительно параметр label у каждого столбца? Но это дублирование меток уже указанных в attributeLabels :( Не очень хотелось бы...

P.S. Логично было бы помимо dataProvider указывать где-то класс модели отдельно и чтобы он уже подтягивал метки оттуда даже если элементов нет... Но я не нашел такой возможности. Кроме разве что filterModel, но тогда добавляются инпуты фильтрации, а мне они не нужны.

Answer 1

У ArrayDataProvider можно задать свойтво modelClass. Пропишите там название своего класса.

Answer 2

Данная ситуация возникает потому, что GridView использует массив данных, а не массив моделей. Если использовать ActiveDataProvider, то заголовки столбцов будут отображаться корректно даже если ничего не найдено.

READ ALSO
Как подделать заголовок referer при обращении к файлу (Видео)?

Как подделать заголовок referer при обращении к файлу (Видео)?

Есть ссылка на видео файл с другого хоста- https://host-herecom/directory/720p

262
Вызов метода из контроллера (yii2) с помощью JS

Вызов метода из контроллера (yii2) с помощью JS

возник вопрос как правильно провернуть вызов функции контроллера со страницы с помощью js

213
Не работает get_cart_subtotal() в сайдбаре

Не работает get_cart_subtotal() в сайдбаре

На сайте есть сайдбар для вывода кнопки "Корзина"Я добавил в код вывод

181