2012-06-27 2 views
0

это моя текущая ситуация:Zend: изменить структуру навигации в модуле

У меня есть xml для настройки моей общей навигационной структуры. В приложении/Bootstrap.php я добавил следующую функцию:

protected function _initViewHelpers() 
{ 
    $this->bootstrap('layout'); 
    $oLayout = $this->getResource('layout'); 
    $oView = $oLayout->getView(); 
    $oNavContainerConfig = new Zend_Config_Xml(CONFIGPATH . 'navigation.xml', 'nav'); 
    $oNavigationContainer = new Zend_Navigation($oNavContainerConfig); 

    $aCurrentRole = $this->_auth->getStorage()->read(); 
    @$oView->navigation($oNavigationContainer)->setAcl($this->_acl)->setRole($aCurrentRole->role); 
} 

и это мой текущий плагин:

class Discount_Plugin_Module extends Zend_Controller_Plugin_Abstract 
{ 
    public function routeShutdown(Zend_Controller_Request_Abstract $oRequest) 
    { 
     // init all module view controller stuff 
    } 
} 

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

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

Надеюсь, вы можете мне помочь.

Макс

ответ

1

Для того, чтобы сделать то же самое, я использую и объект, который я создал для создания меню. Вы можете найти код, который я использую здесь: http://pastebin.com/FzChbVeV. Я также использую помощник, чтобы проверить, разрешено ли пользователю видеть ссылку. Вы можете удалить строки с 102 по 109 и отредактировать строку 111, если вы не хотите ее использовать.

После этого, в bootstrap.php моего модуля, добавить следующий код для добавления пунктов меню:

$menu = ZARD_Object_Module_Multimodmenu::getInstance(); 

    $menu->id = 'submenuid'; 
    $menu->label = 'Submenu'; 
    $menu->module = 'default'; 
    $menu->controller = 'index'; 
    $menu->action = 'index'; 
    $menu->addItem(); 

    $menu->id = 'amenuitem'; 
    $menu->label = 'Menu Item'; 
    $menu->module = 'modulename'; 
    $menu->controller = 'controllername'; 
    $menu->action = 'actionname'; 
    $menu->parent = 'submenuid'; 
    $menu->addItem(); 

После этого я загружал меню в моем макете:

$menu = ZARD_Object_Module_Multimodmenu::getInstance(); 
    echo $menu->getMenu(); 
+0

Благодарю за это. В настоящее время я использую xml для моей навигационной структуры и объединяю его с моим ACL. Поэтому я могу гарантировать, что каждый пользователь получает навигацию, которой ему разрешено. Любая идея расширения вашего класса с помощью ACL и структуры xml? –

+0

Просто предложение, но здесь я не буду проходить весь код ... Вы можете использовать Zend_Registry для хранения объекта Zend_Navigation(). Где-то в бутстрапе вашего приложения: Zend_Registry-> set ('navMenu', новый Zend_Navigation()); а затем в любом месте кода вы можете загрузить меню с помощью меню $ menu = Zend_Registry-> get ('navMenu'); и добавлять страницы или редактировать их так, как вам нравится, $ menu-> addPage ('page'); например. Они предназначены для загрузки определенных вами модулей в бутстрап вашего модуля. –

Смежные вопросы