Yii2のGridViewに画像を配置するにはどうすればよいですか?次のコードがあります。ただし、画像のURLが指定されていないため、画像は表示されません。画像のURLをどこに置くか?
<?php echo GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'c_id',
'name:ntext',
'description:ntext',
array(
'format' => 'image',
'attribute'=>'logo',
),
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
次のようにしてみてください
array(
'format' => 'image',
'value'=>function($data) { return $data->imageurl; },
),
そしてあなたのモデルでは、
public function getImageurl()
{
return \Yii::$app->request->BaseUrl.'/<path to image>/'.$this->logo;
}
これが正しい方法かどうかはわかりませんが、これは私にとってはうまくいきます。
これを使って:
[
'attribute' => 'image',
'format' => 'html',
'value' => function ($data) {
return Html::img(Yii::getAlias('@web').'/images/'. $data['image'],
['width' => '70px']);
},
],
あなたはこれを試すことができます:
<?= GridView::widget
([
'dataProvider' => $dataProvider,
'filterModel' => $searchdata,
'columns' => [
[
'attribute' => 'logo',
'format' => 'html',
'label' => 'Image',
'value' => function ($data) {
return Html::img('/advanced/hello/frontend/web/image/' . $data['logo'],
['width' => '80px',
'height' => '80px']);
},
],
],
]);
?>
Yii 2には、URLを作成するためのヘルパーが組み込まれています。パスによってURLを画像にブルすることもできます(2番目のパラメーター$scheme
)。
だから私はこれを使用することをお勧めします:
GridView:
use yii\helpers\Url;
[
'format' => 'image',
'value' => function ($model) {
return $model->getImageUrl();
},
],
モデル:
public function getImageUrl()
{
return Url::to('@web/path/to/logo/' . $this->logo, true);
}
私はこのタイプの作業に「生」フォーマットを使用していました。
[
"attribute": "image",
"format": "raw",
"value": function($model){
return ($model->image) ? Html::img("/path-to-img-location" . $model->image) : false;
}
]
画像が存在する場合は画像が表示され、存在しない場合は空白になります。
ビュー->画像-> index.php
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'attribute'=>'image_path',
'label'=>'Image',
'format'=>'html',
'content' => function($data){
$url = $data->getParentName();
return Html::img($url, ['alt'=>'yii','width'=>'250','height'=>'100']);
}
],
'caption1',
'caption2',
'status',
['class' => 'yii\grid\ActionColumn'],
],
'tableOptions' =>['class' => 'table table-striped table-bordered'],
]); ?>
モデル内->画像
public function getParent()
{
return $this->hasOne(Image::className(), ['image_id' => 'image_id']);
}
public function getParentName()
{
$model=$this->parent;
return $model?$model->image_path:'';
}
テーブルの属性は、image_id、image_path、caption1、caption2、statusです。
以下のようにインデックスファイルで宣言するだけで簡単です。
[
'label' => Your Label Here',
'format' => 'raw',
'value' => function ($data) {
$images = '';
$images = $images.Html::img(\Yii::$app->request->BaseUrl.'/your-path-here/'.$date->getImagefilename(),['alt'=>'','width'=>'30','height'=>'30', 'data-toggle'=>'tooltip','data-placement'=>'left','title' => $name->pictogram_comment ,'style'=>'cursor:default;']);
return ($images);
}
],
モデルから画像インスタンスを取得する必要があります。必要な例があればコメントしてください、それについて戻ります。
次のものも使用できます。
public function getImageurl()
{
return \Yii::$app->urlManager->createUrl('@web/path/to/logo/'.$this->logo);
}
'@ web'は 事前定義されたパスエイリアス です。
'urlManager-> CreateUrl()' エイリアスの解決以上のことを行います。