Drupal 8 でメニュー項目をプログラムで作成する方法)の投稿を見ましたが、更新または削除するにはD8のメニューアイテム?
明確化:プログラム的には動的であることを意味するので、yaml構成ファイルは役に立ちません。
まず、エンティティをロードする必要があります。どちらの方法でも機能します。
$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()
メソッドを呼び出すだけです。
...のようなことをしなければならなかった。
// 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()
おそらく手遅れだと思います:
$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
);
}
}