Необходимо исключить виджет, например меню, из кэширования. Страница кэшируется в контроллере как:
public function filters(){
return array(
array(
'COutputCache +index',
'duration' => 60*60*24,
),
);
}
Потому как виджет application.components.MainMenu выводит свое содержимое - в контроллере добавил функцию:
public function mainMenu(){
ob_start();
$this->widget('application.components.MainMenu',array(
'items'=>array(
array('label'=>'Главная', 'url'=>array('/site/index')),
array('label'=>'Новости', 'url'=>array('/news')),
array('label'=>'Контакты', 'url'=>array('/site/contact')),
array('label'=>'Информация', 'url'=>array('/page/list', 'book'=>'informaciya')),
array('label'=>'Вход', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
array('label'=>'Выход', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
),
));
$content = ob_get_contents();
ob_end_clean();
return $content;
}
Насколько это правильный вариант работы с виджетами которые необходимо исключить из кеширования? Есть еще другие варианты?