it-swarm.com.de

Drupal 8: Rendern Sie ein Feldsammlungselement in einer Twig Vorlage)

In Drupal 8) habe ich einen Inhaltstyp, der das folgende Feldsammlungsmodul verwendet:

  • field_body (FieldCollection, wiederholbar)
    • field_image_alignment (Boolean)
    • field_picture (Bild)
    • field_free_text (Langtext)

Ich möchte diese Felder thematisieren. Ich habe die Feldvorlage mit einer Datei namens field--node--field-body--news.html Überschrieben (news ist der Inhaltstyp, der diese Felder enthält.).

Die Standardvorlage lautet wie folgt:

{% for item in items %}
    <div{{ item.attributes }}>{{ item.content }}</div>
{% endfor %}

Und meine überschriebene Vorlage ist wie folgt:

{% for item in items %}
  {% if item.content['#field_collection_item'].field_image_alignment.value == 1 %}
    {{ dump(item.content['#field_collection_item'].field_picture) }}
    {% endif %}
{% endfor %}

Wie kann ich "untergeordnete" Felder field_pictures, field_free_text Rendern? Ich habe item.content['#field_collection_item'].field_image_alignment.value Verwendet, um auf den einfachen Wert zuzugreifen, möchte aber die gerenderte Ansicht haben.

Vielen Dank.

4
ldaguise

Ich habe gerade angefangen zu lernen Drupal und bin auf dasselbe Problem gestoßen. Ich habe es gelöst, indem ich einen benutzerdefinierten Feldformatierer erstellt habe:

public function viewElements(FieldItemListInterface $items, $langcode)
{
  $elements = array();
  foreach ($items as $delta => $item)
    if ($item->value !== NULL)
    {
      $builder    = \Drupal::entityTypeManager()->getViewBuilder('field_collection_item');
      $elements[] = $builder->build($builder->view($item->getFieldCollectionItem()));
    }
  return $elements;
}
2
inkognito