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
と、最初のスニペットで定義されたページ コールバックがトリガーされるはずですが、代わりに 2 番目のスニペットからページ コールバックが呼び出されます。したがって、最初のスニペットの hook_alter 実装はまったく呼び出されない可能性があると想定しましたが、 $items array のこのフックにいくつかのデバッグステートメントを入れると、それらがうまく出力されるため、この関数は適切に呼び出されますが、この変更のパスのみが取得されません登録済み。
この動作の理由を教えてください。前もって感謝します