logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll
24/04/2020, by maria

Menu

モジュールの設定ページのプレースホルダーを作成したので、メニューのリンクを追加しましょう。以下の手順では、「管理者>設定」ページ(http://example.com/admin/config)の「開発」セクションにhello_worldモジュールへのメニューリンクを作成する方法を示します。

モジュールのルートフォルダーにhello_world.links.menu.ymlという名前の新しいファイルを作成し、次の内容を追加します:

hello_world.admin:
  title: 'Hello module settings'
  description: 'example of how to make an admin settings page link'
  parent: system.admin_config_development
  route_name: hello_world.content
  weight: 100

最初の行が名前空間を予約していることに注意してください(ルーティングファイルの例と同様)。また、5行目でルート名を使用していることにも注意してください(ルーティングファイルの例の最初の行の名前空間を使用しています)。タイトル説明は「開発」セクションに表示されます。parent行がメニューの親リンクを説明していることに注意してください。つまり、メニューリンクはadmin、config、developmentの下に作成されます。

これにより、サイトの管理ページの「設定」タブ(URL/admin/config)の「開発」セクションに、hello_world.content(この例ではhello_world.routing.yml)で指定されたパスへのリンクが追加されます。もちろん、変更を有効にするにはキャッシュをクリアする必要があります。

キャッシュをクリアすると、設定ページの「開発」セクションに「Helloモジュール設定」メニューリンクがあります。リンクをクリックすると、hello_worldモジュールが呼び出されます。

追加のヒント

.links.menu.ymlファイルはかなり柔軟です。外部リソースへのリンクにも使用できます:

hello_world.admin:
  title: 'Hello module settings'
  description: 'example of how to make an admin settings page link'
  parent: system.admin_config_development
  url: http://example.com/this-is-some-example
  weight: 100
hello_world.admin2:
  title: 'Hello module settings'
  description: 'example of how to make an admin settings page link'
  parent: system.admin_config_development
  url: internal:/some-internal-path

 

編集不可:

このようにymlファイルとカスタムモジュールを使用してメニューリンクを作成すると、UIで編集できないメニューリンクになることに注意してください。リンクはymlファイルでのみ変更できます。これらはモジュールによって管理されていると見なされ、管理者によって管理されているとは見なされません。メニュー項目の編集ボタンをクリックすると、「このリンクはモジュールXXXによって提供されています。タイトルとパスは編集できません」というメッセージが表示されます。

not-editable-menu-link

編集可能なメニューリンクを作成するには、次のようにする必要があります:

  $my_menu = \Drupal::entityTypeManager()->getStorage('menu_link_content')
    ->loadByProperties(['menu_name' => 'my-menu-name']);
  foreach ($my_menu as $menu_item) {
    $parent_id = $menu_item->getParentId();
    if (!empty($parent_id)) {
      $top_level = $parent_id;
      break;
    }
  }
  $menu_link = MenuLinkContent::create([
    'title' => 'My menu link title',
    'link' => ['uri' => 'internal:/my/path'],
    'menu_name' => 'my-menu-name',
    'parent' => $top_level,
    'expanded' => TRUE,
    'weight' => 0,
  ]);
  $menu_link->save();