Интернационализация в заголовках столбцов GridView при пустых данных [решено]

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
warlook
Сообщения: 11
Зарегистрирован: 2012.06.21, 18:07

Интернационализация в заголовках столбцов GridView при пустых данных [решено]

Сообщение warlook »

Здравствуйте! В GridView при отсутствии записей не переводятся заголовки столбцов. Это баг, фича или я что-то делаю не так?

Поля в модели:

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

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => Yii::t('main', 'ID'),
            'parent_id' => Yii::t('main', 'Parent'),
            'alias' => Yii::t('main', 'Alias'),
            'name' => Yii::t('main', 'Name'),
            'description' => Yii::t('main', 'Description'),
            'is_system' => Yii::t('main', 'Is System'),
        ];
    }
 
Столбцы в гриде:

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

    'columns' => [
        [
            'class' => 'yii\grid\CheckboxColumn',
            'checkboxOptions' => function ($model) {
                return ['value' => $model->id];
            },
            'options' => ['class' => 'checkbox-column']
        ],
        [
            'attribute' => 'id',
            'format' => 'raw',
            'enableSorting' => false,
            'value' => function ($model) {
                return "<a data-pjax='0' href='" . Yii::$app->urlManager->createUrl([
                    'model/object-types/view',
                    'id' => $model->id
                ]) . "'>{$model->id}</a>";
            },
            'options' => ['class' => 'id-column']
        ],
        [
            'attribute' => 'name',
            'format' => 'raw',
            'enableSorting' => false,
            'value' => function ($model) {
                return "<a data-pjax='0' href='" . Yii::$app->urlManager->createUrl([
                    'model/object-types/view',
                    'id' => $model->id
                ]) . "'>{$model->name}</a>";
            },
            'options' => ['class' => 'name-column']
        ],
        'description:ntext',
        'alias',
        [
            'label' => '',
            'format' => 'raw',
            'value' => function ($model) {
                return $model->is_system ? '<span class="label label-warning">' . Yii::t('main',
                        'System') . '</span>' : '';
            }
        ],
    ],
 
При наличии записей в выборке перевод присутствует:
Изображение

При отсутствии - нет:
Изображение
Последний раз редактировалось warlook 2014.12.12, 12:08, всего редактировалось 1 раз.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Интернационализация в заголовках столбцов GridView при пустых данных

Сообщение zelenin »

есть такой код:

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

if ($provider instanceof ActiveDataProvider && $provider->query instanceof ActiveQueryInterface) {
                /* @var $model Model */
                $model = new $provider->query->modelClass;
                $label = $model->getAttributeLabel($this->attribute);
            } else {
                $models = $provider->getModels();
                if (($model = reset($models)) instanceof Model) {
                    /* @var $model Model */
                    $label = $model->getAttributeLabel($this->attribute);
                } else {
                    $label = Inflector::camel2words($this->attribute);
                }
            } 
как видим, в двух случаях название берется из лейбла атрибута модели, а в третьем просто атрибут пишется с большой буквы.
Произойти это может если провайдер данных не является объектом провайдера. Видимо, в вашем коде провайдер не доходит до этого места при пустом гриде. (У меня доходит).
Аватара пользователя
warlook
Сообщения: 11
Зарегистрирован: 2012.06.21, 18:07

Re: Интернационализация в заголовках столбцов GridView при пустых данных

Сообщение warlook »

Спасибо, очень помогли. Видимо переработал :)

В моем случае это происходит потому, что используется ArrayDataProvider, и при отсутствии в нем моделей действительно неоткуда брать перевод.
Решу указанием имен напрямую в колонках.
Ответить