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

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

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

Мне нужно отобразить изображения «Атмосфера» в одной части шаблона узла и его изображения «Разбивка плитки» в другой части шаблона узла. Все изображения были настроены как colorbox с различными стилями изображения.

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

Я также пробовал это, но с таким же успехом.

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

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


person Eloy Ruiz    schedule 05.04.2018    source источник
comment
Можете ли вы показать нам, что вы уже пробовали (соответствующий шаблон Twig). Облегчает понимание того, что вы хотите. Звучит немного похоже на вашу проблему: как визуализировать изображение Drupal в шаблоне Twig? Иннит?   -  person leymannx    schedule 06.04.2018
comment
Если да, то взгляните на этот drupal.stackexchange.com/a/219052/15055.   -  person leymannx    schedule 06.04.2018


Ответы (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());
    }
  }
}
person David Fells    schedule 12.04.2018