2012-04-24 4 views
0

я определяю все мои страницы в файле XML, как в следующем:Zend Navigation - Rendering подменю

<?xml version="1.0" encoding="UTF-8"?> 
<configdata> 
<nav> 
    <dashboard> 
     <label>Dashboard</label> 
     <module>default</module> 
     <controller>dashboard</controller> 
     <action>index</action> 
     <title>Die Schaltzentrale</title> 
    </dashboard> 
    <user> 
     <label>User</label> 
     <module>default</module> 
     <controller>user</controller> 
     <action>index</action> 
     <title>Verwaltung der Benutzer</title> 

     <userList>     
      <module>default</module> 
      <controller>user</controller> 
      <action>index</action> 
      <label>Userliste anzeigen</label> 
     </userList> 
     <newUser> 
      <label>User anlegen</label> 
      <module>default</module> 
      <controller>user</controller> 
      <action>new</action> 
     </newUser> 
     <editUser> 
      <label>User bearbeiten</label> 
      <module>default</module> 
      <controller>user</controller> 
      <action>edit</action> 
     </editUser> 
    </user> 
</nav> 
</configdata> 

В моей начальной загрузки установки I моей навигации, как это:

protected function _initNavigation() 
    { 
     $this->bootstrap('layout'); 
     $layout = $this->getResource('layout'); 
     $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','nav'); 
     $view = $layout->getView(); 
     $navigation = new Zend_Navigation($config); 
     $view->navigation($navigation); 
     Zend_Registry::set('Zend_Navigation',$navigation); 
    } 

Эта установка позволяет мне сделать мое основное меню следующими строками:

$partial = array('menu.phtml', 'default'); 
$this->navigation()->menu()->setPartial($partial); 
echo $this->navigation()->menu()->render(); 

Пока все хорошо. Моя проблема заключается в том, чтобы сделать конкретное подменю. Предположим, я хочу отобразить меню со всеми действиями пользовательского контроллера. Я попытался сделать это с помощью:

$page = $this->navigation()->findOneBy('controller','user'); 
echo $this->navigation()->menu()->renderMenu($page); 

Но у меня не было выхода. Я также попытался получить результат, установив параметр minDepth или maxDepth без каких-либо успехов. Кто-нибудь задерживает меня, как я могу заставить его работать?

ответ

2

Ваш подход очень близок. Измените строку findOneBy на:

$page = $this->navigation()->findOneBy('label','User');

Это будет получать все страницы, на странице пользователя.

Я не думаю, что можно найти страницу с помощью контроллера.

[править]

Я изменил свой XML, добавив раздел «страниц» под пользователя. Это говорит Zend Navigation, что userList, newUser и editUser являются подстраницами пользователя:

<?xml version="1.0" encoding="UTF-8"?> 
<configdata> 
<nav> 
    <dashboard> 
     <label>Dashboard</label> 
     <module>default</module> 
     <controller>dashboard</controller> 
     <action>index</action> 
     <title>Die Schaltzentrale</title> 
    </dashboard> 
    <user> 
     <label>User</label> 
     <module>default</module> 
     <controller>user</controller> 
     <action>index</action> 
     <title>Verwaltung der Benutzer</title> 
     <pages> 
      <userList> 
       <module>default</module> 
       <controller>user</controller> 
       <action>index</action> 
       <label>Userliste anzeigen</label> 
      </userList>     
      <newUser> 
       <label>User anlegen</label> 
       <module>default</module> 
       <controller>user</controller> 
       <action>new</action> 
      </newUser> 
      <editUser> 
       <label>User bearbeiten</label> 
       <module>default</module> 
       <controller>user</controller> 
       <action>edit</action> 
      </editUser> 
     </pages> 
    </user> 
</nav> 
</configdata> 
+0

Спасибо за ваш ответ. Я нашел подход findOneBy ('controller') в этом учебнике [ссылка] (http://www.brandonsavage.net/making-zend_navigation-useful/). Если я ищу метку вместо контроллера, я на самом деле получаю вывод. Но я получаю только главное меню. Мне кажется, что Zend неправильно читает в структуре XML. – Benni

+0

Возможно, что xml неверен. Я обновил свой ответ. Попробуйте изменить xml. –

+0

С вашим предложением я могу получить выход. Но у меня все еще есть одна проблема. Предположим, у меня есть еще один контроллер под названием «устройство» с двумя страницами. Если я создам свое подменю, теперь я получаю меню со всеми страницами, которые имеют глубину в один. Но не разделяется конкретным контроллером. Поэтому я получаю меню со всеми ссылками от пользователя и устройства, хотя я ищу конкретную метку. Мне кажется, что с моим XML все еще что-то не так. – Benni

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