带有隐藏页面的Zend_Navigation

时间:2010-07-02 02:20:24

标签: php zend-framework zend-navigation

我从PHP数组加载了Zend_Navigation(但这无关紧要......)我正在使用导航菜单帮助器根据加载的导航生成菜单。有些菜单项不能出现在输出的菜单中,所以我只需在我的数组中为该页面设置“'visible'=> false”即可!但是如果访问“隐藏”菜单的URL,则findActive($ container)视图辅助方法返回一个空数组,因此不会返回容器中的页面,即使它应该(如果页面不存在) );将浏览器标题留空等等。

由于菜单导航帮助器和导航视图助手都使用'visible'选项来丢弃页面(通过方法accept($ page)),因此在我的情况下此设置是无用的。

离开这里最好的方法是什么?

2 个答案:

答案 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)

嗯,经过一些修补,我最终选择了这个选项:

  1. 我有一个额外的选项,我不想在菜单中显示该页面:“menuItem”。 (此选项不是必需的,可以为空/未设置)
  2. 在我的布局脚本中,我递归遍历所有页面并在$page->visible = false;为真的所有页面上设置false === $page->menuItem
  3. 我调用菜单导航助手
  4. 由于仅在调用视图脚本(设置了headTitle)之后调用菜单导航助手,并且在我的布局中完成检查,然后我可以安全地将任何页面的visible属性设置为false而没有负面缺点。 / p>