Добавить ссылку в меню
Теперь, когда мы создали заполнитель для нашей страницы настроек модуля, давайте добавим ссылку для меню. В приведенных ниже инструкциях показано, как создать ссылку меню на модуль 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. Заголовок и путь не могут быть отредактированы».
Чтобы создать редактируемые ссылки меню, вам нужно сделать это примерно так:
$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();
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.