Drupal 8 - Показать поле визуализированного абзаца в шаблоне узла

У меня есть тип контента под названием "Коллекция", который показывает свойства коллекции плитки. Одним из его полей является "Окружение", и это абзац с полем изображения, текстовым полем и другим подпунктом под названием "Разбивка плитки", состоящим из изображения, имени, формата и различных параметров отображения.

Ambience
--Image
--Text
--Tile breakdown
----Image
----Name
----Format
----Container width
----[Other display options]

Мне нужно визуализировать изображения "Окружение" в одной части шаблона узла, а изображения "Разбивка плитки" - в другой части шаблона узла. Все изображения были настроены как colorbox с различными стилями изображения.

Я хотел бы знать, как я могу показать эти изображения, но уже в отрисованном виде, со всеми элементами colorbox. Я попытался поиграться с функцией препроцессора, добавив абзац к $variable ['content'] и используя drupal_entity() из Twig Tweak, но мне не удалось заставить его работать.

Я тоже попробовал это, но с такой же удачей.

Кто-нибудь знает, как это сделать?

Заранее спасибо!

1 ответ

Если вы хотите перетащить свойства абзаца "вверх" на уровень узла, вам придется сделать это в шаблоне. Вы можете упростить функцию предварительной обработки, чтобы извлечь нужные поля абзаца и добавить их в качестве переменных. Ниже приведен пример, где вы собираете все изображения плитки в переменный массив ambiance_images, с которым вы можете работать в своем шаблоне. Это, вероятно, упрощенно структурно для того, что вам нужно, но должно заставить вас двигаться в правильном направлении. Обратите внимание, что предполагается, что вы установили стиль изображения (вы должны) и назвали его "плиткой".

function mytheme_preprocess_node(&$vars) {
  $node = $vars['node'];
  $type = $node->getType();
  $mode = $vars['view_mode'];

  if ($type == 'collection' && $mode == 'default') {
    $vars['ambiance_images'] = [];
    $style = \Drupal::entityTypeManager()->getStorage('image_style')->load('tile');
    $tiles = $node->get('field_ambience')->referencedEntities()->first()->get('field_tiles')->referencedEntities();
    foreach ($tiles as $tile) {
      $vars['ambiance_images'][] = $style->buildUrl($tile->get('field_image')->entity->getFileUri());
    }
  }
}
Другие вопросы по тегам