2010-07-02 114 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,而没有负面的缺点。