2010-07-02 91 views
1

我有我的Zend_Navigation從PHP數組加載(但這是無關的...),我使用導航菜單助手生成基於加載導航菜單。某些菜單項不得出現在輸出菜單中,因此我只需在該頁面的數組中設置「'visible'=> false」,然後您就可以開始了!但是,如果訪問'隱藏'菜單的URL,findActive($ container)視圖幫助器方法返回一個空數組,因此容器中的頁面不會被返回,即使它應該(如果頁面不存在);留下瀏覽器標題爲空等。Zend_導航與隱藏頁

由於菜單導航助手和導航視圖幫助程序都使用「可見」選項丟棄頁面(通過方法accept($ page)),所以此設置對我無用案件。

什麼是最好的方式從這裏?

回答

2

我其實剛剛發現了一個更優雅的解決方案。只需將findActive()調用之前添加以下行,它會返回一個無形的頁面上,如果選擇:

$this->navigation()->setRenderInvisible(true); 

例如,下面的代碼:

Zend_Debug::dump($this->navigation() 
         ->findActive($this->navigation()->getContainer())); 
$this->navigation()->setRenderInvisible(true); 
Zend_Debug::dump($this->navigation() 
         ->findActive($this->navigation()->getContainer())); 

產地:

array(0) { 
} 
array(2) { 
    ["page"] => object(Zend_Navigation_Page_Mvc)#33 (24) { 
    ... PAGE INFORMATION ... 
    } 
    ["depth"] => int(0) 
} 

好奇的是,它不影響菜單的渲染 - 即隱藏頁面仍然隱藏。儘管如此,我還是建議將其設置爲false,以確保它在將來不會造成問題。

+0

是的,這很好奇......我看了ZF API,我不記得看到這種方法。不幸的是,我沒有辦法檢查這是否適用於我的情況,因爲這個項目現在已經進入了積極的生產階段。不過謝謝您的分享,這是一種更乾淨的做事方式。 – 2011-04-16 11:23:26

0

很好,有些修修補補之後,我最終選擇了這個選項:

  1. 我有,我不希望在我的菜單顯示的頁面多了一種選擇:「菜單項」。 (此選項不是強制性的,可以爲null /解除警戒)
  2. 在我的佈局的劇本,我重複遞歸遍歷所有的頁面和對false === $page->menuItem是真的
  3. 我調用菜單導航幫助
所有頁面設置 $page->visible = false;

因爲只有在調用了視圖腳本(設置了headTitle)之後才調用菜單導航助手,並且檢查是在我的佈局中完成的,那麼我可以安全地將任何頁面的visible屬性設置爲false,而沒有負面的缺點。