Страница 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:
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>'
];
}