web-dev-qa-db-fra.com

Image dans gridview dans yii2

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'],
    ],
]); ?>
9
Dency G B

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.

19
user3401689

Utilisez ceci:

   [
        'attribute' => 'image',
        'format' => 'html',    
        'value' => function ($data) {
            return Html::img(Yii::getAlias('@web').'/images/'. $data['image'],
                ['width' => '70px']);
        },
    ],
10
Insane Skull

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']);
                                   },
                     ],
                    ],
                 ]);
        ?>
2
Vishal Kumar

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);
}
2
arogachev

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.

1
msucil

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

1
Preetha R

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.

0
Mohan Prasad

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.

0
Gonzalo