Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Ссылки меню, вкладки и кнопки действий

Маршрут создаёт страницу, но ссылки на неё нигде нет — адрес нужно знать. Чтобы страница появилась в меню сайта, во вкладках или в виде кнопки, модуль добавляет ещё один небольшой файл 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 и проверьте имя маршрута.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.