我有navigation.xml
个文件:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<nav>
<programm_nav>
<label></label>
<uri>#</uri>
<pages>
<all>
<label>test1</label>
<resource>default:programme</resource>
<module>default</module>
<controller>programme</controller>
<action>list</action>
<privilege>index</privilege>
</all>
</pages>
</programm_nav>
<acc_nav>
<label></label>
<uri>#</uri>
<pages>
<ueb>
<label>test2</label>
<resource>default:account</resource>
<module>default</module>
<controller>account</controller>
<action>index</action>
<privilege>index</privilege>
</ueb>
</pages>
</acc_nav>
</nav>
</config>
此配置文件定义了两个导航框,一个是programm_nav,另一个是acc_nav。
在我的引导程序中,我执行以下操作:
$navContainerConfig = new Zend_Config_Xml ( APPLICATION_PATH .
'/configs/navigation.xml', 'nav');
$navContainer = new Zend_Navigation ( $navContainerConfig );
$view->navigation ( $navContainer )->setAcl ( $this->_acl )
->setRole ( Zend_Registry::get ( 'role' ) );
在我看来,我显示导航:
$navSec = $this->navigation ()->findOneByLabel ( 'acc_nav' );
echo $this->navigation ()->menu ()->renderMenu ( $navSec );
但无论我如何定义$navSec
,我总是会显示programm_nav
而不会显示另一个框。永远不会显示acc_nav
。
有什么想法吗?
答案 0 :(得分:1)
findOneByLabel('acc_nav');
会在<label>
- 代码中搜索文字,因为有 acc_nav 值。它找不到它。
答案 1 :(得分:0)
我已经复制了这个,这就是发生了......
我收到两个链接,一个用于test1
,另一个用于test2
。
我必须删除ACL
的代码,因为我没有它,所以请尝试删除它。如果它然后起作用,那么您知道ACL
的设置不正确。
我只是将包含的导航设置到注册表中,然后将其放回脚本文件中。这可能不是最好的方法,但鉴于ZF文档,这是我唯一的解决方案。现在可能会更好地记录下来。
在我的Bootstrap中我有
function _initNav()
{
$navContainerConfig = new Zend_Config_Xml ( APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$navContainer = new Zend_Navigation ( $navContainerConfig );
Zend_Registry::set("navigation", $navContainer);
}
我的视图文件看起来像这样
<?php
$navSec = $this->navigation(Zend_Registry::get("navigation"))
->findOneByLabel( 'acc_nav' );
echo $this->navigation()->menu()->renderMenu( $navSec );
?>