Произвольные заголовки и модификация данных при выводе в CGridView

В прошлой заметке мы рассказали о том, как вывести результаты SQL запроса на страницу в виде таблицы с помощью компонента CGridView zii виджета, только почти всегда этого недостаточно. Как минимум хочется, чтобы можно было написать свои заголовки для каждого столбца, а так же модицифировать сами выводимые данные, к примеру для отображения изображения или добавления ссылки, собственно, про эти возможности компонента CGridView и пойдет речь в данной заметке.

В общем случае для реализации обозначенных выше возможностей используется массив параметров columns компонента CGridView, выглядит он следующим образом:

$this->widget('zii.widgets.grid.CGridView', array(
	'dataProvider'=>$dataProvider,
	'columns'=>array(
		array(
			'name' => '',
			'value' => '',
			'type' => '',
		),
	),
));

В подмассиве columns передается 3 параметра:

  • name — произвольное имя столбца
  • value — значение ячеек, берется из массива $data в котором содержатся результаты из dataProvider’а
  • type — тип ячейки, который может быть следующим:
    1. raw — значение никак не форматируется, выводится как есть
    2. text — значение будет интерпретировано в html, это значит что любые html тэги будут отображены как текстовая информация
    3. ntext — то же самое что и text, только учитываются html тэги p и br
    4. html — поддерживаются все html тэги
    5. date — форматирует значение как дату
    6. time — форматирует значение как время
    7. datetime — соответсвенно дата со временем
    8. boolean — логические 0 или 1
    9. number — цифровое отображение
    10. email — отобразить email как ссылку с параметром mailto:
    11. image — отобразит изображение, а на деле вернет тэг img, где в значении src будет ссылка на картинку
    12. url — аналогично значению image, только в данном случае вернет тэг a
    13. size — вычислит и отобразит в числовом виде байтовое значение

А теперь пример использования.

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$SqldataProvider,
    'enablePagination' => true,
    'columns'=>array(
        array(
            'name' => 'id',
            'value' => 'CHtml::encode($data["id"])',
            'type' => 'raw',
        ),
        array(
            'name' => 'Имя',
            'value' => 'CHtml::encode($data["first_name"])',
            'type' => 'text',
        ),
        array(
            'name' => 'Фамилия',
            'value' => 'CHtml::encode($data["second_name"])',
            'type' => 'text',
        ),
        array(
            'name' => 'Аватар',
            'value' => 'CHtml::encode("http://localhost:8888/test2/image/".$data["image"])',
            'type' => 'image',
        ),
        array(
            'name' => 'Ссылка',
            'value' => 'CHtml::encode($data["url"])',
            'type' => 'url',
        ),
        array(
            'name' => 'Возраст',
            'value' => 'CHtml::encode($data["age"])',
            'type' => 'number',
        ),
        array(
            'name' => 'День рождения',
            'value' => 'CHtml::encode($data["birthday"])',
            'type' => 'date',
        ),
        array(
            'name' => 'Дата и время добавления',
            'value' => 'CHtml::encode($data["add_time"])',
            'type' => 'datetime',
        ),
    ),
));

Результат выполнения вы видите на изображении ниже

column test

comments powered by HyperComments
hostgame
2014-07-24 09:47:16
Странно. У меня почему то имя столбца меняется параметром header. А name это имя поля из модели
При копировании материалов обратная ссылка на play-stop.ru желательна обязательна!