1

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

由于菜单导航助手和导航视图助手都使用“可见”选项来丢弃页面(通过方法accept($page)),所以这个设置在我的情况下是无用的。

从这里出发的最佳方式是什么?

4

2 回答 2

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 以确保它不会在将来造成问题。

于 2011-04-16T03:15:49.420 回答
0

好吧,经过一番修修补补,我最终选择了这个选项:

  1. 对于不想在菜单中显示的页面,我有一个额外的选项:“menuItem”。(此选项不是强制性的,可能为空/未设置)
  2. 在我的布局脚本中,我递归地遍历所有页面并$page->visible = false;在所有页面上设置false === $page->menuItem为 true
  3. 我调用菜单导航助手

因为只有在调用视图脚本(设置了 headTitle)之后才调用菜单导航帮助程序,并且在我的布局中完成了检查,所以我可以安全地将任何页面的可见属性设置为 false,而不会产生负面影响。

于 2010-07-02T04:45:49.973 回答