Рейтинг:0

Доступ к полю «Абзац» из родительского абзаца

флаг us

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

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

У меня есть этот код:

 {% для ключа, элемент в content.field_faq_section_question if key|first != '#' %}
  {{ предмет }}
    
{% конец для %}

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

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

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

Я бы хотел:

 {% для ключа, элемент в content.field_faq_section_question if key|first != '#' %}
  {{элемент.название}}
    {{элемент.текст}}
{% конец для %}

Как лучше всего это сделать?

4uk4 avatar
флаг cn
*Чтобы использовать ключ для добавления идентификатора в div-оболочку*, вам нужен шаблон поля, а не шаблон абзаца: `field--paragraph--field-faq-section-question.html.twig`
sonfd avatar
флаг in
Вы должны быть осторожны, делая такие вещи. Если вы визуализируете такие вещи, вы не отображаете все поле целиком, возможно, пропуская важные метаданные кэша или атрибуты и т. д., которые могли быть добавлены модулями или темами. Вообще говоря, вам лучше не бороться с системами Drupal, чтобы «не создавать еще один файл» или по какой-то аналогичной причине. Я обещаю, что в конце концов борьба с этими системами настигнет вас. :)
Рейтинг:0
флаг cn

Во-первых, я бы рекомендовал https://www.drupal.org/project/twig_xdebug чтобы помочь вам отладить внутри шаблонов ветки. Это сделает вашу жизнь в 100 раз легче.

Ваша проблема в том, что content.field_faq_section_question представляет собой массив рендеринга, поэтому цикл по его «элементам» на самом деле не является циклом по объектам, на которые ссылаются, — это цикл по элементам массива рендеринга. Вот почему вам нужно было добавить эту надоедливую проверку того, начинается ли ключ с #.

Если вы хотите перебрать стоимость поля ссылки, то вам нужно перебрать #Предметы. Затем вам нужно захватить фактический абзац, на который ссылаются, чтобы получить доступ к его полям, что можно сделать с помощью [some_entity_reference_item].entity.

{% для k, параграф_ссылка в content.field_faq_section_question['#items'] %}
  {% установить параграф = параграф_reference.entity%}
  {% set my_id = para.field_some_text_field.0.value %}

  <div id="{{ мой_id }}">
    // ... все, что вы хотите отобразить
    // Я думаю, это будет работать так же, как {{ item }}, который вы уже используете
    {{ content.field_faq_section_question[k] }}
  </div>
{% конец для %}

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

William Breindel avatar
флаг us
Это то, что мне нужно и нужно знать. Огромное спасибо. работает как шарм.
флаг cn
Большой! Пожалуйста, примите этот ответ, когда сможете, чтобы бот SE не вернул его на первую страницу в остальное время. :)

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

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