У меня есть 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'], ], ]); ?>
где btn1 и btn2 относятся к facebook и twitter.
извините за изуродованный стол.
Вам не нужно создавать собственный класс столбцов. Вы можете создать простой raw-column и показать там что угодно:
[ '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 :
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) ?>