Drupal 8 - 在节点模板中显示渲染的段落字段

时间:2018-04-05 13:47:55

标签: drupal twig paragraphs

我有一个名为“Collection”的内容类型,它显示了tile集合的属性。其中一个字段是“Ambiences”,它是一个带有图像字段,文本字段和另一个名为“Tile breakdown”的子段,由图像,名称,格式和不同的显示选项组成。

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

我需要在节点模板的一部分上呈现“氛围”图像,并在节点模板的另一部分上呈现其“平铺细分”图像。所有图像都配置为具有不同图像样式的彩色框。

我想知道,我怎样才能以一种已经渲染的方式显示这些图像,包含所有颜色框的内容。我尝试使用预处理功能将段落添加到$ variables ['content']并使用来自Twig Tweak的drupal_entity(),但我无法使其工作。

我也试过this,但幸运的是。

有人知道怎么做吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果要将段落属性“up”拉入节点级别,则必须在模板中执行此操作。您可以使用预处理功能更轻松地提取所需的段落字段并将其添加为变量。下面是一个示例,您将所有图块的图像收集到一个名为ambiance_images的变量数组中,然后您可以在模板中使用它。这可能在结构上过于简单,无法满足您的需求,但应该让您朝着正确的方向前进。请注意,它假设您已设置图像样式(您应该)并将其命名为“tile”。

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