2010-06-09 208 views
2

当我在Drupal中启用一个新菜单(例如,mymodule)时,Drupal应该能够从mymodule_menu(hook_menu)获取菜单项,处理项目并插入菜单项menu_router和menu_links表。Drupal 6无法构建菜单路由器和链接

但是,我的Drupal没有这样做。每当我启用一个模块(由我编写或由他人贡献的模块或核心模块)时,Drupal似乎并没有获得新的信息。在新启用的模块中定义的菜单项不会被处理并插入到Drupal的菜单系统中。这意味着新启用的模块无法工作 - 因为它无法访问。

我确实通过手动将新模块的菜单项信息插入到menu_router和menu_links表中,并且新菜单开始工作。但是,如果我每次启用模块都必须这样做,这是一场噩梦。

任何人都有过同样的问题?如何解决这个问题?

预先感谢您。

回答

1

我不会使用任何SQL来与菜单表交互,如果您编辑错误的记录,可能会发生一些令人讨厌的事情。

您的hook_menu代码中必须有错误。你可以粘贴它吗?

此外,如果您正在开发具有菜单条目的模块,我发现它的方便调用mymodule_init的加时/删除链接内()这两个函数:

cache_clear_all() 
menu_router_build() 

这将刷新所有高速缓存并重建菜单和任何调用hook_menu。如果它之后没有出现,那么你的代码有一个错误。我想看看它。

0

你没有报告你在使用哪个Drupal版本,但在Drupal 6中,hook_menu()的实现不会被调用,如果不是在某些场合(如安装模块或执行模块更新时) )。

如果模块改变菜单的回调,但它不是一个更新来执行,你可以添加包含以下代码的更新功能:

// Change the name of the function to match the module name. 
// Change the update number to the correct one for your case. 
function custom_module_update_6201() { 
    if (!variable_get('menu_rebuild_needed', FALSE)) { 
    variable_set('menu_rebuild_needed', TRUE); 
    } 
} 

的变量是从的index.php检查,如果它的值是TRUE,那么Drupal会自动重建菜单。