xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Добавить вкладку/таб/локальную-задачу/local-task для определённого типа материала

Опубликовано в

Пример добавления вкладки для материалов типа page:

src/Controller/ModulenameController.php

class ModulenameController extends ControllerBase {
 
  public function exampleTabContent(NodeInterface $node) {
    return ['#markup' => 'Tab content...'];
  }
 
  public function exampleTabAccess(NodeInterface $node) {
    return AccessResult::allowedIf($node->bundle() === 'page');
  }
 
}

modulename.routing.yml

entity.node.example_tab:
  path: '/node/{node}/example-tab'
  defaults:
    _controller: '\Drupal\modulename\Controller\ModulenameController::exampleTabContent'
  requirements:
    _custom_access: '\Drupal\modulename\Controller\ModulenameController::exampleTabAccess'

modulename.links.task.yml

entity.node.example_tab:
  route_name: entity.node.example_tab
  base_route: entity.node.canonical
  title: Example tab
  weight: 2

Использование _custom_access приводит к одному минусу — объект контроллера будет создаваться на всех страницах где выводятся вкладки материала. Чтобы этого не происходило можно написать свой сервис access_check или просто вынести проверку в глобальную функцию и указать её вместо \Drupal\modulename\Controller\ModulenameController::exampleTabAccess.

Написанное актуально для Drupal 8
Похожие записи

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании