В прошлой заметке мы рассказали о том, как вывести результаты 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 — тип ячейки, который может быть следующим:
- raw — значение никак не форматируется, выводится как есть
- text — значение будет интерпретировано в html, это значит что любые html тэги будут отображены как текстовая информация
- ntext — то же самое что и text, только учитываются html тэги p и br
- html — поддерживаются все html тэги
- date — форматирует значение как дату
- time — форматирует значение как время
- datetime — соответсвенно дата со временем
- boolean — логические 0 или 1
- number — цифровое отображение
- email — отобразить email как ссылку с параметром mailto:
- image — отобразит изображение, а на деле вернет тэг img, где в значении src будет ссылка на картинку
- url — аналогично значению image, только в данном случае вернет тэг a
- 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', ), ), ));
Результат выполнения вы видите на изображении ниже
comments powered by HyperComments