【问题标题】:Zend Navigation - Rendering a submenuZend Navigation - 渲染子菜单
【发布时间】:2012-04-24 12:12:00
【问题描述】:

我在一个 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 选项来获得输出,但没有成功。有没有人支持我,我怎么能把它带到工作中?

【问题讨论】:

    标签: zend-framework zend-navigation


    【解决方案1】:

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

    $page = $this-&gt;navigation()-&gt;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>
    

    【讨论】:

    • 感谢您的回答。我在本教程link 中找到了 findOneBy('controller') 方法。如果我搜索标签而不是控制器,我实际上会获得输出。但我只得到主菜单。在我看来,Zend 没有正确读取 XML 结构。
    • 可能是xml错误。我已经更新了我的答案。请尝试修改后的xml。
    • 根据您的建议,我可以获得输出。但我还有一个问题。假设我还有一个名为“设备”的控制器,还有两个页面。如果我现在渲染我的子菜单,我会得到一个包含所有页面的菜单,其深度为一。但没有被特定的控制器分开。所以我得到了一个包含来自用户和设备的所有链接的菜单,尽管我搜索了一个特定的标签。在我看来,我的 XML 仍然有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    相关资源
    最近更新 更多