Рейтинг:0

В шаблоне узла, как я могу узнать, какие регионы используются/заняты?

флаг kr

Я пытаюсь создать функцию предварительной обработки в моем файле .theme, чтобы сделать переменную доступной для шаблонов узлов.

Я хочу, чтобы переменная содержала только имена всех регионов, которые в настоящее время используются (т.е. рендеринг контента).

Идея заключается в том, что если у меня есть регион с именем left_hand_nav, который отображается на некоторых (не на всех) страницах, и у меня есть узел с именем generic_page, из моего шаблона узла generic_page я хотел бы сделать:

{% если left_hand_nav%}
 сделай что-нибудь
{% еще %}
 сделать что-нибудь еще
{% конец%}

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

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

Если бы кто-то мог указать мне в правильном направлении, я был бы очень признателен.

sonfd avatar
флаг in
Вы говорите о том, имеют ли регионы в вашем шаблоне page.html.twig контент, то есть регионы, определенные в файле .info.yml вашей темы?
abe-cedarian avatar
флаг kr
@sonfd да, но я хочу знать из шаблонов узлов.
флаг ru
Я вижу мотивацию для этого с точки зрения разработчика внешнего интерфейса, но архитектура Drupal (кэширование сущностей, BigPipe,...) делает это чрезвычайно трудным для работы даже наполовину надежным. Боюсь, для этого нет *правильного* способа.
Рейтинг:1
флаг cn

В особом случае перехода на страницу узла (например, при просмотре статьи) вы можете видеть, что при реализации hook_preprocess_page $variables действительно содержит значение «узла», если вы добавите какое-либо свойство к своим $variables['node'] , вы сможете использовать его в файле node.html.twig

Обновлять

Как и в hook_preprocess_page, вы можете получить доступ ко всем областям, используя $variables['REGION_NAME'] , чтобы вы могли проверить их, если они пусты или имеют контент, если они не были пустыми, вы можете сохранить их имя в массиве, а затем применить этот массив в $переменные['узел']

4uk4 avatar
флаг cn
Вы не можете устанавливать свойства в $variables['node']. Объект узла статически кэшируется, и все переменные, ссылающиеся на этот объект, совместно используют один и тот же экземпляр. Кроме того, страница и узел обрабатываются и кэшируются независимо друг от друга, и вы не знаете, какой из них обрабатывается первым.В большинстве случаев они даже не обрабатываются в одном и том же запросе, потому что страница и узел хранятся в разных ячейках/ключах кеша и с разными метаданными кеша.
abe-cedarian avatar
флаг kr
Спасибо @4k4, это объясняет, почему это не сработало.

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

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