Spec-Zone.ru › Yii 1.1

CWidgetFactory

Пакет system.web
Наследование class CWidgetFactory » CApplicationComponent » CComponent
Реализует IApplicationComponent, IWidgetFactory
С версии 1.1
Исходный код framework/web/CWidgetFactory.php
CWidgetFactory создаёт новые виджеты для использования в представлениях.

CWidgetFactory используется в качестве компонента приложения по умолчанию "widgetFactory".

При вызове CBaseController::createWidget, CBaseController::widget или CBaseController::beginWidget, если компонент "widgetFactory" установлен, он будет использован для создания запрошенного виджета. Для установки компонента "widgetFactory" необходимо следующее конфигурирование приложения:
return array(
    'components'=>array(
        'widgetFactory'=>array(
            'class'=>'CWidgetFactory',
        ),
    ),
)


CWidgetFactory реализует функцию "skin", которая позволяет создать и инициализировать новый виджет с набором предопределённых значений свойств (называемых skin).

Когда CWidgetFactory используется для создания нового виджета, он сначала создаёт экземпляр виджета. Затем он проверяет, доступен ли skin для этого виджета в соответствии с именем класса виджета и свойством виджета CWidget::skin. Если skin найден, он будет объединён с начальными свойствами, переданными через createWidget. Затем объединённые начальные свойства будут использованы для инициализации вновь созданного экземпляра виджета.

Как уже упоминалось, skin — это набор начальных значений свойств для виджета. Поэтому он представлен как ассоциативный массив пар имя-значение. Skins хранятся в скриптах PHP, как и другие конфигурации. Каждый скрипт файла хранит skins для определённого типа виджета и называется именем класса виджета (например, CLinkPager.php). Каждый тип виджета может иметь один или несколько skins, идентифицируемых именем skin, заданным свойством CWidget::skin. Если свойство CWidget::skin не задано для данного виджета, будет использован default skin. Ниже показаны возможные skins для виджета CLinkPager:
return array(
    'default'=>array(
        'nextPageLabel'=>'>>',
        'prevPageLabel'=>'<<',
    ),
    'short'=>array(
        'header'=>'',
        'maxButtonCount'=>5,
    ),
);
В данном примере два skins. Первый — default skin, индексируемый строкой "default". Обратите внимание, что CWidget::skin по умолчанию равен "default". Поэтому это skin, который будет применён, если свойство CWidget::skin не указано явно. Второй skin называется "short" и будет использован только тогда, когда мы установим CWidget::skin в "short".

По умолчанию CWidgetFactory ищет skin виджета в каталоге "skins" текущей папки представлений приложения CWebApplication::viewPath (например, protected/views/skins). Если используется тема, он будет искать skin в каталоге "skins" папки представлений темы CTheme::viewPath (а также в указанном выше каталоге skin). Если указанный skin не найден, виджет по-прежнему будет создан без ошибок.

Свойства публичного доступа

Свойство Тип Описание Определено в
behaviors массив Поведения, которые должны быть присоединены к данному компоненту. CApplicationComponent
enableSkin логическое Включить ли механизм skinning для виджетов. CWidgetFactory
isInitialized логическое Проверяет, был ли инициализирован компонент приложения. CApplicationComponent
skinPath строка Директория, содержащая все файлы skin. CWidgetFactory
skinnableWidgets массив Список имён классов виджетов, которые можно skin. CWidgetFactory
widgets массив Начальные значения свойств виджета. CWidgetFactory

Методы публичного доступа

Метод Описание Определено в
__call() Вызывает метод, который не является методом класса. CComponent
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства null. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в null. CComponent
asa() Возвращает объект поведения с заданным именем. CComponent
attachBehavior() Присоединяет поведение к компоненту. CComponent
attachBehaviors() Присоединяет список поведений к компоненту. CComponent
attachEventHandler() Присоединяет обработчик событий к событию. CComponent
canGetProperty() Определяет, можно ли прочитать свойство. CComponent
canSetProperty() Определяет, можно ли установить свойство. CComponent
createWidget() Создаёт новый виджет на основе заданного имени класса и начальных свойств. CWidgetFactory
detachBehavior() Отсоединяет поведение от компонента. CComponent
detachBehaviors() Отсоединяет все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующий обработчик событий. CComponent
disableBehavior() Отключает присоединённое поведение. CComponent
disableBehaviors() Отключает все присоединённые поведения компонента. CComponent
enableBehavior() Включает присоединённое поведение. CComponent
enableBehaviors() Включает все присоединённые к компоненту поведения. CComponent
evaluateExpression() Вычисляет PHP выражение или обратный вызов в контексте этого компонента. CComponent
getEventHandlers() Возвращает список присоединённых обработчиков событий для события. CComponent
getIsInitialized() Проверяет, был ли инициализирован компонент приложения. CApplicationComponent
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли у события присоединённые обработчики. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
init() Инициализирует компонент приложения. CWidgetFactory
raiseEvent() Вызывает событие. CComponent

Методы защищённого доступа

Метод Описание Определено в
getSkin() Возвращает skin для указанного класса виджета и имени skin. CWidgetFactory

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

enableSkin свойство (доступно начиная с v1.1.3)

public boolean $enableSkin;

включить ли оформление виджетов. По умолчанию значение false.

См. также

  • skinnableWidgets

skinPath свойство

public string $skinPath;

директория, содержащая все файлы оформления. По умолчанию null, что означает использование директории "skins" в CWebApplication::viewPath текущего приложения.

skinnableWidgets свойство (доступно начиная с v1.1.3)

public array $skinnableWidgets;

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

widgets свойство (доступно начиная с v1.1.3)

public array $widgets;

начальные значения свойств виджетов. Каждая пара ключ-значение массива представляет начальные значения свойств для одного класса виджетов, при этом ключом массива является имя класса виджета, а значением массива — массив начальных значений свойств. Например,

array(
    'CLinkPager'=>array(
        'maxButtonCount'=>5,
        'cssFile'=>false,
    ),
    'CJuiDatePicker'=>array(
        'language'=>'ru',
    ),
)


Обратите внимание, что начальные значения, указанные здесь, могут быть переопределены значениями, заданными в вызовах CBaseController::createWidget. Они также могут быть переопределены оформлением виджетов, если enableSkin имеет значение true.

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

createWidget() метод

public CWidget createWidget(CBaseController $owner, string $className, array $properties=array ( ))
$owner CBaseController владелец нового виджета
$className string имя класса виджета. Это также может быть псевдоним пути (например, system.web.widgets.COutputCache)
$properties array начальные значения свойств виджета (имя=>значение).
{return} CWidget новый созданный виджет, свойства которого были инициализированы заданными значениями.
Исходный код: framework/web/CWidgetFactory.php#144 (показать)
public function createWidget($owner,$className,$properties=array())
{
    
$className=Yii::import($className,true);
    
$widget=new $className($owner);

    if(isset(
$this->widgets[$className]))
        
$properties=$properties===array() ? $this->widgets[$className] : CMap::mergeArray($this->widgets[$className],$properties);
    if(
$this->enableSkin)
    {
        if(
$this->skinnableWidgets===null || in_array($className,$this->skinnableWidgets))
        {
            
$skinName=isset($properties['skin']) ? $properties['skin'] : 'default';
            if(
$skinName!==false && ($skin=$this->getSkin($className,$skinName))!==array())
                
$properties=$properties===array() ? $skin : CMap::mergeArray($skin,$properties);
        }
    }
    foreach(
$properties as $name=>$value)
        
$widget->$name=$value;
    return 
$widget;
}

Создаёт новый виджет на основе заданного имени класса и начальных свойств.

getSkin() метод

protected array getSkin(string $className, string $skinName)
$className string имя класса виджета
$skinName string имя оформления виджета
{return} array оформление (имя=>значение) для виджета
Исходный код: framework/web/CWidgetFactory.php#171 (показать)
protected function getSkin($className,$skinName)
{
    if(!isset(
$this->_skins[$className][$skinName]))
    {
        
$skinFile=$this->skinPath.DIRECTORY_SEPARATOR.$className.'.php';
        if(
is_file($skinFile))
            
$this->_skins[$className]=require($skinFile);
        else
            
$this->_skins[$className]=array();

        if((
$theme=Yii::app()->getTheme())!==null)
        {
            
$skinFile=$theme->getSkinPath().DIRECTORY_SEPARATOR.$className.'.php';
            if(
is_file($skinFile))
            {
                
$skins=require($skinFile);
                foreach(
$skins as $name=>$skin)
                    
$this->_skins[$className][$name]=$skin;
            }
        }

        if(!isset(
$this->_skins[$className][$skinName]))
            
$this->_skins[$className][$skinName]=array();
    }
    return 
$this->_skins[$className][$skinName];
}

Возвращает оформление для указанного класса виджета и имени оформления.

init() метод

public void init()
Исходный код: framework/web/CWidgetFactory.php#129 (показать)
public function init()
{
    
parent::init();

    if(
$this->enableSkin && $this->skinPath===null)
        
$this->skinPath=Yii::app()->getViewPath().DIRECTORY_SEPARATOR.'skins';
}

Инициализирует компонент приложения. Этот метод переопределяет реализацию родительского класса, разрешая путь к оформлению.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CWidgetFactory

Spec-Zone.ru

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