#php #model-view-controller #zend-framework #zend-navigation
#php #модель-представление-контроллер #zend-framework #zend-навигация
Вопрос:
пытаюсь распечатать около 3 меню на ZF. В настоящее время я даже не могу его вытащить. Не совсем уверен, что происходит и почему нет упоминания о том, как заставить его работать в руководстве.
Итак, это мой layout.phtml:
<body>
<?php echo $this->layout()->nav; ?>
<?php echo $this->layout()->content; ?>
</body>
Не совсем уверен, что именно так я должен создавать навигацию, но я планирую в конечном итоге изменить маршруты для локализации:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<nav>
<register>
<label>Register</label>
<controller>register</controller>
<action>index</action>
</register>
</nav>
</config>
У меня есть это в моем загрузчике:
protected function _initNavigation()
{
// Navigation
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$container = new Zend_Navigation($config);
}
Отображается только содержимое… Хотел иметь возможность иметь разные типы меню, такие как… показать (topMenu), показать (loggedinSideMenu) что-то в этом роде
Есть идеи? Спасибо
Ответ №1:
Здесь есть пара вещей…
Во-первых, для отображения навигации используйте соответствующий помощник. В вашем файле макета…
<?php echo $this->navigation()->menu()
->renderMenu($zendNavigationContainer) ?>
См. http://framework.zend.com/manual/en/zend.navigation.introduction.html и http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.navigation
Во-вторых, Zend_Application
имеет плагин ресурсов для навигации, однако он способен обрабатывать только один контейнер, что на самом деле вам не поможет. Я бы рекомендовал что-то подобное в вашем методе начальной загрузки…
protected function _initNavigation()
{
// get config and create containers as before
// bootstrap layout resource and retrieve it
$this->bootstrap('layout');
$layout = $this->getResource('layout');
// add containers as layout properties
$layout->topMenu = $topMenuContainer;
$layout->loggedInSideMenu = $sideMenuContainer;
}
Затем в вашем макете
<!-- top menu -->
<?php echo $this->navigation()->menu()
->renderMenu($this->layout()->topMenu) ?>
<!-- side menu -->
<?php echo $this->navigation()->menu()
->renderMenu($this->layout()->loggedInSideMenu) ?>