Я не могу воспроизвести вашу проблему - используя вашу иерархию меню, все записи появляются под меню навигации в ожидаемом порядке и вложенности.
Вы (повторно) пробовали из чистого состояния (то есть с удаленным модулем и отсутствием пунктов меню)? Чтобы объяснить, почему я спрашиваю об этом, я должен немного уточнить:
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.
Чтобы обеспечить правильное меню по умолчанию при установке модуля (и для большего контроля над происходящим), вам следует заглянуть в _ 11_ и menu_link_maintain()
функции. Вы также можете прочитать Когда и как использовать menu_links.
person
Henrik Opel
schedule
08.12.2009