0

我在一个 XML 文件中定义我的所有页面,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<nav>
    <dashboard>
        <label>Dashboard</label>
        <module>default</module>
        <controller>dashboard</controller>
        <action>index</action>
        <title>Die Schaltzentrale</title>
    </dashboard>
    <user>
        <label>User</label> 
        <module>default</module>
        <controller>user</controller>   
        <action>index</action>
        <title>Verwaltung der Benutzer</title>

        <userList>                  
            <module>default</module>
            <controller>user</controller>   
            <action>index</action>
            <label>Userliste anzeigen</label>
        </userList>
        <newUser>
            <label>User anlegen</label> 
            <module>default</module>
            <controller>user</controller>   
            <action>new</action>
        </newUser>
        <editUser>
            <label>User bearbeiten</label>  
            <module>default</module>
            <controller>user</controller>   
            <action>edit</action>
        </editUser>
    </user>
</nav>  
</configdata>

在我的引导程序中,我像这样设置导航:

    protected function _initNavigation()
    {
        $this->bootstrap('layout');
        $layout = $this->getResource('layout');
        $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','nav');
        $view = $layout->getView();
        $navigation = new Zend_Navigation($config);
        $view->navigation($navigation); 
        Zend_Registry::set('Zend_Navigation',$navigation);
    }

此设置使我能够使用以下几行呈现我的主菜单:

$partial = array('menu.phtml', 'default');
$this->navigation()->menu()->setPartial($partial);
echo $this->navigation()->menu()->render();

到目前为止,一切都很好。我现在的问题是渲染一个特定的子菜单。假设我想渲染一个包含用户控制器所有操作的菜单。我试图用以下方式渲染它:

$page = $this->navigation()->findOneBy('controller','user');
echo $this->navigation()->menu()->renderMenu($page);

但是我没有输出。我还尝试通过设置 minDepth 或 maxDepth 选项来获得输出,但没有成功。有没有人支持我,我怎么能把它带到工作中?

4

1 回答 1

2

你的方法非常接近。将 findOneBy 行更改为:

$page = $this->navigation()->findOneBy('label','User');

这将获取用户页面下的所有页面。

我认为控制器不可能找到页面。

[编辑]

我通过在用户下添加“页面”部分修改了您的 xml。这告诉 Zend Navigation userList、newUser 和 editUser 是 user 的子页面:

<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<nav>
    <dashboard>
        <label>Dashboard</label>
        <module>default</module>
        <controller>dashboard</controller>
        <action>index</action>
        <title>Die Schaltzentrale</title>
    </dashboard>
    <user>
        <label>User</label> 
        <module>default</module>
        <controller>user</controller>   
        <action>index</action>
        <title>Verwaltung der Benutzer</title>
        <pages>
            <userList>
                <module>default</module>
                <controller>user</controller>   
                <action>index</action>
                <label>Userliste anzeigen</label>
            </userList>                
            <newUser>
                <label>User anlegen</label> 
                <module>default</module>
                <controller>user</controller>   
                <action>new</action>
            </newUser>
            <editUser>
                <label>User bearbeiten</label>  
                <module>default</module>
                <controller>user</controller>   
                <action>edit</action>
            </editUser>
        </pages>
    </user>
</nav>  
</configdata>
于 2012-04-24T14:11:45.013 回答