Spec-Zone.ru › Yii 1.1

CDetailView

Пакет zii.widgets
Наследование class CDetailView » CWidget » CBaseController » CComponent
С версии 1.1
Исходный код framework/zii/widgets/CDetailView.php
CDetailView отображает подробную информацию об одной модели данных.

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-класса для элемента, меткой и значением атрибута соответственно.

См. также

  • itemCssClass

nullDisplay свойство

public string $nullDisplay;

текст, который будет отображаться, когда значение атрибута равно null. По умолчанию "Не задано".

tagName свойство

public string $tagName;

имя тега для рендеринга представления деталей. По умолчанию 'table'. Если установлено в null, тег не будет рендериться.

См. также

  • itemTemplate

Подробное описание методов

getFormatter() метод

public CFormatter getFormatter()
{return} CFormatter экземпляр форматировщика. По умолчанию компонент приложения 'format'.
Исходный код: framework/zii/widgets/CDetailView.php#246 (показать)
public function getFormatter()
{
    if(
$this->_formatter===null)
        
$this->_formatter=Yii::app()->format;
    return 
$this->_formatter;
}

init() метод

public void init()
Исходный код: framework/zii/widgets/CDetailView.php#136 (показать)
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
Исходный код: framework/zii/widgets/CDetailView.php#238 (показать)
protected function renderItem($options,$templateData)
{
    echo 
strtr(isset($options['template']) ? $options['template'] : $this->itemTemplate,$templateData);
}

Этот метод используется методом run() для рендеринга строки элемента.

run() метод

public void run()
Исходный код: framework/zii/widgets/CDetailView.php#171 (показать)
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 экземпляр форматировщика
Исходный код: framework/zii/widgets/CDetailView.php#256 (показать)
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API