Pickeroll
Pickeroll

Reputation: 978

Modifty GridView::Widget content Yii

I'm trying to modify a field of the GridView that I obtained following the Gii tutorial on the Yii framework website.

GII PAGE

I'm not satisfied on how the population field looks, so I'm trying to convert it with some separators.

This is the index.php of the Country View

  <?=
    GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'code',
            'name',
            [
                'label' => 'Population',
                'value' => 'population',
            /* 'value' => Yii::$app->formatter->asDecimal((integer)population) */
            /*  'value' => Yii::$app->formatter->asDecimal($model->population) */
            /* 'value' =>  Yii::$app->formatter->asDecimal('population') */
            /*'value' => Yii::$app()->format->number('population')*/
            ],
            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]);
    ?>

I don't know why in the CountryModel the population field is listed as integer:

['population'], 'integer'

And then when I try to convert it in the view I have some problems because 'population' is basically a String.

I commented out some of my attempts.

Upvotes: 0

Views: 52

Answers (1)

Serghei Leonenco
Serghei Leonenco

Reputation: 3507

You can use yii\i18n\Formatter

Go to your common\config\main.php if you are using app-advanced or the app/config/main.php if app-basic and add the following under components array.

'formatter' => [
     'thousandSeparator' => ',',
],

Now you can format any given number like below

<?=
    GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'code',
            'name',
            [
                'attribute' => 'population',
                'label' => 'Population',
                'value' => function($model){
                    return Yii::$app->formatter->asInteger($model->population); //Output 1,000
                },
            ],
            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]);
    ?>

Update: Like was mentioned in comments, You can also use this two technics to format the value:

//Gridview
....
[
    'attribute' => 'population',
    'format' => 'integer',
],
....

and/or:

//Gridview
....
'population:integer',
....

Upvotes: 1

Related Questions