How to create a custom ActionColumn in the gridView of yii2?

后端 未结 2 1230
甜味超标
甜味超标 2021-02-05 19:25

I have a gridView and i managed to get it to contain the data i need, but what i need to do next is to create a column which contains two buttons for has_facebook and has_twitte

相关标签:
2条回答
  • 2021-02-05 20:04

    You don't need to create own column Class. You can create simple raw-column and show there anything you want:

    [
        'attribute' => 'some_title',
        'format' => 'raw',
        'value' => function ($model) {                      
                return '<div>'.$model->id.' and other html-code</div>';
        },
    ],
    

    This function

    function ($model) {                      
        return '<div>'.$model->id.' and other html-code</div>';
    }
    

    names callback function. There is core method evaluateExpression in CComponent:

    public function evaluateExpression($_expression_,$_data_=array())
    {
        if(is_string($_expression_))
        {
            extract($_data_);
            return eval('return '.$_expression_.';');
        }
        else
        {
            $_data_[]=$this;
            return call_user_func_array($_expression_, $_data_);
        }
    }
    

    in our case expression is not string, it's a function, so it runs php method call_user_func_array and pass into it your model.

    0 讨论(0)
  • 2021-02-05 20:21

    Just a tip: If you are rendering complex data, this was would be helpful in Yii2..

    echo yii\grid\GridView::widget([
      'dataProvider' => $dataProvider,
      'columns' => [
        'id',
        [
          'attribute' => 'Details',
          'format' => 'raw',
          'value' => function ($model) {
            return $this->render('//path/to/view.php', ['model' => $model]);
          },
        ]
      ]
    ]);
    

    or you can use

    echo \yii\widgets\ListView::widget([
        'dataProvider' => $dataProvider,
        'itemView' => '//path/to/view.php',
    ]);
    

    and the partial view could be something like

    <?= Html::img('@web/user/images' . $model->id . '.jpeg', ['alt' => 'Profile Picture', 'class' => 'img img-rounded']); ?>
    <?= Html::encode($model->firstName) ?> <?= Html::encode($model->lastName) ?>,
    living in <?= Html::encode($model->city) ?> <?= Html::encode($model->country) ?>
    
    0 讨论(0)
提交回复
热议问题