Zend_Navigation для отображения разных меню в макете

#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) ?>