Jawaban:
Untuk membuat item menu secara otomatis, ini dapat ditempatkan hook_update_Npada file mymodule.installdan akan berjalan ketika database diperbarui (/update.php):
use Drupal\menu_link_content\Entity\MenuLinkContent;
$items = array(
'1' => 'Menuitem 1',
'2' => 'Menuitem 2',
'3' => 'Menuitem 3'
);
foreach($items as $nid => $title) {
$menu_link = MenuLinkContent::create([
'title' => $title,
'link' => ['uri' => 'internal:/node/' . $nid],
'menu_name' => 'main',
'expanded' => TRUE,
]);
$menu_link->save();
}
Anda juga dapat membuat seluruh Menu secara terprogram:
\Drupal::entityTypeManager()
->getStorage('menu')
->create([
'id' => 'menu_test',
'label' => 'Test menu',
'description' => 'Description text',
])
->save();
Jika Anda ingin membuat tautan menu yang ditentukan modul, tambahkan sesuatu seperti contoh ini ke file custom_module.links.menu.yml Anda :
custom_module.admin_item_1:
title: 'New Admin Item 1'
parent: system.admin
description: 'Description of link goes here.'
route_name: view.some_view_id.page_1
parent(opsional) adalah idkolom induk dalam menu_treetabel, dan route_namemerupakan ID rute internal Drupal tempat Anda menginginkan item menu untuk ditautkan. Ada di menu_treemeja sebagai route_name.
Lihat Menyediakan tautan menu yang ditentukan modul dan Tambah tautan menu untuk detail dan opsi lebih lanjut.
Untuk memperluas pada @skorzh, jawab dan balas komentar dari @Matt, jika Anda ingin memasukkan item menu ke dalam item lain, Anda harus mendapatkan id induk dan menjadikannya sebagai 'induk'. Sebagai contoh, kode ini menyarangkan item di dalam level teratas menggunakan variabel di $top_levelbawah ini.
$my_menu = \Drupal::entityTypeManager()->getStorage('menu_link_content')
->loadByProperties(['menu_name' => 'my-menu-name']);
foreach ($my_menu as $menu_item) {
$parent_id = $menu_item->getParentId();
if (!empty($parent_id) {
$top_level = $parent_id;
break;
}
}
$menu_link = MenuLinkContent::create([
'title' => 'My menu link title',
'link' => ['uri' => 'internal:/my/path'],
'menu_name' => 'my-menu-name',
'parent' => $top_level,
'expanded' => TRUE,
'weight' => 0,
]);
$menu_link->save();