CDetailView
| Пакет | zii.widgets |
|---|---|
| Наследование | class CDetailView » CWidget » CBaseController » CComponent |
| С версии | 1.1 |
| Исходный код | framework/zii/widgets/CDetailView.php |
CDetailView лучше всего подходит для отображения модели в стандартном формате (например, каждый атрибут модели отображается как строка в таблице). Модель может быть экземпляром CModel или ассоциативным массивом.
CDetailView использует свойство attributes для определения, какие атрибуты модели должны быть отображены и как они должны быть отформатированы.
Типичное использование CDetailView выглядит следующим образом:
$this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'title', // title attribute (in plain text)
'owner.name', // an attribute of the related object "owner"
'description:html', // description attribute in HTML
array( // related city displayed as a link
'label'=>'City',
'type'=>'raw',
'value'=>CHtml::link(CHtml::encode($model->city->name),
array('city/view','id'=>$model->city->id)),
),
),
));
Свойства Public
| Свойство | Тип | Описание | Определено в |
|---|---|---|---|
| actionPrefix | строка | префикс к идентификаторам действий. | CWidget |
| attributes | массив | список атрибутов, которые должны быть отображены в детальном представлении. | CDetailView |
| baseScriptUrl | строка | базовый URL скрипта для всех ресурсов детального представления (например, JavaScript, файлы CSS, изображения). | CDetailView |
| controller | CController | Возвращает контроллер, к которому принадлежит этот виджет. | CWidget |
| cssFile | строка | URL файла CSS, используемого этим детальным представлением. | CDetailView |
| data | смешанный тип | модель данных, чьи подробности должны быть отображены. | CDetailView |
| formatter | CFormatter | экземпляр форматировщика. | CDetailView |
| htmlOptions | массив | HTML-опции, используемые для tagName | CDetailView |
| id | строка | Возвращает идентификатор виджета или генерирует новый, если это запрошено. | CWidget |
| itemCssClass | массив | имена классов CSS для элементов, отображающих значения атрибутов. | CDetailView |
| itemTemplate | строка | шаблон, используемый для рендеринга одного атрибута. | CDetailView |
| nullDisplay | строка | текст, который будет отображаться, когда значение атрибута равно null. | CDetailView |
| owner | CBaseController | Возвращает владельца/создателя этого виджета. | CWidget |
| skin | смешанный тип | имя скина, которое будет использоваться этим виджетом. | CWidget |
| tagName | строка | имя тега для рендеринга детального представления. | CDetailView |
| viewPath | строка | Возвращает директорию, содержащую файлы представления для этого виджета. | CWidget |
Общедоступные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает именованный метод, который не является методом класса. | CComponent |
| __construct() | Конструктор. | CWidget |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства null. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в null. | CComponent |
| actions() | Возвращает список действий, используемых этим виджетом. | CWidget |
| asa() | Возвращает объект именованного поведения. | CComponent |
| attachBehavior() | Присоединяет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Присоединяет список поведений к компоненту. | CComponent |
| attachEventHandler() | Присоединяет обработчик событий к событию. | CComponent |
| beginCache() | Начинает кэширование фрагмента. | CBaseController |
| beginClip() | Начинает запись клипа. | CBaseController |
| beginContent() | Начинает рендеринг содержимого, которое должно быть оформлено указанным представлением. | CBaseController |
| beginWidget() | Создаёт виджет и выполняет его. | CBaseController |
| canGetProperty() | Определяет, можно ли считать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| createWidget() | Создаёт виджет и инициализирует его. | CBaseController |
| detachBehavior() | Отсоединяет поведение от компонента. | CComponent |
| detachBehaviors() | Отсоединяет все поведения от компонента. | CComponent |
| detachEventHandler() | Отсоединяет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает присоединённое поведение. | CComponent |
| disableBehaviors() | Отключает все присоединённые поведения к этому компоненту. | CComponent |
| enableBehavior() | Включает присоединённое поведение. | CComponent |
| enableBehaviors() | Включает все присоединённые к этому компоненту поведения. | CComponent |
| endCache() | Завершает кэширование фрагмента. | CBaseController |
| endClip() | Завершает запись клипа. | CBaseController |
| endContent() | Завершает рендеринг содержимого. | CBaseController |
| endWidget() | Завершает выполнение указанного виджета. | CBaseController |
| evaluateExpression() | Вычисляет PHP-выражение или обратный вызов в контексте этого компонента. | CComponent |
| getController() | Возвращает контроллер, к которому принадлежит этот виджет. | CWidget |
| getEventHandlers() | Возвращает список присоединённых обработчиков событий для события. | CComponent |
| getFormatter() | Возвращает экземпляр форматировщика. По умолчанию используется компонент приложения 'format'. | CDetailView |
| getId() | Возвращает идентификатор виджета или генерирует новый, если запрошено. | CWidget |
| getOwner() | Возвращает владельца/создателя этого виджета. | CWidget |
| getViewFile() | Ищет файл сценария представления в соответствии с именем представления. | CWidget |
| getViewPath() | Возвращает директорию, содержащую файлы представления для этого виджета. | CWidget |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли присоединённые обработчики для указанного события. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует представление детали. | CDetailView |
| raiseEvent() | Вызывает событие. | CComponent |
| render() | Рендерит представление. | CWidget |
| renderFile() | Рендерит файл представления. | CBaseController |
| renderInternal() | Рендерит файл представления. | CBaseController |
| run() | Рендерит представление детали. | CDetailView |
| setFormatter() | Устанавливает экземпляр форматировщика. | CDetailView |
| setId() | Устанавливает идентификатор виджета. | CWidget |
| widget() | Создаёт виджет и выполняет его. | CBaseController |
Защищённые методы
| Метод | Описание | Определено в |
|---|---|---|
| renderItem() | Этот метод используется методом run() для рендеринга строки элемента. | CDetailView |
Подробное описание свойств
attributes свойство
public array $attributes;
список атрибутов, которые должны отображаться в представлении деталей. Каждый элемент массива представляет собой описание для отображения одного конкретного атрибута.
Атрибут можно указать как строку в формате "Имя:Тип:Метка". Оба "Тип" и "Метка" необязательны.
"Имя" относится к имени атрибута. Это может быть свойство (например, "title") или подсвойство (например, "owner.username").
"Метка" представляет собой метку для отображения атрибута. Если она не указана, будет использовано "Имя" для генерации соответствующей метки.
"Тип" представляет тип атрибута. Он определяет, как значение атрибута должно быть отформатировано и отображено. По умолчанию он равен 'text'. "Тип" должен быть распознаваем форматировщиком. В частности, если "Тип" равен "xyz", то метод "formatXyz" форматировщика будет вызван для форматирования значения атрибута для отображения. По умолчанию, когда используется CFormatter, допустимы следующие значения "Тип": raw, text, ntext, html, date, time, datetime, boolean, number, email, image, url. Дополнительные сведения об этих типах см. в CFormatter.
Атрибут также можно указать в виде массива со следующими элементами:
- метка: метка, связанная с атрибутом. Если она не указана, будет использовано следующее значение "имя" для генерации соответствующей метки.
- имя: имя атрибута. Это может быть свойство или подсвойство модели. Если ниже указан элемент "значение", этот элемент будет проигнорирован.
- значение: значение, подлежащее отображению. Если оно не указано, вышеуказанный элемент "имя" будет использован для получения соответствующего значения атрибута для отображения. Обратите внимание, что это значение будет отформатировано в соответствии с параметром "тип", как описано ниже. Это также может быть анонимная функция, возвращаемое значение которой будет использовано в качестве значения. Подпись функции должна быть
function($data), где данные относятся к свойству данных виджета представления деталей. - тип: тип атрибута, который определяет, как будет отформатировано значение атрибута. Возможные значения см. выше.
- cssClass: CSS-класс, который должен использоваться для этого элемента. Этот параметр доступен с версии 1.1.3.
- шаблон: шаблон, используемый для рендеринга атрибута. Если он не указан, будет использован itemTemplate. Дополнительные сведения о том, как задать этот параметр, см. в itemTemplate. Этот параметр доступен с версии 1.1.1.
- отображать: отображать ли атрибут. Если установлено значение
false, строка таблицы для атрибута не будет рендериться. Этот параметр доступен с версии 1.1.5.
baseScriptUrl свойство
public string $baseScriptUrl;
базовый URL скрипта для всех ресурсов представления деталей (например, файлы javascript, CSS, изображения). По умолчанию null, что означает использование интегрированных ресурсов представления деталей (которые публикуются как ресурсы).
cssFile свойство
public string $cssFile;
URL файла CSS, используемого этим представлением деталей. По умолчанию null, что означает использование интегрированного файла CSS. Если это значение установлено в false, вы отвечаете за явное включение необходимого файла CSS в вашу страницу.
data свойство
public mixed $data;
модель данных, детали которой должны быть отображены. Это может быть экземпляр CModel (например, объект CActiveRecord или объект CFormModel) или ассоциативный массив.
formatter свойство
public CFormatter getFormatter()
public void setFormatter(CFormatter $value)
экземпляр форматировщика. По умолчанию компонент приложения 'format'.
htmlOptions свойство
public array $htmlOptions;
HTML-параметры, используемые для tagName
itemCssClass свойство
public array $itemCssClass;
имена CSS-классов для элементов, отображающих значения атрибутов. Если задано несколько имён CSS-классов, они будут присваиваться элементам последовательно и многократно. По умолчанию array('odd', 'even').
itemTemplate свойство
public string $itemTemplate;
шаблон, используемый для рендеринга отдельного атрибута. По умолчанию строка таблицы. Эти токены распознаются: "{class}", "{label}" и "{value}". Они будут заменены именем CSS-класса для элемента, меткой и значением атрибута соответственно.
См. также
nullDisplay свойство
public string $nullDisplay;
текст, который будет отображаться, когда значение атрибута равно null. По умолчанию "Не задано".
tagName свойство
public string $tagName;
имя тега для рендеринга представления деталей. По умолчанию 'table'. Если установлено в null, тег не будет рендериться.
См. также
Подробное описание методов
getFormatter() метод
public CFormatter getFormatter() | ||
| {return} | CFormatter | экземпляр форматировщика. По умолчанию компонент приложения 'format'. |
public function getFormatter()
{
if($this->_formatter===null)
$this->_formatter=Yii::app()->format;
return $this->_formatter;
}
init() метод
public void init() |
public function init()
{
if($this->data===null)
throw new CException(Yii::t('zii','Please specify the "data" property.'));
if($this->attributes===null)
{
if($this->data instanceof CModel)
$this->attributes=$this->data->attributeNames();
elseif(is_array($this->data))
$this->attributes=array_keys($this->data);
else
throw new CException(Yii::t('zii','Please specify the "attributes" property.'));
}
if($this->nullDisplay===null)
$this->nullDisplay='<span class="null">'.Yii::t('zii','Not set').'</span>';
if(isset($this->htmlOptions['id']))
$this->id=$this->htmlOptions['id'];
else
$this->htmlOptions['id']=$this->id;
if($this->baseScriptUrl===null)
$this->baseScriptUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('zii.widgets.assets')).'/detailview';
if($this->cssFile!==false)
{
if($this->cssFile===null)
$this->cssFile=$this->baseScriptUrl.'/styles.css';
Yii::app()->getClientScript()->registerCssFile($this->cssFile);
}
}
Инициализирует представление деталей. Этот метод инициализирует необходимые значения свойств.
renderItem() метод (доступен с версии 1.1.11)
protected void renderItem(array $options, string $templateData) | ||
| $options | массив | параметры конфигурации для этого элемента/атрибута из attributes |
| $templateData | строка | данные, которые будут вставлены в itemTemplate |
protected function renderItem($options,$templateData)
{
echo strtr(isset($options['template']) ? $options['template'] : $this->itemTemplate,$templateData);
}
Этот метод используется методом run() для рендеринга строки элемента.
run() метод
public void run() |
public function run()
{
$formatter=$this->getFormatter();
if ($this->tagName!==null)
echo CHtml::openTag($this->tagName,$this->htmlOptions);
$i=0;
$n=is_array($this->itemCssClass) ? count($this->itemCssClass) : 0;
foreach($this->attributes as $attribute)
{
if(is_string($attribute))
{
if(!preg_match('/^([\w\.]+)(:(\w*))?(:(.*))?$/',$attribute,$matches))
throw new CException(Yii::t('zii','The attribute must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.'));
$attribute=array(
'name'=>$matches[1],
'type'=>isset($matches[3]) ? $matches[3] : 'text',
);
if(isset($matches[5]))
$attribute['label']=$matches[5];
}
if(isset($attribute['visible']) && !$attribute['visible'])
continue;
$tr=array('{label}'=>'', '{class}'=>$n ? $this->itemCssClass[$i%$n] : '');
if(isset($attribute['cssClass']))
$tr['{class}']=$attribute['cssClass'].' '.($n ? $tr['{class}'] : '');
if(isset($attribute['label']))
$tr['{label}']=$attribute['label'];
elseif(isset($attribute['name']))
{
if($this->data instanceof CModel)
$tr['{label}']=$this->data->getAttributeLabel($attribute['name']);
else
$tr['{label}']=ucwords(trim(strtolower(str_replace(array('-','_','.'),' ',preg_replace('/(?<![A-Z])[A-Z]/', ' \0', $attribute['name'])))));
}
if(!isset($attribute['type']))
$attribute['type']='text';
if(isset($attribute['value']))
$value=is_object($attribute['value']) && get_class($attribute['value']) === 'Closure' ? call_user_func($attribute['value'],$this->data) : $attribute['value'];
elseif(isset($attribute['name']))
$value=CHtml::value($this->data,$attribute['name']);
else
$value=null;
$tr['{value}']=$value===null ? $this->nullDisplay : $formatter->format($value,$attribute['type']);
$this->renderItem($attribute, $tr);
$i++;
}
if ($this->tagName!==null)
echo CHtml::closeTag($this->tagName);
}
Отображает представление деталей. Это главный вход для всего рендеринга представления деталей.
setFormatter() метод
public void setFormatter(CFormatter $value) | ||
| $value | CFormatter | экземпляр форматировщика |
public function setFormatter($value)
{
$this->_formatter=$value;
}
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CDetailView