使用Zend Navigation视图助手渲染活动分支的子级

时间:2011-11-03 16:55:40

标签: zend-framework zend-navigation

我要问的是与此issue相似,但尚未解决。

我正在尝试创建一个好的子菜单解决方案,但我似乎无法让Zend_View_Helper_Navigation_Menu与我合作。

这是我的XML导航配置:

<configdata>
    <nav>
        <index>
            <label>Index</label>
            <uri>/</uri>
            <pages>

                <home>
                    <label>home</label>
                    <uri>/</uri>
                </home>

                <about>
                    <label>about</label>
                    <uri>/about</uri>
                </about>

                <works>
                    <label>works</label>
                    <uri>/works</uri>
                    <pages>
                        <music>
                            <label>music</label>
                            <uri>/works/music</uri>
                        </music>
                    </pages>
                </works>
                <posts>
                    <label>posts</label>
                    <uri>/posts</uri>
                </posts>                
                <admin>
                    <label>admin</label>
                    <uri>/admin</uri>
                    <pages>
                        <login>
                            <label>log in</label>
                            <uri>/admin/login</uri>
                        </login>
                        <settings>
                            <label>settings</label>
                            <uri>/admin/settings</uri>
                        </settings>
                        <register>
                            <label>register</label>
                            <uri>/admin/register</uri>
                        </register>
                        <logout>
                            <label>log out</label>
                            <uri>/admin/logout</uri>
                        </logout>
                    </pages>
                </admin>

            </pages>
        </index>
    </nav>
</configdata>

以下是我布局中的相关代码:

echo $this->navigation()->menu()->renderMenu(
    null, 
    array(
        'minDepth' => 2, 
        'maxDepth' => 2, 
        'onlyActiveBranch' => true
    )
);

当我导航到'admin'时,我看不到子菜单。如果我将minDepth更改为1,我可以看到该菜单及其子项在源中处于“活动状态”。当minDepth设置为2时,为什么不呈现它们?

我为此做了一个解决方法,但我必须将其复制/粘贴到每个控制器中才能工作(因为我需要请求对象才能执行此操作):

    $pages = $this->view->navigation()->current()->getPages();
    foreach ($pages as $page) {
        $this->_setChildrenInvisible($page);
    }

_setChildrenInvisible()函数:

private function _setChildrenInvisible(Zend_Navigation_Container $container) {
    foreach ($container as $child) {
        if ($child->hasChildren()) {
            $this->_setChildrenInvisible($child);
        }
        $child->setVisible(false);
    }
}

我只是想让admin的孩子在子菜单中渲染。有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

在布局中,在renderMenu方法中,renderParents属性应设置为false

echo $this->navigation()->menu()->renderMenu(
    null, 
    array(
        'minDepth' => 2, 
        'maxDepth' => 2, 
        'onlyActiveBranch' => true, 
        'renderParents' => false
    )
);

答案 1 :(得分:0)

我知道这是一个古老的问题,但对于一些人来说,这仍然是有意义的。在ZF2中,它可以使用以下方式与ZF1中相同:

echo $this->navigation()->menu()->renderSubMenu();