代码之家  ›  专栏  ›  技术社区  ›  Shoaib Nawaz

hook\u menu()-意外行为(路径过长问题)

  •  3
  • Shoaib Nawaz  · 技术社区  · 14 年前

    我正在通过hook\u菜单(drupal6)初始化许多项

    ...
    $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 回复  |  直到 14 年前
        1
  •  5
  •   Henrik Opel    14 年前

    文档中没有充分提到这一点,但是对于可以用于Drupal菜单回调的路径元素的数量有一个限制—请参阅 the MENU_MAX_PARTS constant .

    对于Drupal6,这个限制是7,你的第二条和第三条路径超过了这个限制。两个修复都将元素的倒数减少到7,这就是为什么这些都能工作的原因。

        2
  •  0
  •   Shoaib Nawaz    14 年前

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

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

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

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