2014-02-19 7 views
9

Как поместить изображение в GridView в yii2? У меня есть следующий код. Но это не отображает изображение, поскольку оно не дает никакого URL-адреса изображения. Куда поместить изображение?Изображение в gridview в yii2

<?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'], 
    ], 
]); ?> 
+0

что выход HTML в ячейке? – topher

ответ

19

Try как,

array(
'format' => 'image', 
'value'=>function($data) { return $data->imageurl; }, 

    ), 

И в вашей модели,

public function getImageurl() 
{ 
return \Yii::$app->request->BaseUrl.'/<path to image>/'.$this->logo; 
} 

Не знаю, что это правильный путь или not.But это работает для меня.

+1

Этот getImageurl() подобен магии.но я думаю, что теперь мы чаще используем ответ @Insane Skull. – tyan

+0

@tyan Что случилось с этим форматом? – musafar006

0

Вы также можете использовать:

public function getImageurl() 
{ 
    return \Yii::$app->urlManager->createUrl('@web/path/to/logo/'.$this->logo); 
} 

'@web' является predefined path aliases.

'urlManager->CreateUrl()' делать что-то большее, чем разрешать псевдонимы.

2

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); 
} 
+0

Как установить ширину изображения? – kaynewilder

+0

Вы можете создать отдельный вопрос для этого, поскольку текущая проблема решена. – arogachev

+0

Я прокомментировал это [вопрос] (https://stackoverflow.com/questions/22677501/set-width-image-in-gridview-yii2/22885563#22885563) – kaynewilder

8

Используйте это:

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

вы также можете использовать columnLabel для установки метки для столбца. –

1

В views-> 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'], 

    ]); ?> 

В модели-> изображение

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, статус

0

It просто вы можете просто объявить его в своем индексном файле, как показано ниже.

[ 
      '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); 

      } 
      ], 

Вам нужно будет получить экземпляр изображения из вашей модели. Если требуется, пожалуйста, прокомментируйте, верните это.

1

Раньше я использовал «сырой» формат для этого вида работ.

[ 
    "attribute": "image", 
    "format": "raw", 
    "value": function($model){ 
     return ($model->image) ? Html::img("/path-to-img-location" . $model->image) : false; 
    } 
] 

Если изображение существует, изображение отображается в противном случае, оно пустое.

1

Вы можете попробовать это:

<?= 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']); 
            }, 
        ], 
        ], 
       ]); 
     ?> 
Смежные вопросы