在page.html.twig内部渲染节点字段


12

我的内容类型中有一个图片字段(field_hero_image)。

我不希望它呈现在node.html.twig文件中。但是,我确实想在page.html.twig文件中呈现它。具体来说,我想将其与页面标题一起呈现。

我将在page.html.twig文件中使用什么代码来访问节点级字段并进行渲染?

(张贴了类似的问题,但我无法使用那里提供的答案来解决我的问题。)

这适用于Drupal 8主题。


2
@kiamlaluno-您为什么编辑我的问题??考虑到Drupal 6和7内容的盛行,标题AND中的“ Drupal 8”标题对于潜在的提升提供商来说是显而易见的,并且使得在Google中更容易找到它;使Drupal 8问题/答案非常清晰,有助于整个社区寻找D8特定答案。想知道您更改它的理由是什么。
kraftybasterd

请不要在问题标题中重复标签;标签在每个可见问题的位置都可见,因此无需在问题标题中也使用标签。
kiamlaluno

2
显然,我是新来的...但是元标记(在本例中为“ 8”)对搜索引擎结果有帮助吗?我觉得包含Drupal 8或Drupal 7的内容标题可能会帮助人们通过Google搜索答案……不过这只是一个主意。
kraftybasterd

Answers:


26

经过大量的研究之后,我能够在其他问题和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条件,但这超出了此问题/答案的范围。


我对此持怀疑态度,给人的印象是在D7中这种事情应该总是存在于例如预处理功能中。但是,file_url()在docs(drupal.org/docs/8/theming/twig/functions-in-twig-templates)中的示例确实做到了这一点,因此大加赞赏。
格雷厄姆C

如何遍历特定内容类型并在其中输出其字段值page.html.twig
Naourass Derouichi

2

有三种方便的方法可以使用这些方法,所有这些方法都可以节省您在复杂的渲染数组中进行挖掘的时间。

  1. 使用Display Suite(带有子模块ds_extras),您可以为英雄区域分配一个块(“块区域”),该块是一种不同的显示模式(即仅包含英雄图像的一种显示模式)。因此,您可以同时显示两种不同的显示模式。请注意,如果执行此操作,某些预处理钩子可能不会触发。

  2. twig_tweak模块极大地简化了此类任务,并且可以为字段值提供更简单的twig语句。看一下备忘单的一些常见用法:{{ drupal_field('field_image', 'node', 1) }}函数签名为:drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)

  3. twig_field_value模块,使简单的树枝的语句。根据README.txt:<img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />

如果我早知道这一点,那将为我节省大量时间!


1
这是正确的答案。以我的经验,{{ node.field_some_name.value }}不会渲染该字段。它不会调用整个主题系统(预处理功能,模板等)。OTOH,如果您使用该twig_tweak模块,则可以使用{{ node.field_some_name|view }}
kentr 18'Dec 19'18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.