hook_menu() - неожиданное поведение (проблема с более длинным путем)

Я инициализирую ряд элементов через 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/%']

to

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

а также

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

to

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

Пожалуйста, помогите мне, что я делаю неправильно, добавляя подстановочный знак? Является ли более двух подстановочных знаков недействительными?


person Shoaib Nawaz    schedule 12.08.2010    source источник


Ответы (2)


Это недостаточно упоминается в документации, но существует ограничение на количество элементов пути, которые вы можете использовать для обратного вызова меню Drupal — см. константа MENU_MAX_PARTS.

Для Drupal 6 это ограничение равно семи, которые вы превысили во втором и третьем пути. Оба ваших исправления уменьшают количество элементов до семи, поэтому они работают.

person Henrik Opel    schedule 12.08.2010
comment
Хороший улов! К сожалению, на странице документации для hook_menu() нет ссылки на это ограничение, и я думаю, что это первое место, где можно было бы проверить некоторые подробности о том, как реализовать обратные вызовы меню. - person apaderno; 12.08.2010
comment
Спасибо дружище, новинка для меня. И это было расширено до 9 в Drupal 7. - person Shoaib Nawaz; 12.08.2010

Я исправил проблему, не исключая первый подстановочный знак, как я уже упоминал. Но я не мог найти никакой логической причины.

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

to

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

а также

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

to

$items['webtv/block/%/playlist/edit/%/new']
person Shoaib Nawaz    schedule 12.08.2010