如何从另一个模块覆盖Drupal路径

时间:2012-08-06 22:48:29

标签: 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),
    '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.

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

1 个答案:

答案 0 :(得分:8)

您想使用alter hook hook_menu_alter()

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

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