Jawaban:
Untuk membuat item menu secara otomatis, ini dapat ditempatkan hook_update_N
pada file mymodule.install
dan 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 id
kolom induk dalam menu_tree
tabel, dan route_name
merupakan ID rute internal Drupal tempat Anda menginginkan item menu untuk ditautkan. Ada di menu_tree
meja 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_level
bawah 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();