Как изменить представление данных в таблице?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Как изменить представление данных в таблице?

Сообщение Grazio »

Всем привет!

Подскажите, пожалуйста, по такому вопросу.
Есть табличка в базе, один из столбцов - integer.
Можно как-то сделать так, чтобы при выводе этой таблички с помощью gridview,
в данном столбце подставлялись другие значения, соответствующие числам?
например, вместо 1=>'один', вместо 2=>'два' итд?

и сразу второй вопрос, можно ли к имеющейся таблице gridview добавить свой столбец, который будет отображать данные подобным способом? Чтобы был и столбец числовых значений, и соответствующие им текстовые?

p.s. всё сделано штатным образом - из gii модель для таблицы и вьюха.

заранее спасибо.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Как изменить представление данных в таблице?

Сообщение lynicidn »

create method in ur model:

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

//public $status; //attribute|column of table
public function getStatusLabel()
{
    return [
        '1' => 'Adin',
        '2' => 'Dva',
    ];
}
 
configure grid column

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

[
'attribute' => 'status'
'value' => 'statusLabel'
]
 
Alex8552
Сообщения: 36
Зарегистрирован: 2014.10.07, 15:13

Re: Как изменить представление данных в таблице?

Сообщение Alex8552 »

1 вариант.
Model:

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

public function getStatus()
{
if($this->status == 1 ) return 'One';
elseif($this->status == 2 ) return 'Two';
}
Grid:

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

[
'attribute' => 'status'
]
2 вариант
Grid:

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

[
'attribute' => 'status
'content' = function($model){
if($model['status'] ==1 ) return 'One';
elseif($model['status'] ==2) return 'Two';
}
]
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как изменить представление данных в таблице?

Сообщение Grazio »

чёто не работает ни один из вариантов, комрады..
куда копать, если в логах пусто?..
Alex8552
Сообщения: 36
Зарегистрирован: 2014.10.07, 15:13

Re: Как изменить представление данных в таблице?

Сообщение Alex8552 »

Варианты рабочие. Где-то ошибка.
Принтаните выборку,проверьте наличие данных в базе.
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как изменить представление данных в таблице?

Сообщение Grazio »

видимо, у меня на лог права слетели :?
lynicidn писал(а):create method in ur model:

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

//public $status; //attribute|column of table
public function getStatusLabel()
{
    return [
        '1' => 'Adin',
        '2' => 'Dva',
    ];
}
configure grid column

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

[
'attribute' => 'status'
'value' => 'statusLabel'
]
Этот вариант выдаёт эксепшен

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

2015-04-22 10:41:34 [127.0.0.1][1][-][error][yii\base\ErrorException:2] exception 'yii\base\ErrorException' with message 'htmlspecialchars() expects parameter 1 to be string, array given' in /var/www/html/vendor/yiisoft/yii2/helpers/BaseHtml.php:105

Alex8552 ,
твои варианты работают, но этот заголовок у этого столбца получается неактивным и его нет возможности отсортировать :(
Alex8552
Сообщения: 36
Зарегистрирован: 2014.10.07, 15:13

Re: Как изменить представление данных в таблице?

Сообщение Alex8552 »

Сортировку явно задаете? Код провайдера в студию
Alex8552
Сообщения: 36
Зарегистрирован: 2014.10.07, 15:13

Re: Как изменить представление данных в таблице?

Сообщение Alex8552 »

В случае ексепшена метод getStatusLabel() должен возвращать string,т.е нужный вам текст,например как пример getStatus() выше
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Как изменить представление данных в таблице?

Сообщение lynicidn »

Alex8552 писал(а):В случае ексепшена метод getStatusLabel() должен возвращать string,т.е нужный вам текст,например как пример getStatus() выше
да, я забыл про это, простите врунишку

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

public function getStatusLabel()
{ 
    return $this->statusLabels[$this->status];
}
public static function getStatusLabels()
{
    return ['1' => 'Adin', '2' => 'Dva']; 
} 
@Alex8552 thx

п.с. пишу же от руки на коленке
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как изменить представление данных в таблице?

Сообщение Grazio »

Alex8552 писал(а):Сортировку явно задаете? Код провайдера в студию
Да что явно задаю что не задаю вообще - всё равно не активен заголовок.

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

    $provider = new ActiveDataProvider([
    'query' => Finances::find()->where(['userid' => Yii::$app->user->identity->username ])
        ->orderBy(['timestamp' => SORT_DESC]),
        'pagination' => [
            'pageSize' => 15,
        ],
    ]);
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Как изменить представление данных в таблице?

Сообщение lynicidn »

с вымышленным аттрибутом больше проблем, я предложил оптимальное решение, к которому пришел и которое взял для себя за стандарт
Grazio
Сообщения: 124
Зарегистрирован: 2015.01.24, 15:31

Re: Как изменить представление данных в таблице?

Сообщение Grazio »

lynicidn писал(а):с вымышленным аттрибутом больше проблем, я предложил оптимальное решение, к которому пришел и которое взял для себя за стандарт
да, твой вариант сортируется )
Alex8552
Сообщения: 36
Зарегистрирован: 2014.10.07, 15:13

Re: Как изменить представление данных в таблице?

Сообщение Alex8552 »

Проблем то...явно задать сортировку.

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

$sort = new Sort([
        'attributes' => [
            'age',
            //пример задания сортировки вымышленного атрибута
            'name' => [
                'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
                'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
                'default' => SORT_DESC,
                'label' => 'Name',
            ],
        ],
    ]);


$dataProvider->setSort($sort);
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Как изменить представление данных в таблице?

Сообщение lynicidn »

Alex8552 писал(а):Проблем то...явно задать сортировку.

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

$sort = new Sort([
        'attributes' => [
            'age',
            //пример задания сортировки вымышленного атрибута
            'name' => [
                'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
                'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
                'default' => SORT_DESC,
                'label' => 'Name',
            ],
        ],
    ]);


$dataProvider->setSort($sort);
у меня решение в 2 строки в гриде + 5-6 строк в модели, которые реюзабельны, приведите профиты от ваших методов, возможно я тоже их буду использовать, правда не люблю анонимки во вью
Alex8552
Сообщения: 36
Зарегистрирован: 2014.10.07, 15:13

Re: Как изменить представление данных в таблице?

Сообщение Alex8552 »

Ну в моем случае 1 строка в гриде,2-3 в моделе,не считая сортировки,которую я в любом случае задаю явно ибо приджойненые поля по дефолту не сортируются.
shock
Сообщения: 10
Зарегистрирован: 2015.09.27, 10:16

Re: Как изменить представление данных в таблице?

Сообщение shock »

Пошёл по вашему следу и вот что у меня получилось, ниже
Но не доходит, как сюда иконки Bootstrap навесить? на каждый статус разную бы
Поможите?

View

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

            [
                'format' => 'raw',
                'attribute' => 'action',
                'value' => 'statusLabel',
                'hAlign'=>'center',
                'vAlign'=>'middle',
            ],
 
Model

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

    public function getStatusLabel()
    { 
        return $this->statusLabels[$this->action];
    }
    
    public static function getStatusLabels()
    {
        return [
            '0' => 'Заблок.',
            '1' => 'Одобрено',
            '2' => 'Авто.Блок.',
            '3' => 'Ожидает'
        ];
    }
 
shock
Сообщения: 10
Зарегистрирован: 2015.09.27, 10:16

Re: Как изменить представление данных в таблице?

Сообщение shock »

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

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

    public static function getStatusLabels()
    {
        return [
            '0' => '<span class="glyphicon glyphicon-lock" title="Заблокировано"></span>',
            '1' => '<span class="glyphicon glyphicon-ok" title="Опубликовано"></span>',
            '2' => '<span class="glyphicon glyphicon-minus" title="Автоматически заблокировано"></span>',
            '3' => '<span class="glyphicon glyphicon-time" title="Ожидает проверки модератором"></span>'
        ];
    }
 
Ответить