直接在 page.html.twig 中渲染字段
Render field directly in page.html.twig
如何直接在 page.html.twig 中呈现字段?
当我尝试将其渲染为:
{{ node.field_my_field.value }}
我得到:
Exception: Object of type Drupal\entity_reference_revisions\EntityReferenceRevisionsFieldItemList cannot be printed
当我添加一个 .value 时,它仍然无法正确呈现(好吧,我使用带有子字段的段落)但出现以下错误:
用户错误:"target_id" 是
中的无效渲染数组键
Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
User error: "target_revision_id" is an invalid render array key in Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
User error: "_loaded" is an invalid render array key in Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
User error: "_accessCacheability" is an invalid render array key in Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
那么我该如何渲染它呢?
在 Drupal 8 和 Twig 中,您可以渲染很多东西,例如:
渲染字段值
例如节点标题
{{ node.title.value }}
渲染字段实体值
例如分类术语的字段categories
{{ node.field_categories.entity.name.value }}
段落(实体)的渲染字段值
您不能在 Twig 中打印段落实体,但您可以打印每个字段
{{ node.field_my_field.entity.field_title.value }}
在前面的例子中,field_title
是我段落的一个字段。
更进一步,您可以使用模块 Bamboo Twig
呈现显示模式。
- Project page
- Article about Bamboo Twig
- Official Documentation
使用 Bamboo Twig 以显示模式渲染实体
安装模块并启用子模块后bamboo_twig_loader
。
{# Render node with nid 1 #}
{{ bamboo_render_entity('node', 1) }}
{# Render the teaser of node with nid 2 #}
{{ bamboo_render_entity('node', 2, 'teaser') }}
使用 Bamboo Twig 渲染字段
{# Render the title of node 1 #}
{{ bamboo_render_field('title', 'node', 1) }}
希望对您有所帮助!
为了在 twig 模板中呈现字段,您将需要一个 contrib 模块;除非你使用 hook_preprocess_page() 实现。
如建议答案中所述,使用 Bamboo Twig 绝对可以胜任。一开始似乎有点尴尬,你必须启用它的一个子模块才能实现这一点。
另一种更常见的解决方案是使用 Twig Tweak module with which you could do the following (copying from their cheat sheet):
{{ drupal_field('field_image', 'node', 1) }}
{{ drupal_field('field_image', 'node', 1, 'teaser') }}
{{ drupal_field('field_image', 'node', 1, {type: 'image_url', settings: {image_style: 'large'}}) }}
如何直接在 page.html.twig 中呈现字段?
当我尝试将其渲染为:
{{ node.field_my_field.value }}
我得到:
Exception: Object of type Drupal\entity_reference_revisions\EntityReferenceRevisionsFieldItemList cannot be printed
当我添加一个 .value 时,它仍然无法正确呈现(好吧,我使用带有子字段的段落)但出现以下错误: 用户错误:"target_id" 是
中的无效渲染数组键Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
User error: "target_revision_id" is an invalid render array key in Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
User error: "_loaded" is an invalid render array key in Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
User error: "_accessCacheability" is an invalid render array key in Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
那么我该如何渲染它呢?
在 Drupal 8 和 Twig 中,您可以渲染很多东西,例如:
渲染字段值
例如节点标题
{{ node.title.value }}
渲染字段实体值
例如分类术语的字段categories
{{ node.field_categories.entity.name.value }}
段落(实体)的渲染字段值
您不能在 Twig 中打印段落实体,但您可以打印每个字段
{{ node.field_my_field.entity.field_title.value }}
在前面的例子中,field_title
是我段落的一个字段。
更进一步,您可以使用模块 Bamboo Twig
呈现显示模式。
- Project page
- Article about Bamboo Twig
- Official Documentation
使用 Bamboo Twig 以显示模式渲染实体
安装模块并启用子模块后bamboo_twig_loader
。
{# Render node with nid 1 #}
{{ bamboo_render_entity('node', 1) }}
{# Render the teaser of node with nid 2 #}
{{ bamboo_render_entity('node', 2, 'teaser') }}
使用 Bamboo Twig 渲染字段
{# Render the title of node 1 #}
{{ bamboo_render_field('title', 'node', 1) }}
希望对您有所帮助!
为了在 twig 模板中呈现字段,您将需要一个 contrib 模块;除非你使用 hook_preprocess_page() 实现。
如建议答案中所述,使用 Bamboo Twig 绝对可以胜任。一开始似乎有点尴尬,你必须启用它的一个子模块才能实现这一点。
另一种更常见的解决方案是使用 Twig Tweak module with which you could do the following (copying from their cheat sheet):
{{ drupal_field('field_image', 'node', 1) }}
{{ drupal_field('field_image', 'node', 1, 'teaser') }}
{{ drupal_field('field_image', 'node', 1, {type: 'image_url', settings: {image_style: 'large'}}) }}