Как правило, я просто вручную создаю массив комбинаций модуль / действие, которые я хотел бы видеть в моем меню. Было бы довольно легко получить эту информацию из динамического источника (например, файла конфигурации или базы данных):
$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);
Затем я могу перебрать меню $ из шаблона, чтобы создать меню. И я могу сравнить элементы с $ current, чтобы определить, должен ли я установить «текущий» класс для пункта меню
.
Пример fool.com, который вы приводите, немного сложнее, потому что он двухуровневый. В этом случае вы, вероятно, захотите создать дерево меню из базы данных, возможно, используя поддержку вложенных наборов Propel.