Drupal 7 如何通过hook_菜单找到哪个模块在Drupal中创建了特定的菜单项

Drupal 7 如何通过hook_菜单找到哪个模块在Drupal中创建了特定的菜单项,drupal-7,Drupal 7,如果我知道菜单项的路径,是否有快速方法找到定义特定菜单项的模块?菜单链接数组有一个名为“模块”的键,您可以使用该键知道哪个模块添加了链接 如果您正在搜索的路径没有动态部分,那么类似于db_query('SELECT mlid FROM{menu_links}其中link_path=:link_path',array(':link_path'=>'some/drupal/path')->fetchField()将帮助您找到mlid,您可以将其与菜单链接加载()一起使用,以获取完整的菜单项数组并检查

如果我知道菜单项的路径,是否有快速方法找到定义特定菜单项的模块?

菜单链接数组有一个名为“模块”的键,您可以使用该键知道哪个模块添加了链接

如果您正在搜索的路径没有动态部分,那么类似于
db_query('SELECT mlid FROM{menu_links}其中link_path=:link_path',array(':link_path'=>'some/drupal/path')->fetchField()
将帮助您找到mlid,您可以将其与
菜单链接加载()
一起使用,以获取完整的菜单项数组并检查“模块”键

不幸的是,当模块通过
hook\u menu()
添加新路径时,“module”值被设置为“system”,因此您无法通过这样做来知道哪个模块真正添加了路径

我想到的另一个解决方案是使用module_implements()来发现哪些模块正在使用hook_menu()向菜单添加路径,然后手动调用它们的hook_menu()实现,并迭代返回的值,以查看是否可以找到路径,就像这样。但这并没有考虑到其他模块可能会更改菜单的事实,除非您也手动调用hook\u menu\u alter()


如果您正在搜索的路径包含动态部分(例如node/3或user/1),则您可以使用获取路径字符串,如定义该路径的模块的hook_menu()中所示,并将其用于第二个解决方案,获取相关模块。

我想到的最简单的方法是在源代码中搜索路径。不要忘记将已知为动态的路径段替换为%