2010-08-12 72 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']