widget и theme

Создал theme для приложения. Но не пойму можно ли в этой же теме описать views для виджетов? Или widget-ы не поддерживают темы?

Можно в теле виджета переопределить функцию getViewPath(), указав в ней путь к своему view в теме. Тогда при вызове render будет подгружаться из нужного места.

В своём движке я сделал расширение dotPlantPortlet и мои виджеты расширяют уже dotPlantPortlet, а не CWidget.

Пример реализации можно посмотреть в этом исходнике.

Спасибо, у себя так и сделал, направил виджеты на директорию:

/themes/<themename>/components/views/

Только всё равно осталась одна проблема. Предположим виджет находится модуле "forum". Хотелось бы чтобы виджеты из модуля "forum", искали отображения в директории:

/themes/<themename>/components/views/<modulename>/

Можно ли из виджета определить модуль к которому этот виджет относится? Судя по документации нет.

Можно сделать например вот так.

Код абстрактного виджета:




class MyWidget extends CWidget

{

        public $title    = '';

        public $visible  = true;

        public $viewPath = '';

        public $module = '';




        public function getViewPath()

        {

                $themeManager = Yii::app()->themeManager;

                if ($this->module == '')                

                    return $themeManager->basePath.DIRECTORY_SEPARATOR.Yii::app()->theme->name.DIRECTORY_SEPARATOR.'views/portlets';

                else

                    return $themeManager->basePath.DIRECTORY_SEPARATOR.Yii::app()->theme->name.DIRECTORY_SEPARATOR.'views/components/' . $this->module;

        }


        // all code goes here

}



В самом виджете пишем:




class XWidget extends MyWidget

{

       public $module = 'admin';


// all code goes here

}



Виджеты пока не подтягивают автоматом свои Views из тем,

это будет исправлено в yii 1.1.5

А пока можно делать вот так к примеру:


$this->render('webroot.themes.'.Yii::app()->theme->name.'.components.views.ViewName',$params);