Drupal Hook для создания меню модуля - PullRequest
2 голосов
/ 04 ноября 2011

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

Моя текущая стратегия заключается в создании настраиваемого меню, аналогичного и расположенного с основными, дополнительными меню и т. Д. В этом меню я хочу, чтобы одна или несколько ссылок определялись моим модулем . Тогда я хотел бы надеяться, что в моем пользовательском меню автоматически появится блок, который пользователи могут размещать в любом месте, где пожелают.

Когда мой модуль не установлен, я хочу, чтобы меню и ссылки были удалены.

Может кто-нибудь дать мне несколько советов для достижения этой цели?

1 Ответ

11 голосов
/ 04 ноября 2011

http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_menu/7

/**
 * Implement hook_menu()
 */
function <module>_menu() {

  $items = array();
  $items['admin/<path>'] = array(
    'title' => '<Link title>',
    'description' => '<Link description>',
    'page callback' => '<function from your module>',
    'access arguments' => array('access administration pages'),
    'type' => MENU_NORMAL_ITEM,
    'weight' => 15,
    'menu_name' => 'primary-links'
  );
  return $items;
}

'menu_name' поместит ссылки в соответствующее меню

Обновление: чтобы сначала создать меню, вы должны использовать hook_install или hook_enable, которые будут запускать действия при первой установке, или включить соответственно.

/**
 * Implement hook_install()
 */
 function <module>_install () {
    $menu = array(
        'menu_name' => 'test-menu',
        'title' => 'Test menu',
        'description' => 'A test menu'
    );

    menu_save($menu);
    cache_clear_all('*', 'cache_menu', TRUE);

    drupal_set_message($message = t('The module was successfully installed. '), $type = 'status');
}

Приведенный выше код создаст меню.

Примечание: для hook_install () для запуска необходимо сначала отключить, а затем удалить модуль перед повторным включением. используйте hook_enable () , чтобы запускать его каждый раз.

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

Прочитав ваш комментарий и обнаружив, что вам нужно создать свое меню, а не добавлять к существующему, для меня может быть лучше предложить вместо этого menu_link_save () в вызове hook_install().

Обратите внимание, что вам также потребуется использовать hook_disable () или hook_uninstall () , чтобы впоследствии удалить ссылку меню.

...