Zend framework Zend:修改模块中的导航结构

Zend framework Zend:修改模块中的导航结构,zend-framework,module,Zend Framework,Module,这是我目前的情况: 我有一个xml来配置我的通用导航结构。 在application/Bootstrap.php中,我添加了以下函数: protected function _initViewHelpers() { $this->bootstrap('layout'); $oLayout = $this->getResource('layout'); $oView = $oLayout->getView(); $oNavContainerConf

这是我目前的情况:

我有一个xml来配置我的通用导航结构。 在application/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
    }
}
我想在运行时修改我的导航。我想添加模块特定的导航项

我不知道如何将导航结构从模块中分离出来

希望你能帮助我


Max

为了完成同样的任务,我使用我创建的和对象来构建菜单。您可以在此处找到我使用的代码:。我还使用一个助手来检查是否允许用户查看链接。如果不想使用,可以删除第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();

谢谢你。目前,我正在使用xml作为导航结构,并将其与ACL相结合。因此,我可以确保每个用户都能获得允许的导航。你知道如何用ACL和xml结构扩展你的类吗?只是一个建议,但我不会在这里通读全部代码。。。您可以使用Zend_注册表保存Zend_Navigation()对象。应用程序引导程序中的某个地方:Zend_注册表->set('navMenu',new Zend_Navigation());然后,在代码中的任何地方,都可以使用$menu=Zend_Registry->get('navMenu')加载菜单;并添加页面或按您喜欢的方式编辑,$menu->addPage('page');例如它们的关键是在模块的引导中加载特定于模块的选项。