2010-08-12 75 views
3

我初始化多個項目通過hook_menu(Drupal的6)hook_menu() - 一個意想不到的行爲(較長路徑問題)

... 
$items['webtv/block/%/playlist/edit/%'] = array(
    ... 
    'page arguments' => array('webtv_playlist_form', 2, 5), 
    ... 
); 

$items['webtv/block/%/playlist/edit/%/filter/new'] = array(
    ... 
    'page arguments' => array('webtv_playlist_param_form', 2, 5), 
    ... 
); 

$items['webtv/block/%/playlist/edit/%/filter/%'] = array(
    ... 
    'page arguments' => array('webtv_playlist_param_form', 2, 5, 7), 
    ... 
); 

return $items; 

第一項是父項,工作正常。以下兩個是子條目。最後兩個菜單條目保持無效並重定向到父頁面視圖。我通過從路徑定義中消除第一個通配符'%/'標記進行了小修改來修復它。

方式:

$items['webtv/block/%/playlist/edit/%/filter/%'] 

$items['webtv/block/playlist/edit/%/filter/%'] 

$items['webtv/block/%/playlist/edit/%/filter/new'] 

$items['webtv/block/playlist/edit/%/filter/new'] 

請通過添加通配符來幫助我解決問題。超過兩張外卡是無效的嗎?

回答

5

它不是在文檔中充分地所提到的,但對路徑的數量的限制您可以使用Drupal m的元素enu回調 - 請參閱the MENU_MAX_PARTS constant

對於Drupal 6,這個限制是七,這是你的第二和第三條路徑超出。你的修補程序將元素數減少到7,這就是爲什麼這些工作。

+0

好抓!不幸的是,在'hook_menu()'的文檔頁面中沒有提到這個限制,我認爲這是第一個知道如何實現菜單回調的細節的第一個地方。 – kiamlaluno 2010-08-12 17:17:37

+0

感謝哥們,對我來說是一件新事物。 它已被擴展到Drupal 7中的9。 – 2010-08-12 18:42:52

0

我已經解決了這個問題,除了第一個通配符外,正如我提到的那樣。但我找不到任何合乎邏輯的理由。

$items['webtv/block/%/playlist/edit/%/filter/%'] 

$items['webtv/block/%/playlist/edit/%/%'] 

$items['webtv/block/%/playlist/edit/%/filter/new'] 

$items['webtv/block/%/playlist/edit/%/new']