답변:
메뉴 항목을 자동으로 만들려면 hook_update_N
파일에 파일을 배치 mymodule.install
하고 데이터베이스가 업데이트 될 때 실행됩니다 (/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();
}
프로그래밍 방식으로 전체 메뉴를 만들 수도 있습니다.
\Drupal::entityTypeManager()
->getStorage('menu')
->create([
'id' => 'menu_test',
'label' => 'Test menu',
'description' => 'Description text',
])
->save();
모듈 정의 메뉴 링크를 작성하려면 다음 예제를 custom_module.links.menu.yml 파일에 추가 하십시오.
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
(선택 사항)은 표 id
에서 상위 항목 의 열이며 메뉴 항목을 연결하려는 Drupal의 내부 경로 ID입니다. 그것은에서의 표 .menu_tree
route_name
menu_tree
route_name
자세한 내용과 옵션은 모듈 정의 메뉴 링크 제공 및 메뉴 링크 추가 를 참조하십시오.
@skorzh 답변을 확장하고 @Matt의 의견에 답장하려면 메뉴 항목을 다른 항목 안에 중첩하려면 부모 ID를 가져 와서 'parent'로 설정해야합니다. 예를 들어이 코드는 $top_level
아래 변수를 사용하여 최상위 레벨 안에 항목을 중첩시킵니다 .
$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();