Рейтинг:1

Изменение пользовательского шаблона из кода

флаг pt

Как программно удалить блоки и другие элементы из одного пользовательского шаблона?

В моем пользовательском модуле я определил маршрут к контроллеру, который затем загружает шаблон, который также содержится в том же модуле. Я успешно загружаю данные из контроллера в шаблон.

Моя проблема в том, что шаблон наследует блоки и меню от активной темы, которую мне нужно удалить, но только в шаблоне модулей. Например, блоки поиска и основной навигации не должны отображаться.

Я реализовал:

функция mymodule_export_preprocess_page(&$variables)
{
  unset($variables['page']['header']['searchform']);
  unset($variables['page']['menu_primary']);
}

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

Я также ищу что-то вроде hook_page_alter что не смог найти ничего подходящего для задачи.

Рейтинг:2
флаг bd

Я думаю, вы путаете темы и шаблоны.

А тема представляет собой набор файлов, которые контролируют отображение вашего сайта с помощью файлов шаблонов, CSS и Javascript (в основном это, если вы покопаетесь, есть еще кое-что).

А файл шаблона это всего лишь один из этих файлов в теме.

Итак, причина, по которой логика в вашем hook_preprocess_page влияет на каждую страницу, заключается в том, что вы безоговорочно применяете эти изменения. Эти хуки предварительной обработки (если они определены в модуле) применяются к активной теме для любого запроса страницы, независимо от того, какая тема используется.

Немного сложно предложить конкретное решение в вашем случае, не видя дополнительного кода, например. с вашего контроллера, но вы можете попробовать что-то вроде этого (псевдокод):

функция mymodule_export_preprocess_page(&$variables) {
  if (\Drupal::routeMatch()->getRouteName() === 'route.to.controller') {
    unset($variables['page']['header']['searchform']);
    unset($variables['page']['menu_primary']);
  }
}
флаг pt
Спасибо Берлинер. Я слишком увлекся решением, ориентированным на хуки, и совсем забыл о скромном операторе if.

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

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.