Zend Navigation - 各种导航块

时间:2010-09-23 09:57:03

标签: php zend-framework zend-navigation zend-acl

我有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

有什么想法吗?

2 个答案:

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

?>