Comment mettre une image dans GridView dans yii2? J'ai le code suivant. Mais cela n’affiche pas l’image car elle ne donne aucune URL d’image. Où mettre l'URL de l'image?
<?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'],
],
]); ?>
Essayez comme
array(
'format' => 'image',
'value'=>function($data) { return $data->imageurl; },
),
Et dans ton modèle,
public function getImageurl()
{
return \Yii::$app->request->BaseUrl.'/<path to image>/'.$this->logo;
}
Je ne sais pas si c'est la bonne façon ou pas. Mais cela fonctionne pour moi.
Utilisez ceci:
[
'attribute' => 'image',
'format' => 'html',
'value' => function ($data) {
return Html::img(Yii::getAlias('@web').'/images/'. $data['image'],
['width' => '70px']);
},
],
Vous pouvez essayer celui-ci:
<?= 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 a une aide intégrée pour la construction des urls. Vous pouvez aussi ajouter l’URL à l’image par chemin (en passant le second paramètre $scheme
).
Je recommande donc d'utiliser ceci:
GridView:
use yii\helpers\Url;
[
'format' => 'image',
'value' => function ($model) {
return $model->getImageUrl();
},
],
Modèle:
public function getImageUrl()
{
return Url::to('@web/path/to/logo/' . $this->logo, true);
}
J'avais l'habitude d'utiliser le format «brut» pour ce type de travail.
[
"attribute": "image",
"format": "raw",
"value": function($model){
return ($model->image) ? Html::img("/path-to-img-location" . $model->image) : false;
}
]
si l'image existe, l'image est affichée, sinon elle est vide.
Dans les vues-> image-> 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'],
]); ?>
Dans le modèle-> image
public function getParent()
{
return $this->hasOne(Image::className(), ['image_id' => 'image_id']);
}
public function getParentName()
{
$model=$this->parent;
return $model?$model->image_path:'';
}
les attributs de la table sont, image_id, image_path, caption1, caption2, status
C'est simple, vous pouvez simplement le déclarer dans votre fichier index comme ci-dessous.
[
'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);
}
],
Vous devrez obtenir une instance d'image de votre modèle. Si nécessaire, veuillez commenter, nous reviendrons là-dessus.
Vous pouvez aussi utiliser:
public function getImageurl()
{
return \Yii::$app->urlManager->createUrl('@web/path/to/logo/'.$this->logo);
}
' @web ' est un alias de chemin prédéfini .
' urlManager-> CreateUrl () ' fait quelque chose de plus que résoudre les alias.