如何在yii2的gridView中创建自定义ActionColumn?

时间:2014-04-28 13:10:28

标签: php yii2

我有一个gridView,我设法让它包含我需要的数据,但我接下来需要做的是创建一个包含has_facebook和has_twitter两个按钮的列。

<?=
 GridView::widget([
     'dataProvider'=>$dataProvider,
     'filterModel' =>$searchModel,
     'columns'     =>[
         ['class'=>'yii\grid\SerialColumn'],
         'name',
         'cm_name',
         'has_facebook',
         'has_twitter',             
         ['class'=>'yii\grid\ActionColumn'],
     ],
 ]);
?>

名称| cm_name |平台

account1 |杰克| btn1 btn2

其中btn1和btn2指的是facebook和twitter。

对不起的表格感到抱歉。

2 个答案:

答案 0 :(得分:29)

您不需要创建自己的列类。您可以创建简单的原始列并显示您想要的任何内容:

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

此功能

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

命名回调函数。有核心方法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_);
    }
}

在我们的case中表达式不是字符串,它是一个函数,所以它运行php方法call_user_func_array并将其传递给你的模型。

答案 1 :(得分:3)

只是一个提示: 如果你要渲染复杂的数据,这在Yii2中会有所帮助。

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

或者您可以使用

<?= 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) ?>

,部分视图可能类似于

for(int i = 0; i < 5; i++) {
    double a,b,c;
    inf >> a >> b >> c;
    // Do something with a,b,c
}

for(int i = 0; i < 5; i++) {
    double a,b,c,d;
    inf >> a >> b >> c >> d;
    // Do something with a,b,c,d
}