web-dev-qa-db-ja.com

プログラムでメニュー項目を更新または削除するにはどうすればよいですか?

Drupal 8 でメニュー項目をプログラムで作成する方法)の投稿を見ましたが、更新または削除するにはD8のメニューアイテム?

明確化:プログラム的には動的であることを意味するので、yaml構成ファイルは役に立ちません。

5
Duncanmoo

まず、エンティティをロードする必要があります。どちらの方法でも機能します。

$menu_link = MenuLinkContent::load($menu_link_id);

または...

_$menu_link = \Drupal::entityTypeManager()->getStorage('menu_link_content')->load($menu_link_id);
_

次に、set()メソッドを使用するか、マジックメソッド__set ...を使用して値を更新できます。

_$menu_link->expanded = TRUE;_

保存するには、save()メソッドを呼び出すだけです。削除するには、delete()メソッドを呼び出すだけです。

5
johndevman

...のようなことをしなければならなかった。

 
 // 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- > enabled = 0; 
 $ menu_link-> save()
2
Taggart Jensen

おそらく手遅れだと思います:

$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