【问题标题】:Zend Navigation Find Page and Render Menu with its SubpagesZend Navigation 查找页面和渲染菜单及其子页面
【发布时间】:2013-04-26 03:17:39
【问题描述】:

我正在为一个具有 4 个不同访问级别的站点组合 Zend Navigation:Guest、Member1、Member2 和 Admin。

我的导航 XML 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <nav>
        <default>
            <label>Home</label>
            <controller>index</controller>
            <action>index</action>
            <resource>index</resource>
            <privilege>index</privilege>

            <pages>
                <home>
                    ...
                </home>
                <signin>
                    ...
                </signin>
                <signup>
                    ...
                </signup>
            </pages>
        </default>

        <member1>
            <label>Member1 Main</label>
            <controller>member1</controller>
            <action>index</action>
            <resource>member1</resource>
            <privilege>index</privilege>

            <pages>
                <dashboard>
                    ...
                </dashboard>
                <settings>
                    <label>Settings</label>
                    <controller>auth</controller>
                    <action>editpassword</action>
                    <resource>auth</resource>
                    <privilege>editpassword</privilege>
                    <class>settings</class>
                    <title>User settings</title>

                    <pages>
                        <account>
                            ...
                        </account>
                        <logout>
                            ...
                        </logout>
                    </pages>
                </settings>
            </pages>
        </member1>

        <member2>
            <label>Member2 Main</label>
            <controller>member2</controller>
            <action>index</action>
            <resource>member2</resource>
            <privilege>index</privilege>

            <pages>
                <dashboard>
                    ...
                </dashboard>
                <profile>
                    ...
                </profile>
                <settings>
                    <label>Settings</label>
                    <controller>auth</controller>
                    <action>editpassword</action>
                    <resource>auth</resource>
                    <privilege>editpassword</privilege>
                    <class>settings</class>

                    <pages>
                        <account>
                            ...
                        </account>
                        <logout>
                            ...
                        </logout>
                    </pages>
                </settings>
            </pages>
        </member2>

        <admin>
            <label>Dashboard</label>
            <controller>admin</controller>
            <action>index</action>
            <resource>admin</resource>
            <privilege>index</privilege>

            <pages>
                <dashboard>
                    ...
                </dashboard>
                <logout>
                    ...
                </logout>
            </pages>
        </admin>

    </nav>
</config>

由于我使用子菜单并希望顶部菜单保持一致,我想使用 Zend 的 findBy 功能来定位当前用户的状态并显示该菜单。这样做是这样的:

if ( $this->user ) {
    $submenu = $this->navigation()->findOneByLabel('Member1 Main');
    $options = array(
        'ulClass'               => 'navigation',
        'renderParents'         => true,
        'minDepth'              => null,
        'maxDepth'              => null
    );
    echo $this->navigation()->menu()->renderMenu($submenu, $options);
} else {
    echo $this->navigation()->menu()->setUlClass('navigation')->setOnlyActiveBranch(true)->setMinDepth(1)->setMaxDepth(1);
}

我的 Nav 引导位非常通用,如下所示:

function _initNavigation()
{
    $this->bootstrap('layout');
    $layout = $this->getResource('layout');
    $view = $layout->getView();

    $navConfig = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
    $navigation = new Zend_Navigation($navConfig);

    $front     = Zend_Controller_Front::getInstance();
    $myPlagin  = $front->getPlugin('My_Controller_Plugin_Acl');

    $view->navigation($navigation)->setAcl($myPlagin->getMyAcl())
                                 ->setRole($myPlagin->getMyUserRole());
}

现在,我可以显示“Member1 Main”页面,但它只显示一个页面,但我需要呈现的是该页面的整个子菜单。似乎 findOneByLabel 只查找该特定页面而不是其后代。有没有办法拉出整个子菜单?

谢谢。

【问题讨论】:

  • 您可以添加您预期结果的屏幕截图吗?我不确定你想要完成什么。

标签: zend-framework navigation acl findby


【解决方案1】:

原来我必须使用 findAllByLabel 来获得预期的结果。谢谢@RockyFord

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多