Ссылки меню, вкладки и кнопки действий
Маршрут создаёт страницу, но ссылки на неё нигде нет — адрес нужно знать. Чтобы страница появилась в меню сайта, во вкладках или в виде кнопки, модуль добавляет ещё один небольшой файл YAML. Все три файла лежат в корне папки модуля и создаются вручную.
Ссылка в меню
# web/modules/custom/blog/blog.links.menu.yml
blog.list:
title: 'Блог'
route_name: blog.list
menu_name: mainПосле drush cr в главном меню сайта появится пункт «Блог», ведущий на /blog. Ссылка указывает не адрес, а имя маршрута из blog.routing.yml.
| Ключ | Что означает |
|---|---|
blog.list | Имя ссылки. Удобно повторять имя маршрута |
title | Текст пункта меню |
route_name | Маршрут, на который ведёт ссылка |
menu_name | Меню: main — главное, footer — в подвале, admin — панель |
weight | Порядок: чем меньше число, тем выше пункт |
parent | Имя родительской ссылки для вложенного пункта |
Вложенный пункт
# web/modules/custom/blog/blog.links.menu.yml
blog.about:
title: 'О блоге'
route_name: blog.about
menu_name: main
parent: blog.list
weight: 10Пункт «О блоге» станет дочерним для «Блог». Будет ли он виден, зависит от настроек блока меню в теме: по умолчанию главное меню показывает один уровень.
Ссылка в панели
Страницы настроек помещают в меню панели, указывая родителем один из разделов «Конфигурации»:
# web/modules/custom/blog/blog.links.menu.yml
blog.settings:
title: 'Настройки блога'
description: 'Число статей на странице и заголовок.'
route_name: blog.settings
parent: system.admin_config_contentСсылка появится на странице «Конфигурация» в группе «Работа с содержимым». Маршрут blog.settings будет создан в уроке о формах настроек — добавьте эту запись тогда же.
Вкладки
Вкладки объединяют несколько страниц одного раздела. Их описывают в файле blog.links.task.yml:
# web/modules/custom/blog/blog.links.task.yml
blog.list_tab:
title: 'Статьи'
route_name: blog.list
base_route: blog.list
blog.about_tab:
title: 'О блоге'
route_name: blog.about
base_route: blog.listНа страницах /blog и /blog/about появятся две вкладки. base_route — маршрут, к которому относится группа вкладок; вкладка, у которой он совпадает с route_name, открыта по умолчанию.
Кнопка действия
Кнопка действия — заметная ссылка вверху страницы, обычно «Добавить…». Файл blog.links.action.yml:
# web/modules/custom/blog/blog.links.action.yml
blog.add_article:
title: 'Добавить статью'
route_name: node.add
route_parameters:
node_type: article
appears_on:
- blog.listНа странице /blog появится кнопка, ведущая на форму создания статьи /node/add/article. appears_on перечисляет маршруты, где кнопку показывать. Увидят её только те, кому маршрут node.add разрешён.
Частая ошибка
Ссылки меню, вкладки и кнопки проверяют доступ к маршруту: если у посетителя нет права, пункт просто не показывается. Поэтому «пропавшая» ссылка — чаще всего либо неочищенный кеш, либо опечатка в route_name, либо вы смотрите на сайт гостем, которому маршрут закрыт. Выполните drush cr и проверьте имя маршрута.