Расширение zii-image-column (EImageColumn) для отображения изображений в CGridView

Расширение zii-image-column (EImageColumn) для отображения изображений в CGridView Необходимо выводить картинки в списке CGridView. Делаем это с помощью расширения zii-image-column (EImageColumn)

Берём расширение Image Column для CGridView.

Разархивируем его в protected/extensions.

Чтобы подключить это расширение и использовать в виде, надо добавить его в автозагрузку в config/main.php в массив 'import':

...
//  autoloading model and component classes
'import'=>array(
'application.models.*',
'application.components.*',
'application.modules.user.models.*',
'ext.imagecolumn.EImageColumn',
),
...
либо прямо в виде до вызова виджета CGridView прописать строку импорта:
Yii::import('ext.imageColumn.EImageColumn');
Я использовал первый вариант, хотя видимо второй лучше, потому что использовать Image Column придётся нечасто, а значит он не заслужил того, чтобы быть помещённым в автозагрузку. Но пусть будет аванс ему.
 
Осталось добавить колонку в список CGridView. Я делаю это в views/materials/admin.php

<?php 
//Yii::import('ext.imageColumn.EImageColumn');
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'material-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
   'class' => 'EImageColumn',
   'imagePathExpression' => '(isset($data->image) && file_exists($_SERVER["DOCUMENT_ROOT"].
Yii::app()->urlManager->baseUrl.
"/images/materials/".substr($data->create_time, 0, 4)."/".$data->image)) ?
Yii::app()->getBaseUrl(true)."/images/materials/".substr($data->create_time, 0, 4)."/".$data->image :
Yii::app()->getBaseUrl(true)."/images/pics/noimage.gif"',
   'emptyText' => '—',
   'imageOptions' => array(
       'width' => 100,
   ),
),
array(
'header' => '№',
'value' => '$row+1',
),
array(
'name' => 'id',
'value' => '$data->id',
),

...
В imagePathExpression у меня стоит проверка на существование картинки на сервере и наличие пути в таблице БД. В 'imageOptions' указано, что все изображения будут ограничены по ширине до 100px.
 
Вот что получилось:
 
Yii установка Image Column extension для отображения картинок в CGridView
 
Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (3)     Подпишитесь на RSS комментариев к этой статье.

3 комментариев

#526
vladimir говорит:
June 27, 2012 at 12:58 pm
А как сделать чтобы колонка имела название, у меня стандартный name не отображает?
#527
Azamat говорит:
June 27, 2012 at 01:34 pm

Можно и так ))

array(

                    'name'=>'img',
                    'type'=>'image',
                    'name'=>'enabled',
                    'value'=>'$data->getState(true)',
                    'filter'=> $model->getState(),
                ),
#528
almix говорит:
June 29, 2012 at 02:11 am

@Azamat, ваш вариант для расширения Image Column или сам по себе работает? Что такое getState() ?

@vladimir - чтобы колонка имела название, видимо надо прописать: 'header' => 'название', как у других столбцов.