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
помощник просмотра, чтобы он выводил правильное меню для каждого вызова?
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'); ?>
Я написал об этом, и ошибка будет исправлена.