【问题标题】:Drupal 6 fails to build menu router and linksDrupal 6 无法构建菜单路由器和链接
【发布时间】:2010-06-09 16:07:00
【问题描述】:
当我在 Drupal 中启用一个新菜单(例如,mymodule)时,Drupal 应该能够从 mymodule_menu (hook_menu) 中获取菜单项,处理这些项并将菜单项插入到 menu_router 和 menu_links 表中。
但是,我的 Drupal 没有这样做。每次我启用一个模块(由我编写或其他人贡献的模块或核心模块)时,Drupal 似乎都没有获得新信息。在新启用的模块中定义的菜单项不会被处理并插入到 Drupal 的菜单系统中。这意味着新启用的模块没有机会工作——因为它无法访问。
我确实通过手动将新模块的菜单项信息插入到 menu_router 和 menu_links 表中来解决此问题,并且新菜单开始工作。但是,如果我每次启用模块时都必须这样做,那将是一场噩梦。
有人遇到过同样的问题吗?如何解决这个问题?
提前谢谢你。
【问题讨论】:
标签:
drupal
menu
hyperlink
router
building
【解决方案1】:
我不会使用任何 SQL 与菜单表进行交互,如果您编辑错误的记录可能会发生一些令人讨厌的事情。
您的 hook_menu 代码中一定有错误。可以贴吗?
另外,如果您正在开发一个具有菜单条目的模块,我发现在添加/删除链接时在 mymodule_init() 中调用这两个函数很方便:
cache_clear_all()
menu_router_build()
这将刷新所有缓存并重建菜单和任何调用 hook_menu 的内容。如果之后没有出现,那么您的代码有错误。我想看看。
【解决方案2】:
您没有报告您使用的是哪个 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会自动重建菜单。