Je génère actuellement par programme un menu et des liens de menu à l'intérieur. Cela fonctionne, mais j'ai du mal à définir les parents pour les liens. Voici mon code actuel
$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());
}
Cette ligne
var_dump($menu_link->getParentId());
affiche en fait le bon parent. Mais lorsque vous visitez le menu dans la page d'administration, le parent n'est pas défini et se trouve au niveau supérieur du menu. Y a-t-il un problème spécifique avec mon code? Comment définiriez-vous le parent d'un lien de menu généré par programme?
Il s'avère que lors de la définition du parent, vous n'utilisez pas l'ID du menu_link_content, vous utilisez le 'menu_link_content:' suivi de l'uuid du lien. Voici un exemple de champ parent correctement formaté.
"menu_link_content: 0025c274-4db3-4745-b51e-714c998b5a50"
J'ai corrigé le code comme ça
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;
}
C'est ce que j'ai fini par utiliser.
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();