Рейтинг:0

Доступ к (не связанным) объектам из ветки без предварительной обработки

флаг in

В шаблоне узлов Twig я могу получить доступ, например. ссылочные поля с...

{{ node.field_my_entity_reference.0.entity.field_my_field.0.value }}

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

{{ drupal_field('field_my_field', 'узел', 1) }}

Теперь можно получить прямой доступ к полям конкретных узлов по их NID, а не просто получать визуализированный контент либо способом, который уже предоставляет Drupal, либо с помощью модуля, такого как Twig Tweak? Я знаю, что это возможно с помощью предварительной обработки, но я ищу способ сделать это непосредственно в Twig.

Рейтинг:1
флаг ve

Drupal twig не позволяет вам использовать несколько функций, но вы можете добавить пользовательские функции с помощью пользовательского расширения twig, скажем get_any_node_field_value

в ветке:

<div>
  {{get_any_node_field_value(nodeId, 'field_my_custom_name')}}
</div>

эта статья кажется, дает хорошее введение в настройку пользовательского расширения ветки. В двух словах:

web/modules/custom/your_module/src/Extension/TwigExtension.php:

<?php

пространство имен Drupal\ваш_модуль\Расширение;

используйте Twig\Extension\AbstractExtension;
использовать Twig\TwigFunction;

класс TwigExtension расширяет AbstractExtension {

  публичная функция getFunctions(): массив {
    возвращаться [
      новая TwigFunction('get_any_node_field_value', [$this, 'get_any_node_field_value']),
    ];


    общедоступная функция get_any_node_field_value ($nodeId, $fieldName) {
      // здесь ваша логика  
    }

}

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

флаг ru
Ставлю 10 баксов, это **упадет** позже на ноги :-)
флаг ve
Я бы сказал, зависит от варианта использования, но я согласен: у него определенно есть потенциал для этого ;-)
4uk4 avatar
флаг cn
Написать функции Twig с метаданными кеша или вложениями не проблема. Просто пузыри их. Это одинаково для всего вложенного контента, независимо от того, находится ли он в функции Twig или нет. Все они работают в одном и том же контексте рендеринга.

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

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