Drupal如何在Twig模板中识别组类型下的字段
Twig模板调用Group类型复选框字段的正确写法
你之前尝试的三种写法失效原因如下:
content.myfields.value:content是Drupal模板里的渲染数组,存的是经过格式化处理的待渲染内容,不是字段原始存储值,直接读value拿不到复选框的布尔状态node.myfields.value:Group模块的组(Group)是独立实体,和节点(Node)是平级的实体类型,根本不会挂载在node变量下group_data.myfields.value:Group模块默认模板上下文里没有group_data这个顶层变量,属于变量名写错了
标准实现方法
- 先确认模板上下文变量:开启Twig调试后,在模板顶部加
{{ dump() }}就能打印当前所有可用变量,在组实体对应的模板(比如group.html.twig、按组类型覆写的特定模板)里,组实体对象的默认变量名是group。 - 直接从实体对象读取复选框的原始值做判断,不要从渲染数组里取值。复选框选中时存储值为
1,未选中为0,参考代码如下:
{# 注意把field_my_checkbox替换成你自己复选框字段的实际机器名 #} {% if group.field_my_checkbox.value %} <div class="custom-block"> 复选框选中时才会显示的内容 </div> {% endif %}
特殊场景适配
如果你不是在组本体的模板里,而是在和组关联的节点/其他实体模板里调用这个字段,需要先通过关联引用字段拿到组实体对象,再读字段值:
{# 先拿到关联的组实体,field_group_relation替换成你实际的组引用字段机器名 #} {% set related_group = node.field_group_relation.entity %} {% if related_group.field_my_checkbox.value %} 选中状态才显示的内容 {% endif %}
踩坑提醒:不要用
content.field_xxx.value的写法做判断,content数组里的字段值已经经过主题预处理、格式化输出,拿到的是渲染后的标记字符串或者空值,判断逻辑会失效。
内容的提问来源于stack exchange,提问作者Badgohan
相关产品推荐
相关产品推荐

