Рейтинг:1

Доступ к значению узла в шаблоне ветки абзаца

флаг es

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

В частности, я хотел бы получить доступ к значению текстового поля под названием «field_runner_id». Я получаю доступ к этому значению в моем шаблоне ветки страницы/узла следующим образом:

content.field_runner_id|field_value

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

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

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

Например этот пост: https://mark.ie/blog/printing-values-of-a-parent-node-from-a-drupal-paragraphs-field ... помог мне получить родительскую страницу и nid, добавив это в мой шаблон абзаца:

{% set parent = para._referringItem.parent.parent.entity %}
{{родитель.название.значение}}
{{родитель.нид.значение}}

Я также пробовал это, среди прочего, без успеха:

{{ parent.content.field_runner_id.value }}
{{ parent.content.field_runner_id[0] }}
{{ parent.content.field_runner_id|field_value }}
Рейтинг:4
флаг ru

Предисловие: не используйте метод из этого блога, есть метод получше.

  1. что-то._referringItem не является безопасным для кеша, поэтому лучше не использовать его внутри шаблонов Twig.
  2. что-то._referringItem не выполняет никаких проверок доступа
  3. параграф._referringItem.parent.parent.entity возможно, самая длинная и запутанная альтернатива написанию параграф.parentEntity

Итак, теперь реальный ответ :-)

параграф.parentEntity возвращает необработанный объект родительской сущности (очень похожий на пункт переменная), но он не включает в себя массив рендеринга, такой как содержание. Так что вам тоже не нужно .содержание тебе не нужно |field_value.

Вместо этого перейдите непосредственно к значению поля parent.field_on_hostnode.0.value


Дополнительные сведения о переменных в шаблонах сущностей:

содержание = полный массив рендеринга сущности

content.field_something = визуализировать массив одного поля

content.field_something|field_value = вернуть необработанное значение поля из массива рендеринга (требуется модуль «Значение поля Twig»)

юридическое лицо = необработанный объект сущности (замените сущность на узел в шаблоне узла, пункт в шаблоне абзаца и т. д.).

entity.field_something.value = не рекомендуется, будет вести себя по-разному в зависимости от типа поля и мощности поля

entity.field_something.getValue() = получить массив необработанных значений полей, работает для всех типов полей и всех мощностей полей

entity.field_something.0.value = получить первое значение поля необработанных данных (для полей открытого текста, чисел, адресов электронной почты, поля телефона; не будет работать со ссылками, изображениями, ссылками на сущности...)

entity.field_something.0.name_of_database_column = получить первое подзначение необработанных данных name_of_database_column field_something (это может быть формат в форматированном текстовом поле, конечное_значение в поле диапазона дат, target_id в поле ссылки на объект,...)

Только поле ссылки на сущность:

Обратите внимание, что следующие методы не являются безопасными для кэша, не поддерживают язык и не выполняют проверки доступа.

entity.field_reference.0.target_id = получить числовой идентификатор первого дочернего объекта, на который ссылаются

entity.field_reference.0.entity = первый объект дочерней сущности, на который ссылаются (без массива рендеринга!)

entity.field_reference.0.entity.getTranslation('de') = получить немецкий перевод первого дочернего объекта

Только абзацы:

параграф.parentEntity = объект прямого родительского объекта (без массива рендеринга!)

Kevin avatar
флаг in
Также важно, что при обходе рендеринга вы можете потерять проверки доступа.
флаг ru
Хороший намек, я добавил это к ответу. Насколько я знаю, то же самое верно для любого `field_foo.0.entity`
scaffolding avatar
флаг es
Это действительно полезно. Спасибо @Худри
Рейтинг:3
флаг ve

Я думаю, что это проще, чем вы думаете:


{% set parentNode = para.parentEntity %}
<!-- parentNode уже является объектом node, поэтому теперь вы можете получить доступ к любому полю напрямую, минуя объект содержимого --->

{{ parentNode.field_runner_id.value }}

Что облегчит вашу жизнь в целом, так это установка развиваться и devel_kint_extras модуль для разработки.

Затем вы можете исследовать сложную структуру объекта drupal и найти правильное значение поля:

{{kint(родительский узел)}}

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

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