如何在Drupal专属Twig中通过ID获取指定节点为对象?
在Drupal Twig中获取指定节点对象并访问属性(Drupal 8.9.16)
问题说明
你当前使用的drupal_entity('node', '123', 'body')方法不符合预期,因为该函数的第三个参数是实体显示模式名称,而非字段名。当传入不存在的显示模式(如'body'、'title')时,系统会 fallback 到默认显示模式,因此会同时输出标题和正文。
直接获取节点对象并访问属性的Twig方案
1. 加载节点对象并直接访问字段值
使用entity_load函数加载指定ID的节点,之后可直接访问节点的各类属性:
{# 加载ID为123的节点 #} {% set target_node = entity_load('node', 123) %} {# 输出标题原始值 #} {{ target_node.title.value }} {# 输出body字段的原始文本值 #} {{ target_node.body.value }} {# 输出body字段经过过滤后的HTML内容(需用raw过滤器解析HTML) #} {{ target_node.body.value|raw }} {# 访问自定义字段,例如field_my_text(替换为你的字段机器名) #} {{ target_node.field_my_text.value }}
2. 渲染格式化后的字段(带样式)
如果需要输出符合字段配置格式的内容(比如带换行、样式的body),可使用field_view_field函数:
{% set target_node = entity_load('node', 123) %} {# 渲染格式化后的body字段 #} {{ field_view_field(target_node, 'body') }} {# 指定显示模式渲染标题,例如使用'teaser'模式 #} {{ field_view_field(target_node, 'title', 'teaser') }}
补充说明
- 确保你使用的Twig模板有足够权限访问目标节点(避免因权限问题导致加载失败)
- 节点对象的字段属性可通过
kint(target_node)打印查看完整结构(需开启Devel模块)
内容的提问来源于stack exchange,提问作者stckvrw
相关产品推荐
相关产品推荐

