ZF2 - несколько навигационных меню с помощью помощника по просмотру навигации


Я пытаюсь использовать основную навигацию в сочетании с подменю для более конкретной навигации.

В моем макете Я вызываю помощника просмотра следующим образом:

$this->navigation('main_navigation')->menu()

И в моем представлении Я называю это так:

$this->navigation('sub_navigation')->menu()

Проблема в том, что всякий раз, когда я вызываю помощника представления navigation(), не раз, он просто выводит второй в обоих местах. Другими словами, он печатает subnav для как основной навигатор , так и меню subnav.

Моя объединенная конфигурация выглядит так:

'navigation' => array(
    'main' => array(
        'home' => array(
            'label' => 'Home',
            'route' => 'myroute',
        ),
        'somepage' => array(
            'label' => 'Me',
            'route' => 'somepage'
        )
    ),
    'sub' => array(
        'test' => array(
            'label'  => 'Test',
            'route'  => 'myroute',
            'action' => 'test'
        ),
        'other-test' => array(
            'label'  => 'Other Test',
            'route'  => 'myroute',
            'action' => 'other-test'
        )
    )
)

Как мне использовать navigation помощник просмотра, чтобы он выводил правильное меню для каждого вызова?

Author: Yes Barry, 2012-10-20

1 answers

В menu, breadcrumbs, sitemap и links помощники зарегистрированы как плагины. Если вы вызываете $this->navigation('main_navigation') в первый раз, Zend\View\Helper\Navigation создает контейнер "main_navigation". Если вы тогда позвоните menu() в первый раз создается объект Zend\View\Helper\Navigation\Menu и непосредственно вводится контейнер.

Это указывает на недостаток: если вы вызовете $this->navigation('sub_navigation') сейчас, контейнер навигации будет загружен в помощник просмотра navigation(). Когда вы затем вызываете menu(), помощник по просмотру меню уже создан. Так новый контейнер больше не вводится.

Очевидно, что это ошибка в базе кода. Есть одно быстрое решение: помощник меню также может принимать строку контейнера:

<?php echo $this->navigation()->menu('main_navigation'); ?>
<?php echo $this->navigation()->menu('sub_navigation'); ?>

Я написал об этом, и ошибка будет исправлена.

 11
Author: Jurian Sluiman, 2012-10-21 09:54:27