Как создать динамическое меню в Symfony

Хотя я считаю, что фреймворк PHP Symfony прекрасно подходит для многих вещей, мне сложно создавать легко масштабируемые динамические меню для веб-сайта.

Мне интересно, как другие разработчики Symfony справились с этой проблемой. Я приведу простой пример того, о чем я спрашиваю.

Если зайти на www.fool.com, вы увидите, что у них типичная настройка меню. Список категорий, одна из которых активна и каким-то образом выделена с помощью CSS.

Что было бы хорошим способом сделать это динамически созданным в проекте Symfony. Передача переменных какого-либо вида из модуля в модуль. Я еще не нашел элегантного решения.


person Justin    schedule 16.02.2009    source источник


Ответы (1)


Как правило, я просто вручную создаю массив комбинаций модуля/действия, которые я хотел бы видеть в своем меню. Было бы довольно легко получить эту информацию из динамического источника (например, файла конфигурации или базы данных):

$this->menu = array(
    'Home' => array('default', 'index'),
    'About Us' => array('default', 'aboutUs'),
    'Products' => array('products', 'index')
);

Затем я использую методы контроллера getActionName и getMethodName, чтобы определить, какой элемент в моем меню является текущим:

$this->current = array_search(array($this->getModuleName(), $this->getActionName()), $this->menu);

Затем я могу перебрать $menu из шаблона, чтобы создать меню. И я могу сравнить элементы с $current, чтобы определить, должен ли я установить «текущий» класс в элементе меню ‹li›.

Приведенный вами пример Fool.com немного сложнее, потому что он двухуровневый. В этом случае вы, вероятно, захотите сгенерировать дерево меню из базы данных, возможно, используя поддержку вложенных наборов в Propel.

person Dominic Scheirlinck    schedule 20.02.2009
comment
Это имеет большой смысл, мне просто интересно, пропустил я что-то или нет. - person Justin; 20.02.2009