Sidebar или узкая колонка на сайте (слева, справа, где угодно

Но как вы, удобнее всего это реализуете? Ведь на разных страницах эта панель может отличаться.
Я перепробовал несколько вариантов:
- компонент приложения в который добавлял виджеты
Код: Выделить всё
Yii::app()->sidebar->addWidget($name,$data);
Код: Выделить всё
$this->beginContent('layout-2');
$this->endContent();
И жили они долго и счастливо

Начну. Метод заключается в использовании виджета CClipWidget, или точнее CController::$clips, что практически тоже самое.
Пишем свой шаблон views\layouts\main.php
Код: Выделить всё
<?php
// head, body - пропустил
echo CHtml::opentTag('div',array('id'=>'page'));
echo $content;
echo CHtml::closeTag('div');
echo CHtml::opentTag('div',array('id'=>'sidebar'));
// проверять существование не нужно, проверка происходит CMap::itemAt(), зачем лишний раз проверять?
echo $this->clips['sidebar'];
echo CHtml::closeTag('div');
Код: Выделить всё
/*начинаем записывать клип*/
$this->beginClip('sidebar');
echo CHtml::tag('h1',array(),'Наш sidebar');
/*вывели календарь*/
$this->widget('calendarPortlet');
/*вывели облако тегов*/
$this->widget('tagsPortlet');
$this->endClip();
/*закончили с панелью*/
/*дальше контент*/
echo CHtml::tag('h1',array(),'Главная страница');
Можно воспользоваться магией геттеров и сеттеров Yii:
Код: Выделить всё
/*начинаем записывать клип*/
$this->clips['sidebar'].=CHtml::tag('h1',array(),'Наш sidebar');
/*вывели календарь*/
$this->clips['sidebar'].=$this->widget('calendarPortlet',array(),true);
/*вывели облако тегов*/
$this->clips['sidebar'].=$this->widget('tagsPortlet',array(),true);
/*закончили с панелью*/
/*дальше контент*/
echo CHtml::tag('h1',array(),'Главная страница');