Ссылка на класс компонента модуля в GridView

Я загружаю бутстрап в модуль:

'modules'=>array(
    'admin'=>array(
        'preload'=>array('bootstrap'),
        'components'=>array(
            'bootstrap'=>array(
                'class'=>'ext.bootstrap.components.Bootstrap',
                'responsiveCss' => true,
            ),
        )
    ),
),

в GridView я пытаюсь создать TbButtonColumn:

array(
    'class'=>'bootstrap.widgets.TbButtonColumn',
    'htmlOptions'=>array('style'=>'width: 50px'),
),

Это возвращает CException

Свойство CWebApplication.bootstrap не определено.

поскольку он указывает на загрузчик в основном приложении конфигурации, которого, очевидно, не существует, как мне сослаться на загрузчик, когда он загружен в модуль?

Я попытался:

компоненты.bootstrap.widgets.TbButtonColumn

admin.components.bootstrap.widgets.TbButtonColumn

admin.bootstrap.widgets.TbButtonColumn


person keeg    schedule 14.12.2012    source источник


Ответы (1)


Строки виновника находятся в TbGridView init():

$popover = Yii::app()->bootstrap->popoverSelector;
$tooltip = Yii::app()->bootstrap->tooltipSelector;

Изменение их на это поможет:

if (!($module=Yii::app()->controller->module)){// access as application component (original behavior)
    $popover = Yii::app()->bootstrap->popoverSelector;
    $tooltip = Yii::app()->bootstrap->tooltipSelector;
}
else {// access as module component 
    $popover = $module->bootstrap->popoverSelector;
    $tooltip = $module->bootstrap->tooltipSelector;
}

Те же две строки есть и в TbListView, поэтому, если вы используете TbListView, вы можете внести те же изменения.


Обновление: кажется, уже есть проблема относительно этой проблемы, опубликовано решение там лучше выглядит:

$module = ( Yii::app()->controller->module ? Yii::app()->controller->module : Yii::app() );

$popover = $module->bootstrap->popoverSelector;
$tooltip = $module->bootstrap->tooltipSelector;
person bool.dev    schedule 15.12.2012