GridViewがあり、必要なデータを含めることができましたが、次に行う必要があるのは、has_facebookとhas_Twitterの2つのボタンを含む列を作成することです。
<?=
GridView::widget([
'dataProvider'=>$dataProvider,
'filterModel' =>$searchModel,
'columns' =>[
['class'=>'yii\grid\SerialColumn'],
'name',
'cm_name',
'has_facebook',
'has_Twitter',
['class'=>'yii\grid\ActionColumn'],
],
]);
?>
ここで、btn1とbtn2はFacebookとTwitterを指します。
変形したテーブルをごめんなさい。
独自の列クラスを作成する必要はありません。単純なraw列を作成して、必要なものを表示できます。
[
'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>';
}
コールバック関数に名前を付けます。コアメソッドがあります CComponentのevaluateExpression :
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_);
}
}
今回の場合、式は文字列ではなく、関数なので、phpメソッド call_user_func_array を実行し、モデルに渡します。
ヒント:複雑なデータをレンダリングしている場合、これは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]);
},
]
]
]);
またはあなたが使うことができます
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) ?>