我正在通过 hook_menu_alter 添加一个新路径,但是当我访问此路径时,不会触发正确的页面回调。当我检查 drupal core 中的 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 array 放置一些调试语句时,它会很好地打印它们,所以这个函数被正确调用但只有这个 alter 中的路径没有得到挂号的。
请让我知道这种行为的原因是什么。提前致谢