Изображение в gridview в yii2
Как поместить изображение в GridView в yii2?У меня есть следующий код. Но его не отображение изображения, поскольку он не дает url-адреса изображения. Куда поместить url изображения?
<?php echo GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yiigridSerialColumn'],
'c_id',
'name:ntext',
'description:ntext',
array(
'format' => 'image',
'attribute'=>'logo',
),
['class' => 'yiigridActionColumn'],
],
]); ?>
8 ответов
попробовать как
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']);
},
],
Yii 2 имеет встроенный помощник для создания URL-адресов. Вы также можете указать url-адрес изображения по пути (передав второй параметр $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);
}
вид->изображения->индекс.в 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
я использовал формат " raw " для этого типа работы.
[
"attribute": "image",
"format": "raw",
"value": function($model){
return ($model->image) ? Html::img("/path-to-img-location" . $model->image) : false;
}
]
если изображение существует, то изображение отображается иначе оно пустое.
вы можете попробовать это:
<?= 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']);
},
],
],
]);
?>
вы также можете использовать:
public function getImageurl()
{
return \Yii::$app->urlManager->createUrl('@web/path/to/logo/'.$this->logo);
}
' @web - это предопределенные псевдонимы пути.
'urlManager->CreateUrl()' сделайте что-то большее, чем разрешение псевдонимов.
это просто вы можете просто объявить его в индексном файле, как показано ниже.
[
'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);
}
],
вам нужно будет получить экземпляр изображения из вашей модели. Если требуется пример, пожалуйста, прокомментируйте, вернетесь к этому.