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

01.05.2019

Пример добавления вкладки для материалов типа 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 6/7

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

Комментарии

Гость
19.08.2020, 16:52

как установить тему для страницы таба,
например, чтоб была как на странице редактирования ноды (админская)

Дмитрий
16.03.2022, 17:57

а что за строка такая в links.task.yml?
base_route: entity.node.canonical

Страница на которой выводятся нужные табы

Добавить комментарий