Zend Navigation Найти страницу и визуализировать меню с ее подстраницами

Я собираю Zend Navigation для сайта с 4 различными уровнями доступа: 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);
}

Мой бит Bootstrap для 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 ищет только эту конкретную страницу, а не ее потомки. Есть ли способ вытащить все подменю?

Спасибо.


person sbay    schedule 16.04.2013    source источник
comment
Можете ли вы добавить скриншоты ожидаемого результата? Я не уверен, чего вы хотите добиться.   -  person Rolando Isidoro    schedule 24.04.2013


Ответы (1)


Оказывается, мне пришлось использовать findAllByLabel, чтобы получить ожидаемый результат. Спасибо @RockyFord

person sbay    schedule 25.04.2013