Я не могу воспроизвести вашу проблему - используя вашу иерархию меню, все записи появляются под навигационным меню в ожидаемом порядке и во вложении.
Пробовали ли вы (пере) из чистого состояния (то есть, когда ваш модуль удален, а пункты меню пропали)? Чтобы объяснить, почему я спрашиваю об этом, я должен немного уточнить:
Drupal 6 разделил хранилище определений меню на две таблицы. Существует таблица menu_router
, в которой хранятся пути обратного вызова <>, определенные с помощью hook_menu()
. Это не определяет «настоящий» пункт меню (как в меню меню, например, в меню навигации). Он определяет только внутреннюю структуру меню Drupal, которая не имеет ничего общего с отображаемыми меню, а только с внутренней иерархией путей сопоставления с функциями обратного вызова!
Затем есть таблица menu_links
, в которой хранятся «настоящие» пункты меню, отображаемые в различных отображаемых меню (например, навигация, основные ссылки и т. Д.). Записи там также определяют порядок вложения, сохраняя «идентификатор родительского меню» (plid) для каждой записи, указывая на родительскую запись, или 0 для записи верхнего уровня.
Теперь, когда вы определяете комбинации пути / обратного вызова через hook_menu()
, Drupal просто помещает эту запись в таблицу menu_router
. Если вы определите их как MENU_NORMAL_ITEM
или MENU_SUGGESTED_ITEM
, Drupal дополнительно попытается создать запись в таблице menu_links
. Если запись для этого пути уже существует, Drupal не изменит свое размещение в иерархии, поскольку предполагает, что пользователь переместил ее намеренно. Вам следует подумать об этом menu_link
создании записи с помощью hook_menu()
для удобства добавьте, что может избавить вас от необходимости явного добавления их через функции, упомянутые ниже, но механизм не очень гибкий и пытается не мешать существующим конфигурациям (в противном случае меню, отредактированное вручную, будет постоянно переупорядочиваться при каждой перестройке кеш меню).
Поэтому вам следует повторить попытку, убедившись, что ни один из ваших путей не имеет существующей записи в таблице `menu_links '.
Для того, чтобы обеспечить правильное меню по умолчанию при установке вашего модуля (и для большего контроля над тем, что происходит), вы должны взглянуть на menu_link_save()
и menu_link_maintain()
функции. Вы также можете прочитать Когда и как использовать menu_links .