2010-09-23 2 views
3

У меня есть navigation.xml файл:Zend Navigation - различные навигационные блоки

<?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 никогда не отображается.

Любая идея?

ответ

1

findOneByLabel('acc_nav'); будет искать текст в <label> -tags как есть нагель acc_nav значение. Он не найдет его.

+1

спасибо, что помогло :) –

0

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

я получаю две ссылки, одна для 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); 

?> 
Смежные вопросы