Если коротко то как сделать следующее:
page--article--custom_view.html.twig
С помощью этого хука:
<?php
function THEME_theme_suggestions_page_alter(array &$suggestions, array $variables) {
if ($node = \Drupal::routeMatch()->getParameter('node')) {
$content_type = $node->bundle();
$suggestions[] = 'page__'.$content_type;
}
}
?>
Можно переопределять шаблон страницы для типа контента, т.е - page--article.html.twig
А вот как сделать разные шаблоны страниц для определенного типа отображения?
Комментарии
А каким образом Вы выводите на страницу ноду с кастомным типом отображения? Как Друпал понимает, что вот на этой странице ноду надо рендерить в custom_view, а не в default/full?
Это делает модуль View Mode Page
Но это на самом деле не особо важно, можно и в препроцессе ноды это определить, на уровне PAGE, что в препроцессе что в hook suggestion только объект ноды.
Пробовал из запроса брать get параметр, но он кэшируется и это все работает только раз, а отключать кэш никак нельзя.
<?php
$query = \Drupal::request()->query->get('q');
?>
Как раз это и хотел посоветовать.
Вот это странно, должно отключаться как-то...
Кажется я понял почему в кэш запрос попадает) надо NGINX копать, на сервере с апачем все здорово работает
Что то в этом роде)
<?php
function THEME_theme_suggestions_page_alter(array &$suggestions, array $variables) {
if ($node = \Drupal::routeMatch()->getParameter('node')) {
$content_type = $node->bundle();
$query = \Drupal::request()->query->get('q');
$suggestions[] = 'page__'.$content_type.'__'.$query;
}
}
?>
URL выглядит как то так: http://example.com/node/1?q=custom_view
По идее можно попробовать что-то типа этого в рендер-массив запихнуть:
'contexts' => [
'url.query_args:q'
]
]
Но если это внешний кэш гадит, то надо с ним, конечно, разбираться.