我从PHP数组加载了Zend_Navigation(但这无关紧要......)我正在使用导航菜单帮助器根据加载的导航生成菜单。有些菜单项不能出现在输出的菜单中,所以我只需在我的数组中为该页面设置“'visible'=> false”即可!但是如果访问“隐藏”菜单的URL,则findActive($ container)视图辅助方法返回一个空数组,因此不会返回容器中的页面,即使它应该(如果页面不存在) );将浏览器标题留空等等。
由于菜单导航帮助器和导航视图助手都使用'visible'选项来丢弃页面(通过方法accept($ page)),因此在我的情况下此设置是无用的。
离开这里最好的方法是什么?
答案 0 :(得分: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,以确保它在将来不会出现问题。
答案 1 :(得分:0)
$page->visible = false;
为真的所有页面上设置false === $page->menuItem
由于仅在调用视图脚本(设置了headTitle)之后调用菜单导航助手,并且在我的布局中完成检查,然后我可以安全地将任何页面的visible属性设置为false而没有负面缺点。 / p>