Новые компоненты фреймворка Yii: CDetailView

Владимир | | PHP, Web разработка, Yii.

yii php cdetailview

Знаете, чем больше я работаю с фрейворком Yii, тем больше он мне нравится. Конечно, он далеко не идеальный, но активно развивается. Правда это развитие идёт не совсем плавно, а скорее рывками, и при этом остаются пробелы. Самый большой из них – документация. Я имею в виду «Полное руководство», информация в API полная.

Не поймите неправильно, то, что я написал в предыдущем абзаце – это даже не замечание разработчикам. Просто фреймворк позволяет решить одни и те же задачи разными способами, и новые классы появляются довольно часто. И для обновления документации, думаю, нужна специальная команда редакторов.

Но это всё общие рассуждения, а я собираюсь рассказать о вполне конкретной вещи – виджете CDetailView.

Он входит в набор компонентов под названием zii. Эти компоненты появились довольно давно, но, начиная с версии 1.1, они входят в дистрибутив фреймворка. Кроме того, консольная утилита yiic генерирует код с этими компонентами.

Документация для этих компонентов есть только в исходниках. Т.е. вначале соответствующих скриптов рассказывается, что они делают и как их использовать.

Возвращаемся к виджету CDetailView.

Его назначение – вывод подробной информации о модели. Проще говоря, он выводит данные, содержащиеся в одной записи таблицы БД. Эти данные могут быть представлены как в виде экземпляра CModel, так и в виде ассоциативного массива.

Виджет создаёт таблицу с данными примерно такого вида.

cdetailview

Оформление можно изменять. На скриншоте показан вариант, который создаётся по-умолчанию. Виджет автоматически подключает CSS файл со стилями.

Рассмотрим небольшой пример. Допустим, у нас есть база данных с данными стран мира. Информацию об одной из них можно показать следующим образом.

$this->widget('zii.widgets.CDetailView', array(
    'data'=>$model,
    'attributes'=>array(
		array(
			'label'=>'Capital',
			'type'=>'raw',
			'value'=>$capitalLink,
		),
		array(
			'label'=>'Continent',
			'type'=>'raw',
			'value'=>CHtml::link($model->Continent,
				array('country/continent', 'name'=>$model->Continent)),
		),
		'Region',
		'SurfaceArea:number:Area',
		'Population:number',
		'GovernmentForm:text:Government Form',
		'LocalName:text:Local Name',
		'Code2:text:Country Code',
	),
	'nullDisplay'=>'Unknown',
));

Наибольший интерес здесь представляют настройки виджета. Они передаются в виде ассоциативного массива.

Элемент data должен содержать все данные модели. В данном случае, они находятся в переменной $model.

В элементе attributes мы перечисляем все поля, которые вывести в таблице. При этом существует несколько форматов записи этих атрибутов.

Самый простой – просто указать его имя (например, Region). В этом случае в правой колонке таблице будет выведено название атрибута, а в левой – его значение. Тут следует учесть, что значение атрибута будет отформатировано с помощью класса CFormatter. По-умолчанию используется форматирование типа text, т.е. все HTML сущности будут заменены на их эскейп последовательности. Это означает, что, например, вы не сможете вывести ссылку.

Более сложный вариант – указать параметры в виде массива. При этом элемент label должен содержать текст, который будет отображаться в левой колонке, type – тип форматирования (например, raw означает отсутствие форматирования вообще) и value – значение. Этот вариант удобен, когда вам нужно предварительно каким-то образом обработать значение из базы. В данном примере эта обработка заключалась в создании ссылок.

Третий вариант – указать параметры в формате
«атрибут:тип_форматирования:надпись_в_левой_колонке»
Т.е. это просто сокращённая запись второго варианта.

Элемент nullDisplay содержит текст, который будет выводиться вместо значений, которые равны NULL.

Есть ещё ряд параметров, которые используются для оформления таблицы. Например, с помощью cssFile можно указать имя своего файла со стилями, itemTemplate содержит шаблон, с помощью которого формируется строка таблицы и т.д.

Я подробно их не рассматриваю. Вы можете открыть файл с исходниками компонента и посмотреть все public атрибуты. Значение любого из них можно изменить с помощью настроек. Вы просто создаёте в массиве элемент, ключ которого совпадает с именем нужного public атрибута и фреймворк сам его изменит. Это касается всех компонентов Yii.

Как видите, разобраться с компонентами zii не сложно. Комментариев, которые находятся в исходниках, вполне достаточно для работы.

В заключение хочу спросить. Насколько интересна тема компонентов zii? И о каких из них вы хотели бы почитать?

Интересное в Сети

Продвижение сайта — интересная и высокооплачиваемая работа, но она требует специальных знаний и желания постоянно учиться.

Наши специалисты помогут вам выбрать и купить профессиональные пылесосы.