Si está intentando hacer esto en un script de actualización, esto debería funcionar:
$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);
}
}
}
Los comentarios son bienvenidos si mi enfoque es incorrecto. Gracias.
if (!array_key_exists($menu, $menus)) {
- también agregando el parámetro único FALSO a menu_get_menus () solo devuelve menús personalizados.Aquí hay una manera de llenar fácilmente un menú desde una matriz:
fuente
hook_menu()
es todo lo que necesita implementar en su módulo personalizado. Para la creación de un módulo personalizado, consulte esta documentación .Puede imprimir el menú en cualquier región agregando el siguiente código al
page.tpl.php
archivo de su tema.No necesita imprimir
third-menu
porque, de forma predeterminada, aparecerá en el menú de navegación.NOTA: Esta no es la mejor práctica para crear un menú de navegación y agregarlo a una página. hook_menu () es para crear devoluciones de llamada de página y no para crear menús de navegación. Lea ESTO , que explica las diferencias. Respondí esto cuando comencé a aprender Drupal y ya no recomiendo esta respuesta.
fuente
También puede probar el módulo Importar menú . Es muy bueno y fácil para la implementación del menú. Puede crear un menú manualmente en su sitio web y usar el JSON generado. También puede crear nodos para páginas no existentes.
Aquí hay un ejemplo de script de exportación:
Puede ejecutar este script con hook_update_N () o Actualizar el procesador de script
fuente
Para crear un bloque de menú, en su archivo .install implementando hook_enable () escriba
En el mismo archivo .install, implementando hook_uninstall ().
Luego en su archivo .module, mientras implementa hook_menu ().
El archivo .inc incluye carpeta incluida dentro de la carpeta mymodule.
Consulte el archivo devel.install y devel.module del módulo devel para obtener más información.
fuente