Se você está tentando fazer isso em um script de atualização, isso deve 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);
}
}
}
Comentários são bem-vindos se minha abordagem estiver errada. Obrigado.
if (!array_key_exists($menu, $menus)) {
- também adicionar o único parâmetro FALSE a menu_get_menus () retorna apenas menus personalizados.Aqui está uma maneira de preencher facilmente um menu a partir de uma matriz:
fonte
hook_menu()
é tudo o que você precisa implementar no seu módulo personalizado. Para criação do módulo personalizado, consulte esta documentação .Você pode imprimir o menu em qualquer região adicionando o seguinte código ao
page.tpl.php
arquivo do seu tema.Você não precisa imprimir
third-menu
porque por padrão ele aparecerá no menu de navegação.NOTA: Essa não é a melhor prática para criar um menu de navegação e adicioná-lo a uma página. hook_menu () é para criar retornos de chamada de página e não para criar menus de navegação. Por favor, leia ISTO , o que explica as diferenças. Respondi a isso quando comecei a aprender o Drupal e não recomendo mais essa resposta.
fonte
Você também pode experimentar o módulo de importação de menus . É muito legal e fácil para a implantação do menu. Você pode criar um menu manualmente no seu site e usar JSON gerado. Além disso, você pode criar nós para páginas inexistentes.
Aqui está um exemplo de script de exportação:
Você pode executar este script com hook_update_N () ou atualizar o processador de script
fonte
Para criar um bloco de menus, no seu arquivo .install, implementando hook_enable (), digite
No mesmo arquivo .install, implementando hook_uninstall ().
A seguir, no seu arquivo .module, enquanto implementa hook_menu ().
O arquivo .inc está dentro da pasta inclui dentro da pasta mymodule.
Consulte o arquivo devel.install e devel.module do módulo devel para obter mais informações.
fonte