Как переопределить шаблон страницы для определенного типа материала с определенным типом отображения

Главные вкладки

Аватар пользователя buddy90210 buddy90210 23 мая 2021 в 19:25

Если коротко то как сделать следующее:
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

А вот как сделать разные шаблоны страниц для определенного типа отображения?

Комментарии

Аватар пользователя marassa marassa 23 мая 2021 в 19:34

А каким образом Вы выводите на страницу ноду с кастомным типом отображения? Как Друпал понимает, что вот на этой странице ноду надо рендерить в custom_view, а не в default/full?

Аватар пользователя buddy90210 buddy90210 23 мая 2021 в 19:49

Это делает модуль View Mode Page
Но это на самом деле не особо важно, можно и в препроцессе ноды это определить, на уровне PAGE, что в препроцессе что в hook suggestion только объект ноды.
Пробовал из запроса брать get параметр, но он кэшируется и это все работает только раз, а отключать кэш никак нельзя.

<?php
$query 
= \Drupal::request()->query->get('q');
?>
Аватар пользователя marassa marassa 23 мая 2021 в 19:54

buddy90210 wrote: Пробовал из запроса брать get параметр

Как раз это и хотел посоветовать.

buddy90210 wrote: он кэшируется и это все работает только раз, а отключать кэш никак нельзя.

Вот это странно, должно отключаться как-то...

Аватар пользователя buddy90210 buddy90210 23 мая 2021 в 19:56

Что то в этом роде)

<?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

Аватар пользователя marassa marassa 23 мая 2021 в 20:09

По идее можно попробовать что-то типа этого в рендер-массив запихнуть:

  '#cache' => [
    'contexts' => [
      'url.query_args:q'
    ]
 ]

Но если это внешний кэш гадит, то надо с ним, конечно, разбираться.