Пример добавления вкладки для материалов типа 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
Похожие записи
Комментарии
как установить тему для страницы таба,
например, чтоб была как на странице редактирования ноды (админская)
а что за строка такая в links.task.yml?
base_route: entity.node.canonical
Страница на которой выводятся нужные табы
Добавить комментарий