Untuk membuat item menu secara otomatis, ini dapat ditempatkan hook_update_Npada file mymodule.installdan akan berjalan ketika database diperbarui (/update.php):
entitas_create sudah usang. Gunakan \ Drupal :: entityTypeManager () -> get storage ('menu') - create ([]);
Eyal
1
Saya pikir solusi yang tepat harus menggunakan menu yamls
Eyal
3
di mana kait ini digunakan dengan benar?
Paul
11
Apakah boleh untuk memperluas jawabannya? Itu tidak menyatakan di mana kode ini dapat ditempatkan untuk menghasilkan item menu. Saya pikir orang-orang seperti saya akan berjuang untuk mengambil ini dan menerapkannya secara efektif.
cwiggo
6
Bagaimana Anda menambahkan tautan menu sebagai anak ke tautan induk?
Matt
8
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.
Menu yamls hanya membantu jika Anda tahu terlebih dahulu item menu apa yang ingin Anda buat, pembuatan Programmatic mungkin tersimpan di node.
Duncanmoo
1
Bagaimana cara menambahkan item menu yang dapat diterjemahkan? Seperti satu item menu, tetapi dalam 3 bahasa (judul dan jalur item menu berbeda).
MilanG
1
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();
Jika Anda ingin membuat tautan menu yang ditentukan modul, tambahkan sesuatu seperti contoh ini ke file custom_module.links.menu.yml Anda :
parent
(opsional) adalahid
kolom induk dalammenu_tree
tabel, danroute_name
merupakan ID rute internal Drupal tempat Anda menginginkan item menu untuk ditautkan. Ada dimenu_tree
meja sebagairoute_name
.Lihat Menyediakan tautan menu yang ditentukan modul dan Tambah tautan menu untuk detail dan opsi lebih lanjut.
sumber
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.sumber