路径没有通过drupal 6中的hook_menu_alter注册

时间:2013-03-17 11:09:23

标签: drupal menu hook alter

我正在通过hook_menu_alter添加新路径但是当我访问此路径时,不会触发正确的页面回调。当我检查drupal核心中的menu_execute_active_handler函数选择了router_item时,它会输出缺少最后1个路径参数的父路径。 这就是我的menu_alter。

function mainlist_slot_menu_alter(&$items) {
   $items['user/%user/categories/bird/list/%/%ctools_js/%']  = array(
     'title'    => 'Mainlist slot fulfiller',
     'page callback'  => 'mainlist_slot',
     'page arguments' => array(1, 5, 6,7),
     'access callback'=> 'mainlist_slot_access',
     'access arguments' => array(1,5,7)
  );
}

其他模块也实现了hook_menu_alter

function mainlist_menu_alter(&$items){
 $items['user/%user/categories/bird/list/%mainlist'] = array(
  'title callback' => 'mainlist_title',
  'title arguments'=> array(5),
  'description'    => 'Page showing mainlist for referenced user',
  'page callback' =>'mainlist_view',
  'page arguments' => array(5),
  'load arguments' => array(1),
  'access callback' => 'mainlist_access',
  'access arguments' => array(1,5),
  'type' => MENU_CALLBACK,
 )
);

现在当我访问路径user/1/categories/bird/list/1/nojs/91时 它应该触发第一个片段中定义的页面回调,而是从第二个片段调用页面回调。所以我假设第一个代码段中的hook_alter实现可能根本不会被调用,但是当我在$ items数组的这个钩子中放入一些调试语句时,它会很好地打印它们,所以这个函数被正确调用但是只有这个alter的路径没有得到注册

请让我知道这种行为的原因。提前致谢

1 个答案:

答案 0 :(得分:0)

最好的解决方案是用一个或两个部分截断你的路径!或者您可以重新定义MENU_MAX_PARTS。但为此,你需要修改核心,我确定你不想这样做,对吗?