Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Добавить ссылку в меню

24/04/2020, by maria

Теперь, когда мы создали заполнитель для нашей страницы настроек модуля, давайте добавим ссылку для меню. В приведенных ниже инструкциях показано, как создать ссылку меню на модуль hello_world в разделе «Разработка» на странице «Администратор> Конфигурация» (http://example.com/admin/config).

В корневой папке вашего модуля создайте новый файл с именем 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-й строке (мы используем именованное пространство из первой строки примера файла маршрутизации). Название и описание будут отображаться в разделе «Разработка». Обратите внимание, что родительская строка описывает родительскую ссылку для меню. Другими словами, ссылка на меню будет создана под admin, config, development.

Это добавит ссылку на путь, указанный в hello_world.content (в данном примере hello_world.routing.yml) на страницах администрирования вашего сайта на вкладке «Конфигурация» (URL-адрес/admin/config) в разделе «Разработка». Конечно, вам нужно будет очистить кэш, чтобы изменения вступили в силу.

После очистки кеша вы найдете ссылку меню «Настройки модуля 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-файлов и пользовательских модулей таким образом, вы получаете не редактируемые ссылки меню пользовательского интерфейса. Вы можете изменить ссылки только через файл 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();

 

Source URL:

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.