Zend Navigation - различные навигационные блоки - PullRequest
3 голосов
/ 23 сентября 2010

У меня есть navigation.xml файл:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <nav>
        <programm_nav>
            <label></label>
            <uri>#</uri>
            <pages>
                <all>
                    <label>test1</label>
                    <resource>default:programme</resource>
                    <module>default</module>
                    <controller>programme</controller>
                    <action>list</action>
                    <privilege>index</privilege>
                </all>                      
            </pages>
        </programm_nav>
        <acc_nav>
        <label></label>
            <uri>#</uri>
            <pages>
                <ueb>
                    <label>test2</label>
                    <resource>default:account</resource>
                    <module>default</module>
                    <controller>account</controller>
                    <action>index</action>
                    <privilege>index</privilege>
                </ueb>                      
            </pages>
        </acc_nav>
    </nav>
</config>

Этот файл конфигурации определяет два блока навигации, один programm_nav и другой acc_nav.

В моей начальной загрузке я делаю следующее:

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

$navContainer = new Zend_Navigation ( $navContainerConfig );

$view->navigation ( $navContainer )->setAcl ( $this->_acl )
->setRole ( Zend_Registry::get ( 'role' ) );

На мой взгляд, я отображаю навигацию:

$navSec = $this->navigation ()->findOneByLabel ( 'acc_nav' );
echo $this->navigation ()->menu ()->renderMenu ( $navSec );

Но независимо от того, как я определяю $navSec, я всегда отображаю programm_nav, а не другое поле. acc_nav никогда не отображается.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 23 сентября 2010

findOneByLabel('acc_nav'); будет искать текст в тегах <label>, поскольку существует значение nog acc_nav .Не найдет.

0 голосов
/ 23 сентября 2010

Я повторил это, и вот что произошло ....

Я получаю две ссылки, одну для test1 и одну для test2.

Я должен удалить код вашего ACL, потому что у меня его нет, поэтому попробуйте удалить его. Если это сработает, то вы знаете, что настройка вашего ACL неверна.

Я просто установил навигацию, содержащуюся в реестре, а затем вернул ее обратно в файл сценария. Это может быть не лучшим способом, но, учитывая документы ZF, это было мое единственное решение. Теперь это может быть лучше задокументировано.

В моем Bootstrap у меня есть

function _initNav()
{
    $navContainerConfig = new Zend_Config_Xml ( APPLICATION_PATH . '/configs/navigation.xml', 'nav');     

    $navContainer = new Zend_Navigation ( $navContainerConfig );

    Zend_Registry::set("navigation", $navContainer);        
}

И мой файл просмотра выглядит так

<?php

    $navSec = $this->navigation(Zend_Registry::get("navigation"))
        ->findOneByLabel( 'acc_nav' );

    echo $this->navigation()->menu()->renderMenu( $navSec );

?>
...