【问题标题】: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会自动重建菜单。

      【讨论】:

        猜你喜欢
        • 2019-01-22
        • 1970-01-01
        • 2021-07-15
        • 2019-04-17
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-14
        相关资源
        最近更新 更多