Widoki z sidebarem

Cześć ponownie!

Mam standardowy podział na stronie, czyli treść i po boku pasek. Na pasku muszą być wyświetlane dwa rodzaje danych: na podstawie danych z akcji oraz globalne (np. wszystkie kategorie tekstów). Przy czym układ jest różny dla każdej akcji.

Jak to najlepiej zrobić? Można renderować dwa widoki?

Opcji jest kilka, i zależy to od ilości kombinacji widoków z sidebarem. Najprostszym rozwiązaniem jest dodanie do klasy Controller atrybutu $sidebar i ustawianie mu treści przed renderowaniem widoku.




public function actionTest() {

  /* kod */


  $this->sidebar = $this->renderPartial('test_sidebar', array(), true);

  $this->render('test');

}



W layoucie 2-kolumnowym wyświetlasz wtedy treść z $this->sidebar w sidebarze. Warto też stworzyć specjalny widget, który będzie generował treść do sidebara - jest to bardziej elastyczne rozwiązanie niż korzystanie z $this->renderPartial().

Jeśli kombinacji jest niewiele i nie zależą od treści, możesz też stworzyć kilka layoutów z predefiniowanymi widgetami, wtedy tylko w akcji ustawiasz odpowiedni layout i logika odpowiedzialna za wyświetlanie sidebara siedzi w samym layoucie.