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());
}
}
}