2012-10-15 120 views
3

我已經發布了編輯我的問題。在工作時,我注意到這個問題很容易簡化。 我需要我的子菜單的自定義格式,所以我必須使用部分。但隨後出現問題。Zend_Navigation渲染部分的子菜單

在下面的代碼顯示不正確的電平(0):

  echo $this->navigation()->menu() 
       ->setMinDepth(1) 
       ->setMaxDepth(1) 
       ->setRenderParents(false) 
       ->setOnlyActiveBranch(true) 
       ->renderPartial(null, array('partials/menu.phtml', 'default')); 

在下面的代碼顯示正確的菜單級(1)

  echo $this->navigation()->menu() 
       ->setMinDepth(1) 
       ->setMaxDepth(1) 
       ->setRenderParents(false) 
       ->setOnlyActiveBranch(true) 
       ->render(); 

任何想法?請各位。我將不勝感激任何幫助!

編輯

我的泛音/ menu.phtml:

foreach ($this->container as $page) 
{ 
    $active = $page->isActive(); 
    echo '<div class="item">'; 
     echo '<a class="'. ($active ? 'active' : '') .'" href="' . $this->baseUrl($page->getHref()) . '">' . $page->getLabel() . '</a>'; 
    echo '</div>'; 
} 

編輯2

我Zend_Navigation的理解是,首先製備容器和比把它通過局部。

  $nav = $this->navigation()->menu()->setOnlyActiveBranch(true)->getContainer(); 
     echo $this->navigation()->menu()->renderPartial($nav, array('/partials/menu.phtml', 'default')); 

路過時anywehere沒用什麼是設置集合{最小值/最大值}深度,在容器parentRendering點?

+0

你實際上做了些什麼?菜單助手的所有選項實際上都不會傳遞給部分,您只需獲得導航容器。 –

+0

部分進行所有格式化。我不能使用UL標籤,需要定製html標記。我認爲部分只是改變渲染相對於minDepth,maxDepth,renderParents等的任何想法如何結合它?我發佈了部分示例。 – dbq

回答

1

我用這個代碼:

<?=$this->navigation()->menu()->renderPartial(null, 'shared/menu.phtml')?> 

你應該通過true的方法$page->isActive(true),這樣也起到深入。

在部分

foreach ($this->container as $page) { 
    $active = $page->isActive(true); 
    if (count($page->getPages())) { 
    foreach ($page->getPages() as $subPage) { 
     $active = $subPage->isActive(true); 
     echo '<div class="item">'; 
     echo '<a class="'. ($active ? 'active' : '') .'" href="' . $this->baseUrl($subPage->getHref()) . '">' . $subPage->getLabel() . '</a>'; 
     echo '</div>';  
    } 
    } 
} 

第二的foreach之前,你可以添加一個檢查是否以及何時顯示子菜單。

我的2分。

編輯

試試這個:

$partial = array('partials/menu.phtml', 'default'); 
echo $this->navigation()->menu() 
    ->setMinDepth(1) 
    ->setMaxDepth(1) 
    ->setRenderParents(false) 
    ->setOnlyActiveBranch(true) 
    ->setPartial($partial) 
    ->render(); 
+0

還是不太瞭解你。你會擴大你的意思,將過濾子菜單的可能性?我不知道該怎麼做。花了2天時間。請看看我的第二個編輯。 – dbq

+0

看我的編輯! – JellyBelly

+0

我用它與我的部分,它不起作用。它顯示零水平,就像設置深度沒有影響一樣。 – dbq

0

跨越這一點的同時尋找答案,以同樣的問題來了。查看了Zend_View_Helper_Navigation_Menu的代碼後,它看起來並不像任何視圖助手選項被傳遞給視圖部分,儘管我不明白他們爲什麼不能......(在ZF 1.12中看一看第736行Zend_View_Helper_Navigation_Menu,唯一通過的就是容器本身,options數組可以很容易地與它一起傳遞,或者容器預過濾,可能值得向ZF提交功能請求)

這些選項純粹是一種方式用默認的renderMenu方法過濾Zend_Navigation_Container進行渲染。正如你所說,似乎你可以先過濾容器中,然後把它當作renderPartial方法的第一個參數

0

在你的主視圖完成同樣的事情

查找子菜單的容器位於導航配置。然後使用所述部分回顯此容器。

$pages = $this->navigation()->findOneBy('label', 'Label of your submenu'); 
echo $this->navigation()->menu()->renderPartial($pages,module/partials/menu.phtml'); 

在部分(模塊/分音/ menu.phtml)

自定義。本示例遍歷所選容器的頂級頁面。

foreach ($this->container as $page) { 
echo $this->navigation()->menu()->htmlify($page) . PHP_EOL; 
}