Помощь по пользовательскому меню - PullRequest
2 голосов
/ 16 апреля 2011

Drupal 7 hook_menu() сбивает меня с толку; Я попробовал все, и я не могу заставить это работать.

Что мне нужно: В пользовательском модуле я хотел бы создать новое меню и добавить около четырех ссылок на это меню. Звучит просто, но я изо всех сил. Мне удалось создать само меню, используя массив $ menu в файле .install, но добавлять элементы в это меню не имеет смысла.

Код, который работает:

$menu = array(
  'menu_name' => 'project-menu', 
  'title' => $t('Project Menu'), 
  'description' => 'Project Menu',
); 

menu_save($menu);

Код, который не работает:

$items = array();

$items['project-menu/%'] = array(
  'title' => 'Test Link',
  'page callback' => 'dc_project_page',
  'page arguments' => array(1),
  'access callback' => TRUE,
  'type' => MENU_LOCAL_TASK,
);

return $items;

Это все в файле dc_project.install в функции dc_project_menu(). Надеюсь, я просто делаю глупости, любая помощь очень ценится. Даже просто указав мне на модуль, который делает это чисто в качестве примера, спасибо. Я посмотрел на пример проекта, но не смог получить ничего, кроме добавления ссылок в мое новое меню.

1 Ответ

2 голосов
/ 16 апреля 2011

Переход к menu_save () содержимое $items не работает, потому что menu_save() принимает только массив, содержащий menu_name, title и description. В $items используется массив, описывающий обратные вызовы меню, реализованные модулем, а определения обратных вызовов меню, реализованные всеми модулями, не сохраняются в «menu_custom» (таблица используется из menu_save()), а кэшируются в таблице кеша Drupal.

Если вы пытаетесь изменить обратные вызовы меню, определенные другим модулем, вам следует реализовать hook_menu_alter () ; в противном случае, если вы просто хотите определить обратные вызовы меню вашего модуля, вы должны реализовать hook_menu () .

Обе реализации ловушек (hook_menu() и hook_menu_alter()) должны находиться в файле модуля (в вашем случае, в dc_project.module), а не в dc_project.install. Drupal не загружает установочный файл, когда он обычно загружает включенные модули; он загружает установочный файл при обновлении (или установке) модуля, но не загружает его в других случаях.
Код, который сохраняет меню с помощью menu_save(), может быть в установочном файле при реализации hook_install () или hook_update_N () . Это также можно поместить в реализацию hook_enable () ; в этом случае код (который выполняется, когда модуль включен) должен сначала проверить, что меню еще не было добавлено. (hook_enable() и hook_disable() должны быть помещены в установочный файл.)

...