hook_menu () - неожиданное поведение (проблема с более длинным путем) - PullRequest
3 голосов
/ 12 августа 2010

Я инициализирую несколько элементов через 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 ]

5 голосов
/ 12 августа 2010

Это недостаточно упомянуто в документации, но есть ограничение на количество элементов пути, которые вы можете использовать для обратного вызова меню Drupal - см. константа MENU_MAX_PARTS .В Drupal 6 этот предел равен семи, и ваш второй и третий путь превышены.Оба ваших исправления уменьшают количество элементов до семи, поэтому они работают.

0 голосов
/ 12 августа 2010

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

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

до

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

и

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

до

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