Zend_Navigation для отображения различных меню в Layout - PullRequest
2 голосов
/ 25 октября 2011

пытается распечатать около 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);

}

Отображается только содержимое ... Хотелось иметь возможность иметь разные типы меню, такие как ... show (topMenu), show (loggedinSideMenu) и т.п.

Есть идеи? Спасибо

1 Ответ

1 голос
/ 26 октября 2011

Пара вещей здесь ...

Сначала, чтобы отобразить навигацию, используйте соответствующий помощник. В вашем файле макета ...

<?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 имеет плагин для навигации , но он может обрабатывать только один контейнер, который вам не поможет. Я бы порекомендовал что-то подобное в вашем методе Bootstrap ...

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