現在、プログラムでメニューとその中のメニューリンクを生成しています。これは機能していますが、リンクの親を設定するのに問題があります。これが私の現在のコードです
$langcode = 'es';
if (empty($menu_id)) {return ['#markup' => 'menu not specified'];}
$menu = \Drupal::entityTypeManager()->getStorage('menu')
->create([
'langcode' => $langcode,
'status' => TRUE,
'label' => $menu_id,
'id' => $menu_id,
'description' => 'this menu was created programmatically',
])->save();
$items = [
'1' => 'item 1',
'2' => 'item 2',
'3' => 'item 3',
];
$parent = NULL;
foreach ($items as $id => $title) {
if ($id == '2') {$parent = '1';} else { $parent == NULL;}
$menu_link = MenuLinkContent::create([
'title' => $title,
'link' => ['uri' => 'internal:/node/' . $nid],
'menu_name' => $menu_id,
'expanded' => true,
'langcode' => $langcode,
'status' => TRUE,
'parent' => $parent,
]);
$menu_link->save();
var_dump($menu_link->getParentId());
}
この線
var_dump($menu_link->getParentId());
実際に正しい親を表示しています。ただし、管理ページのメニューにアクセスすると、親は設定されておらず、メニューの最上位にいます。コードに特定の問題はありますか?プログラムで生成されたメニューリンクの親をどのように設定しますか?
親を設定するときに、「menu_link_content:」を使用するmenu_link_contentのIDを使用せず、その後にリンクのUUIDが続くことがわかります。適切にフォーマットされた親フィールドの例を次に示します。
「menu_link_content:0025c274-4db3-4745-b51e-714c998b5a50」
私はそのようにコードを修正しました
foreach ($items as $id => $title) {
if ($id == '2') {
$parent = 'menu_link_content:' . $previous_menu_link->uuid();
} else {
$parent == NULL;
}
$menu_link = MenuLinkContent::create([
'title' => $title,
'link' => ['uri' => 'internal:/node/' . $nid],
'menu_name' => $menu_id,
'expanded' => true,
'langcode' => $langcode,
'status' => TRUE,
'parent' => $parent,
]);
$menu_link->save();
$previous_menu_link = $menu_link;
}
これは私が最終的に使用したものです。
use Drupal\menu_link_content\Entity\MenuLinkContent;
\Drupal::entityTypeManager()
->getStorage('menu')
->create([
'id' => 'test-menu',
'label' => 'Test menu',
'description' => 'Description text.',
])
->save();
$menu_link_1 = MenuLinkContent::create([
'title' => 'Link 1',
'link' => ['uri' => 'internal:/foo'],
'menu_name' => 'test-menu',
'expanded' => TRUE,
]);
$menu_link_1->save();
$menu_link_2 = MenuLinkContent::create([
'title' => 'Link 2',
'link' => ['uri' => 'internal:/bar'],
'menu_name' => 'test-menu',
'expanded' => TRUE,
'parent' => $menu_link_1->getPluginId(),
]);
$menu_link_2->save();