Yii - пример создания виджета - widget example - шаблон для контроллера

ПРИМЕЧАНИЕ: о том, как изменить шаблон для контроллера написано здесь

вообще если есть элемент общего оформления для ряда дейсвий конторллера - то можно реализовать его вывод как виджет
Итак - вот мой контроллер - он лежит в папке /protected/components -

<?php
/* рассмотрим здесь "параметризированный" виджет*/
class AdminMenuWidget extends CWidget {

	/*в общем случаем может
	хранить целый массив свойст - нас же интересует
	только текущее действие
	- чтобы подсветить активный элемент меню*/
	public $params = array(
		// пусть по умолчанию будет активна ссылка на главную
		'action'=>'index',
		// следующие два не использую - просто для примера
		'parameter 2'=>'value 2',
		'parameter 3'=>'value 3',
	);

	public function run() {
		// передаем данные в представление виджета
		$this->render('adminmenu',array('params' => $this->params));
	}
}

main файл конфигурации настроен так, чтобы имена компонентов были доступны без указания пути - например так
представление контроллера для этого вижжета лежит рядом - а именно так -

/protected/components/views

и выглядит так:

< ul class="nav nav-pills" >
	< li<?php if ($params['action']=='index')
		echo ' class="active"' ;
		?>>
		<?php echo CHtml::link('Админка', array('perfomance/index')); ?>
	< /li >

	< li<?php if ($params['action'] == 'showtickets')
		echo ' class="active"' ;
		?>>
		<? php echo CHtml::link('Заявки', array('perfomance/showtickets')); ?>
	< /li >

	< li<?php if ($params['action'] == 'rebuildroles')
		echo ' class="active"' ;
		?>>
		<?php echo CHtml::link('Роли', array('perfomance/rebuildroles')); ?> < /li >
</ul>

Как отобразить виджет

Это просто - например в представлении некоего контроллера я пишу:

<?php
	$this->beginWidget('AdminMenuWidget',array(
		'params'=>array(
			//получаем текущее действие чтобы подсветить активный элемент меню
			'action' => Yii::app()->getController()->getAction()->getId(),
		)));
	$this->endWidget();
?>

Вот и всё))

пример передачи и хранения параметров я подсмотрел здесь = http://www.simplecoding.org/yii-frejmvor... (огромное спасибо автору))