J'ai vu l'article sur comment créer des éléments de menu par programme dans Drupal 8 , mais comment mettre à jour ou supprimer des éléments de menu dans D8?
Clarification: par programmation, j'entends dynamiquement, donc les fichiers de configuration yaml ne vont pas aider.
Vous devrez d'abord charger l'entité. Dans les deux cas, cela fonctionne:
$menu_link = MenuLinkContent::load($menu_link_id);
ou ...
$menu_link = \Drupal::entityTypeManager()->getStorage('menu_link_content')->load($menu_link_id);
Ensuite, vous pouvez mettre à jour la valeur en utilisant la méthode set()
ou via la méthode magique __set ...
$menu_link->expanded = TRUE;
Pour sauvegarder, appelez simplement la méthode save()
. Pour supprimer, appelez simplement la méthode delete()
.
Je devais faire quelque chose comme ...
// menuLinkManager = 'plugin.manager.menu.link' $ result = $ this-> menuLinkManager-> loadLinksByRoute ('entity.node.canonical', ['node' => $ node-> id ()]); foreach ($ result as $ menu_item) { if (is_object ($ menu_item)) { $ id = $ menu_item-> getPluginDefinition () ['metadata'] ['entity_id']; $ menu_link = $ this-> entityTypeManager-> getStorage ('menu_link_content') -> load ($ id); $ menu_link- > activé = 0; $ menu_link-> save ()
Probablement trop tard, j'ai aimé:
$menu_handler = \Drupal::service('menu.link_tree')
->load("menu-name", new \Drupal\Core\Menu\MenuTreeParameters());
foreach($menu_handler as $key=>$value) {
if('Name' == $value->link->getTitle()) {
$link = $value->link;
$link->updateLink(
[
'enabled'=>'1',
'title'=>'New Name'
],
true
);
}
}