Я представляю элементы верхнего уровня объекта Zend Navigation в одном месте:
echo $this->navigation()->menu()->setMaxDepth(0);
Как визуализировать дерево навигации со второго уровня вниз для активной ветви? Я попытался создать частичное, которое $this->container
объект $this->container
, но я не знаю, как определить, является ли мой текущий элемент активной ветвью. Как только я определил, что это активная ветка, как мне отображать меню? Я делаю это с трудом и пропуская что-то очевидное?
Благодаря!
ОБНОВИТЬ:
Я принял решение, потому что это то, что я использовал, но я также хотел бы дать ответ на мой фактический вопрос, для справки. ( $this
объект вида)
// Find the active branch, at a depth of one $branch = $this->navigation()->findActive($this->nav, 1, 1); if (0 == count($branch)) { // no active branch, find the default branch $pages = $this->nav->findById('default-branch')->getPages(); } else { $pages = $branch['page']->getPages(); } $this->subNav = new Zend_Navigation($pages);
$this->subNav
можно затем использовать для отображения подменю.
Я делаю что-то подобное. Моя основная навигация справляется с чем-то вроде этого …
$this->navigation()->menu()->setPartial('tabs.phtml'); echo $this->navigation()->menu()->render();
Затем в моем tabs.phtml я перебираю контейнер таким образом …
if (count($this->container)) { foreach($this->container as $page) { if ($page->isVisible()) { if ($page->isActive(true)) { $subcontainer = $page->getPages(); foreach($subcontainer as $subpage) { // echo my link } } } } }
Надеюсь, это поможет.
Если я правильно задал вопрос, так я это делаю:
print $this->navigation()->menu()->renderMenu(null, array( 'minDepth' => 1, 'maxDepth' => 1, 'onlyActiveBranch' => true, 'renderParents' => false));
Отображает только подменю текущего активного меню.
Я делаю это так:
<?php // Render top-level elements echo $this->navigation()->menu()->setMaxDepth(0); // Render 2nd level elements for active element echo $this->navigation()->menu() ->setOnlyActiveBranch(true) ->setRenderParents(false) ->setMinDepth(1); ?>
но это нехорошее решение. Лучше по одному для каждого уровня в качестве отдельного меню:
<!-- level 1 --> <?php echo $this->navigation()->menu()->setMaxDepth(0); ?> <!-- level 2 --> <?php echo $this->navigation()->menu()->setOnlyActiveBranch(true)->setRenderParents(true)->setMinDepth(1)->setMaxDepth(1); ?> <!-- level 3 --> <?php echo $this->navigation()->menu()->setOnlyActiveBranch(true)->setRenderParents(false)->setMinDepth(2)->setMaxDepth(2); ?>