Menu W Layoucie Różne W Zależności Od Widoku

Witam. Mam w layoucie dwa menu, przy czym pierwsze jest stałe, a drugie to są jakby opcje widoku. Przykładowo w wiadomościach w menu powinno być utwórz wiadomość, skrzynka odbiorcza. Jednak widok jest renderowany po widoku więc umieszczenie tam zmiennych i tego menu nie wchodzi w grę, a w kontrolerze to też niewygoda. Sposobem jakim można było by to rozwiązać jest js w widoku który by wstawił menu, jednak było by to opóźnione i złe do zarządzania. Czy jest może jakiś lepszy sposób na rozwiązanie tego problemu?

Cześć

Możesz zrobić podwidok, który będzie generował drugie menu bez użycia js. W podobny sposób generuję menu u siebie, w zależności o controlera i widoku wyciągam z klasy tablicę z menu przez metody statyczne. W widoku odwołanie do metody statycznej tworzę przez złączenie nazwy kotrolera a zmienną w tej metodzie jest rola użytkownika.


<?php

class UzytkownikMenu {

  static function menuAdmin($rola = null) {

    if ($rola == null) throw new Exception('Błąd generowania menu SSO ADMIN, rola nie może być null');

      $menu = array(

      array(

        'text' => CHtml::link('Informacje', array('/sso/admin/index'))

           )

      );

    return $menu;

  }

}



i menu w widoku do tego:


<?php

  $metoda = 'menu' . ucfirst(Yii::app()->controller->id);

  $this->widget('CTreeView', array('data' => UzytkownikMenu::$metoda(Yii::app()->user->etat->stanowisko)));

?>

Rozumiem że dla każdego menu mam tworzyć klasę? Mi zależy żeby to było wygodne i żeby w renderowanym widoku było menu, a nie chcę nie potrzebnie dużo plików.

No po co ?, przecież możesz dodać tylko metodę statyczną i odwoływać się do niej.

Spróbuj za pomocą Portlet’u. W CMenu widocznością możesz też sterować za pomocą flagi “visible”.