カスタムモジュールを使用して、プログラムでDrupal 8に新しいメニューを作成できますか?
カスタムモジュールを作成しています。モジュールの要件の1つは、Structure > Menus
の下に新しいメニューを作成することです。
ほとんどのチュートリアルでは、既存のメニューにメニューリンクを追加する方法を説明しています。たとえば、 メニューリンクの作成 、 メニューリンクの追加 などです。
要するに、最終結果が画像の"User Account Menu"
の下のメニューになるような方法が必要です。それから、上記のチュートリアルを使用して、メニューリンクを追加できます。
ありがとう。
メニューは設定です。 <module_root>/config/install/system.menu.foo.yml
という名前のファイルをコードベースに追加することで、モジュールに1つ含めることができます(foo
を目的のメニューIDに置き換えます)。
ファイルの内容は、コアシステムモジュールによってインストールされた同じ構成の1つに似たものになります。
langcode: en
status: true
dependencies: { }
id: foo
label: 'Foo menu'
description: 'Links related to foo'
locked: true
モジュールが(再)インストールされると、メニューが作成されます。
hook_install
または類似のAPIを技術的に使用することもできます。
$menu = \Drupal::entityTypeManager()->getStorage('menu')
->create([
'langcode' => 'en',
'status' => TRUE,
...
]);
しかし、ymlメソッドは少しすっきりしており、推奨されていると思います(ただし、現在ソースを見つけることができません)。
余談ですが、メニューはアルファベット順にリストされています。メニューを変更するのは簡単ではないと思います。メニューには相互に関連するウェイトの概念がないため、リストの一番下にあるメニューが本当に必要な場合は、どういうわけかそれを回避する必要があります。