如何从另一个模块重写Drupal路径

如何从另一个模块重写Drupal路径,drupal,drupal-6,drupal-7,drupal-modules,Drupal,Drupal 6,Drupal 7,Drupal Modules,我希望我的模块覆盖另一个模块设置的路径 例如: 模块A有一个寄存器路径: $menu['node/%id/test'] = array( 'title' => 'Test', 'page callback' => 'test_A', 'page arguments' => array(1), 'access callback' => 'test_access', 'access arguments' => array(1),

我希望我的模块覆盖另一个模块设置的路径

例如:

模块A有一个寄存器路径:

$menu['node/%id/test'] = array(
    'title' => 'Test',
    'page callback' => 'test_A',
    'page arguments' => array(1),
    'access callback' => 'test_access',
    'access arguments' => array(1),
    'type' => MENU_LOCAL_TASK,
)
现在我创建模块B并注册相同的路径

$menu['node/%id/test'] = array(
    'title' => 'Test',
    'page callback' => 'test_B',
    'page arguments' => array(1),
    'access callback' => 'test_access',
    'access arguments' => array(1),
    'type' => MENU_LOCAL_TASK,
)
对该路径的每个请求

www.mysite.com/node/1/test

将路由到模块B而不是A


覆盖其他模块设置的现有路径的最佳方法是什么?

要使用alter hook,:

由于您只是修改现有的菜单路由器定义,因此只需声明要更改的部分(例如,页面回调函数名)。注意,
$items
是通过引用传递的,因此您不需要返回任何内容

function mymodule_menu_alter(&$items) {
  $items['node/%id/test']['page callback'] = 'test_B';
}