Страница 1 из 1

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

Добавлено: 2015.04.22, 10:52
Grazio
Всем привет!

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

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

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

заранее спасибо.

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

Добавлено: 2015.04.22, 11:30
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'
]
 

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

Добавлено: 2015.04.22, 11:46
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';
}
]

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

Добавлено: 2015.04.22, 12:45
Grazio
чёто не работает ни один из вариантов, комрады..
куда копать, если в логах пусто?..

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

Добавлено: 2015.04.22, 13:14
Alex8552
Варианты рабочие. Где-то ошибка.
Принтаните выборку,проверьте наличие данных в базе.

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

Добавлено: 2015.04.22, 13:46
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 ,
твои варианты работают, но этот заголовок у этого столбца получается неактивным и его нет возможности отсортировать :(

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

Добавлено: 2015.04.22, 13:59
Alex8552
Сортировку явно задаете? Код провайдера в студию

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

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

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

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

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

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

п.с. пишу же от руки на коленке

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

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

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

    $provider = new ActiveDataProvider([
    'query' => Finances::find()->where(['userid' => Yii::$app->user->identity->username ])
        ->orderBy(['timestamp' => SORT_DESC]),
        'pagination' => [
            'pageSize' => 15,
        ],
    ]);

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

Добавлено: 2015.04.22, 18:22
lynicidn
с вымышленным аттрибутом больше проблем, я предложил оптимальное решение, к которому пришел и которое взял для себя за стандарт

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

Добавлено: 2015.04.22, 21:27
Grazio
lynicidn писал(а):с вымышленным аттрибутом больше проблем, я предложил оптимальное решение, к которому пришел и которое взял для себя за стандарт
да, твой вариант сортируется )

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

Добавлено: 2015.04.22, 23:08
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);

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

Добавлено: 2015.04.23, 05:31
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 строк в модели, которые реюзабельны, приведите профиты от ваших методов, возможно я тоже их буду использовать, правда не люблю анонимки во вью

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

Добавлено: 2015.04.23, 09:33
Alex8552
Ну в моем случае 1 строка в гриде,2-3 в моделе,не считая сортировки,которую я в любом случае задаю явно ибо приджойненые поля по дефолту не сортируются.

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

Добавлено: 2015.09.27, 21:11
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' => 'Ожидает'
        ];
    }
 

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

Добавлено: 2015.09.28, 09:08
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>'
        ];
    }