2

当我在 Drupal 中启用一个新菜单(例如,mymodule)时,Drupal 应该能够从 mymodule_menu (hook_menu) 中获取菜单项,处理这些项目并将菜单项插入到 menu_router 和 menu_links 表中。

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

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

有人遇到过同样的问题吗?如何解决这个问题?

先感谢您。

4

2 回答 2

1

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

您的 hook_menu 代码中一定有错误。可以贴吗

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

cache_clear_all()
menu_router_build()

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

于 2010-06-09T17:26:21.047 回答
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 将自动重建菜单。

于 2010-06-17T03:20:23.077 回答