2010-08-16 38 views
2

我渲染一個Zend導航對象的頂級元素在一個地方是這樣的:渲染Zend的導航活躍的分支沒有頂級

echo $this->navigation()->menu()->setMaxDepth(0); 

如何呈現導航樹從第二級上下來的活躍分支?我已經嘗試創建一個部分循環$this->container對象,但我不知道如何確定我的當前項目是否爲活動分支。一旦我確定它是活動分支我該如何渲染菜單?我是否以這種艱難的方式來做這件事,並且錯過了一些明顯的東西?

謝謝!


UPDATE:

我接受的解決辦法,因爲這是我用過的東西,但我也想提供的答案,我的實際問題,以供參考。 ($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然後可以用來渲染子菜單。

+0

其中$ branch ['pages']中的索引'pages'來自哪裏? – Sejanus 2011-04-01 14:57:53

回答

4

我做了類似的事情。我的主要導航與這樣的事情處理...

$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 
     } 
     } 
    } 
    } 
} 

我希望有點幫助。

+1

我錯過的關鍵是'isActive()'函數的'true'值。它使函數遞歸。 – Sonny 2010-08-20 15:53:49

+1

@Sonny,總是很簡單,不是嗎?! – allnightgrocery 2010-08-20 16:28:28

5

如果我收到了你的問題的權利,這是我要做的事:

print $this->navigation()->menu()->renderMenu(null, array(
    'minDepth' => 1, 
    'maxDepth' => 1, 
    'onlyActiveBranch' => true, 
    'renderParents' => false)); 

只渲染當前活動菜單的子菜單。

+0

確實呈現活動菜單的子菜單,但我總想從第二層開始渲染。 – Sonny 2011-04-04 13:22:51

0

我做這種方式:

<?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); ?> 
+0

如果您位於第三級的頁面上,會發生什麼情況? – Sonny 2011-12-19 14:06:03

+0

選中此項,我需要一個三級菜單,但每個級別都是分開的。所以我做的是: ' <! - 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); ?> ' 我目前正在測試這個,它似乎工作正常,即使在3級活動。 – 2011-12-26 06:46:49