Создал theme для приложения. Но не пойму можно ли в этой же теме описать views для виджетов? Или widget-ы не поддерживают темы?
Создал 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);