Jeśli próbujesz to zrobić w skrypcie aktualizacji, powinno to działać:
$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);
}
}
}
Komentarze są mile widziane, jeśli moje podejście jest błędne. Dzięki.
if (!array_key_exists($menu, $menus)) {
- również dodanie pojedynczego parametru FALSE do menu_get_menus () zwraca tylko menu niestandardowe.Oto sposób łatwego zapełnienia menu z tablicy:
źródło
hook_menu()
to wszystko, co musisz wdrożyć w swoim module niestandardowym. Informacje na temat tworzenia niestandardowego modułu można znaleźć w tej dokumentacji .Możesz wydrukować menu w dowolnym regionie, dodając następujący kod do
page.tpl.php
pliku swojego motywu.Nie musisz drukować,
third-menu
ponieważ domyślnie pojawi się w menu nawigacyjnym.UWAGA: Nie jest to wcale najlepsza praktyka tworzenia menu nawigacyjnego i dodawania go do strony. hook_menu () służy do tworzenia wywołań zwrotnych strony, a nie do tworzenia menu nawigacyjnych. Proszę przeczytać TO , która wyjaśnia różnice. Odpowiedziałem na to, kiedy zacząłem uczyć się Drupala i już nie polecam tej odpowiedzi.
źródło
Możesz także wypróbować moduł Menu Import . Jest to bardzo fajne i łatwe do wdrożenia w menu. Możesz stworzyć menu ręcznie na swojej stronie i użyć wygenerowanego JSON. Możesz także tworzyć węzły dla nieistniejących stron.
Oto przykład skryptu eksportu:
Możesz uruchomić ten skrypt za pomocą hook_update_N () lub Aktualizuj procesor skryptów
źródło
Aby utworzyć blok menu, w pliku .install zaimplementuj typ hook_enable ()
W tym samym pliku .install zaimplementowano hook_uninstall ().
Następnie w pliku .module, implementując hook_menu ().
Plik .inc zawiera folder umieszczony w folderze mymodule.
Zobacz devel devel.install i devel.module plik modułu, aby uzyskać więcej informacji.
źródło