我的内容类型中有一个图片字段(field_hero_image)。
我不希望它呈现在node.html.twig文件中。但是,我确实想在page.html.twig文件中呈现它。具体来说,我想将其与页面标题一起呈现。
我将在page.html.twig文件中使用什么代码来访问节点级字段并进行渲染?
(张贴了类似的问题,但我无法使用那里提供的答案来解决我的问题。)
这适用于Drupal 8主题。
我的内容类型中有一个图片字段(field_hero_image)。
我不希望它呈现在node.html.twig文件中。但是,我确实想在page.html.twig文件中呈现它。具体来说,我想将其与页面标题一起呈现。
我将在page.html.twig文件中使用什么代码来访问节点级字段并进行渲染?
(张贴了类似的问题,但我无法使用那里提供的答案来解决我的问题。)
这适用于Drupal 8主题。
Answers:
经过大量的研究之后,我能够在其他问题和drupal.org上找到足够多的作品,以实现自己想做的事情。
此答案不需要预处理,因此无需在mytheme.theme文件中添加任何代码。
默认情况下,所有这些变量都可以在page.html.twig中访问。
要在page.html.twig内呈现字段的默认值,通常会像中使用Twig变量{{ node.field_some_name.value }}
。
如果您有图片字段,并且想要将URL渲染为page.html.twig模板中该字段中存储的图片,则可以使用{{ file_url(node.field_some_image.entity.fileuri) }}
。
最后,如果要在page.html.twig模板中呈现节点的标题,则可以使用{{ node.label }}
。
我还学习了如何针对我的特定问题使用一些Twig条件,但这超出了此问题/答案的范围。
file_url()
在docs(drupal.org/docs/8/theming/twig/functions-in-twig-templates)中的示例确实做到了这一点,因此大加赞赏。
page.html.twig
?
有三种方便的方法可以使用这些方法,所有这些方法都可以节省您在复杂的渲染数组中进行挖掘的时间。
使用Display Suite(带有子模块ds_extras),您可以为英雄区域分配一个块(“块区域”),该块是一种不同的显示模式(即仅包含英雄图像的一种显示模式)。因此,您可以同时显示两种不同的显示模式。请注意,如果执行此操作,某些预处理钩子可能不会触发。
twig_tweak模块极大地简化了此类任务,并且可以为字段值提供更简单的twig语句。看一下备忘单的一些常见用法:{{ drupal_field('field_image', 'node', 1) }}
函数签名为:drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)
该twig_field_value模块,使简单的树枝的语句。根据README.txt:<img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />
如果我早知道这一点,那将为我节省大量时间!
{{ node.field_some_name.value }}
不会渲染该字段。它不会调用整个主题系统(预处理功能,模板等)。OTOH,如果您使用该twig_tweak
模块,则可以使用{{ node.field_some_name|view }}