我正在通过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的路径没有得到注册
请让我知道这种行为的原因。提前致谢
答案 0 :(得分:0)
最好的解决方案是用一个或两个部分截断你的路径!或者您可以重新定义MENU_MAX_PARTS
。但为此,你需要修改核心,我确定你不想这样做,对吗?