Wenn Sie versuchen, dies in einem Update-Skript zu tun, sollte dies funktionieren:
$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);
}
}
}
Kommentare sind willkommen, wenn mein Ansatz falsch ist. Vielen Dank.
if (!array_key_exists($menu, $menus)) {
Variablen speichern und einfach Folgendes tun: - Wenn Sie auch den einzelnen Parameter FALSE zu menu_get_menus () hinzufügen, werden nur benutzerdefinierte Menüs zurückgegeben.So füllen Sie ein Menü auf einfache Weise aus einem Array:
quelle
hook_menu()
ist alles, was Sie in Ihrem benutzerdefinierten Modul implementieren müssen. Informationen zum Erstellen eines benutzerdefinierten Moduls finden Sie in dieser Dokumentation .Sie können das Menü in jeder Region ausdrucken, indem
page.tpl.php
Sie der Datei Ihres Themas den folgenden Code hinzufügen .Sie müssen nicht drucken,
third-menu
da es standardmäßig im Navigationsmenü angezeigt wird.HINWEIS: Dies ist keine bewährte Methode zum Erstellen eines Navigationsmenüs und zum Hinzufügen zu einer Seite. hook_menu () dient zum Erstellen von Seitenrückrufen und nicht zum Erstellen von Navigationsmenüs. Bitte lesen Sie DIESES , das die Unterschiede erklärt. Ich antwortete darauf, als ich anfing, Drupal zu lernen, und empfehle diese Antwort nicht mehr.
quelle
Sie können auch das Menü-Import- Modul ausprobieren . Es ist sehr cool und einfach für die Menübereitstellung. Sie können auf Ihrer Website manuell ein Menü erstellen und den generierten JSON verwenden. Sie können auch Knoten für nicht vorhandene Seiten erstellen.
Hier ist ein Beispiel für ein Exportskript:
Sie können dieses Skript mit hook_update_N () oder Update script processor ausführen
quelle
Um einen Menüblock zu erstellen, geben Sie in Ihrer .install-Datei hook_enable () ein
Implementieren Sie in derselben .install-Datei hook_uninstall ().
Weiter in Ihrer .module-Datei, während hook_menu () implementiert wird.
Die .inc-Datei enthält einen Ordner, der sich im mymodule-Ordner befindet.
Weitere Informationen finden Sie in den Abschnitten devel.install und devel.module des Devel- Moduls.
quelle