web-dev-qa-db-fra.com

Comment mettre à jour ou supprimer par programme des éléments de menu?

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.

5
Duncanmoo

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().

5
johndevman

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 () 
2
Taggart Jensen

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
    );
  }
}
0
reuven