hook_menu() - 一个意外的行为(更长的路径问题)

时间:2010-08-12 08:55:22

标签: drupal drupal-6 drupal-modules drupal-hooks

我正在通过hook_menu(Drupal 6)初始化一些项目

...
$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']

请添加外卡,帮助我解决出错的问题?超过两张外卡是无效的吗?

2 个答案:

答案 0 :(得分:5)

文档中没有充分提及,但是可以用于Drupal菜单回调的路径元素数量有限 - 请参阅the MENU_MAX_PARTS constant

对于Drupal 6,此限制为7,超出了你的第二和第三条路径。这两个修复都将元素数量减少到7,这就是为什么这些工作。

答案 1 :(得分: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']