Если вы пытаетесь сделать это в скрипте обновления, это должно работать:
$menus = array(
array(
'menu_name' => 'menu_test_one',
'title' => 'My Menu One',
'description' => 'Lorem Ipsum',
),
array(
'menu_name' => 'menu_test_two',
'title' => 'My Menu Two',
'description' => 'Lorem Ipsum',
),
array(
'menu_name' => 'menu_test_three',
'title' => 'My Menu Three',
'description' => 'Lorem Ipsum',
),
);
$links = array(
array(
array(
'link_title' => 'Link1',
'link_path' => 'http://yourdomain.com/link1',
'menu_name' => 'menu_test_one',
'weight' => 0,
'expanded' => 0,
),
array(
'link_title' => 'Link2',
'link_path' => 'http://yourdomain.com/link2',
'menu_name' => 'menu_test_one',
'weight' => 1,
'expanded' => 0,
),
),
array(
array(
'link_title' => 'Link3',
'link_path' => 'http://yourdomain.com/link3',
'menu_name' => 'menu_test_two',
'weight' => 0,
'expanded' => 0,
),
array(
'link_title' => 'Link4',
'link_path' => 'http://yourdomain.com/link4',
'menu_name' => 'menu_test_two',
'weight' => 1,
'expanded' => 0,
),
),
array(
array(
'link_title' => 'Link5',
'link_path' => 'http://yourdomain.com/link5',
'menu_name' => 'menu_test_three',
'weight' => 0,
'expanded' => 0,
),
array(
'link_title' => 'Link6',
'link_path' => 'http://yourdomain.com/link6',
'menu_name' => 'menu_test_three',
'weight' => 1,
'expanded' => 0,
),
),
);
// Save menu group into menu_custom table
foreach ($menus as $menu) {
// Look the table first if the data does exist
$exists = db_query("SELECT title FROM {menu_custom} WHERE menu_name=:menu_name", array(':menu_name' => $menu['menu_name']))->fetchField();
// Save the record if the data does not exist
if (!$exists) {
menu_save($menu);
}
}
$item = '';
foreach ($links as $layer1) {
foreach ($layer1 as $link) {
// Build an array of menu link
$item = array(
'link_path' => $link['link_path'],
'link_title' => $link['link_title'],
'menu_name' => $link['menu_name'],
'weight' => $link['weight'],
'expanded' => $link['expanded'],
);
// Look the table first if the data does exist
$exists = db_query("SELECT mlid from {menu_links} WHERE link_title=:link_title AND link_path=:link_path", array(':link_title' => $link['link_title'], ':link_path' => $link['link_path']))->fetchField();
// Save the record if the data does not exist
if (!$exists) {
menu_link_save($item);
}
}
}
Комментарии приветствуются, если мой подход неверен. Благодарю.
if (!array_key_exists($menu, $menus)) {
- также добавив единственный параметр FALSE в menu_get_menus (), возвращает только пользовательские меню.Вот способ легко заполнить меню из массива:
источник
hook_menu()
это все, что вам нужно реализовать в своем пользовательском модуле. Для создания пользовательского модуля, обратитесь к этой документации .Вы можете распечатать меню в любом регионе, добавив следующий код в
page.tpl.php
файл вашей темы.Вам не нужно печатать,
third-menu
потому что по умолчанию он появится в меню навигации.ПРИМЕЧАНИЕ. Это не лучший способ создания меню навигации и добавления его на страницу. hook_menu () предназначен для создания обратных вызовов страницы, а не для создания навигационных меню. Пожалуйста, прочитайте ЭТО , которое объясняет различия. Я ответил на это, когда начал изучать Drupal, и больше не рекомендую этот ответ.
источник
Вы также можете попробовать модуль импорта меню . Это очень круто и легко для развертывания меню. Вы можете создать меню руками на своем сайте и использовать сгенерированный JSON. Также вы можете создавать узлы для несуществующих страниц.
Вот пример сценария экспорта:
Вы можете запустить этот скрипт с помощью hook_update_N () или Обновить скрипт обработчика
источник
Для создания блока меню в вашем файле .install реализует тип hook_enable ()
В том же файле .install, реализующем hook_uninstall ().
Далее в вашем файле .module при реализации hook_menu ().
В состав файла .inc входит папка, расположенная в папке mymodule.
См . Devel.install и файл devel.module модуля devel для получения дополнительной информации.
источник