*маленькое невинное хобби

Zend Framework: боковое меню

Zend Framework предоставляет весьма удобный и простой способ управления навигацией на сайте. Вся структура прописывается в конфигурационном файле, а отображение реализуется стандартными способами, причём с поддержкой прав доступа и многоязычности.

Однако, на многих сайтах необходимо разделить меню на верхнее и боковое:

Это делается при помощи несложного расширения:

class Zend_View_Helper_ActiveMenuBranch extends Zend_View_Helper_Abstract
{
	public function activeMenuBranch($navigation)
	{
		$container = $navigation->getContainer();

		$iterator = new RecursiveIteratorIterator($container, RecursiveIteratorIterator::CHILD_FIRST);

		foreach ($iterator as $page)
		{
			if ($page->isActive(false))
			{
				$found = $page;
				$foundDepth = $iterator->getDepth();
			}
		}

		while(($foundDepth--) > 0)
		{
			$found = $found->getParent();
		}
		return $found;
	}
}

Использование:

<!-- Верхнее меню -->
<div id="menu" class="box"><?= $this->navigation()->menu()->setMaxDepth(0) ?></div>
<!-- Боковое меню -->
<div id="aside" class="box"><?= $this->navigation()->menu()->renderMenu($this->activeMenuBranch($this->navigation())) ?></div>

В результате боковое меню будет показывать активную ветку.