You need to enable JavaScript to run this app. Twig视图模板中如何访问行内容类型实现IF条件判断
优惠活动
大模型
产品
解决方案
定价
更多

Twig视图模板中如何访问行内容类型实现IF条件判断

代码失效的核心原因

你的判断逻辑无法生效,本质是两个关键使用错误:

  • 错误调用了PHP内置函数gettype()作为实体方法:这个函数的作用是返回变量本身的PHP数据类型(比如"string"、"array"),和Drupal的内容类型获取逻辑完全无关,导致条件判断永远无法匹配到预期值,自然走不到渲染内容的分支。
  • 在Drupal系统中,所有内容实体(节点、分类术语、媒体等)获取所属内容类型的机器名,需要调用实体自带的bundle()方法,不能混用PHP内置函数。
可直接运行的正确代码
{% for row in rows %}
  {# 安全获取行对应的实体对象,避免实体缺失时抛出语法错误 #}
  {% set row_entity = row._entity ?? null %}
  {% if row_entity and row_entity.bundle() == 'warnings' %}
    {{ row.content }}
  {% else %}
    Nothing
  {% endif %}
  {# 调试用代码,上线前请删除 #}
  {{ kint(row) }}
{% endfor %}
场景适配与排查指南

如果调整完代码仍然不生效,按以下顺序逐点核对:

  • 确认视图配置的变量暴露:如果你的视图采用「字段模式」而非「实体渲染模式」,默认不会把行对应的完整实体对象暴露到模板变量中。需要进入视图配置页,找到「高级」板块下的「其他-可用变量」选项,勾选「行实体(Row entity)」,否则模板中获取到的row._entity 会是空值,判断逻辑自然失效。
  • 核对内容类型机器名的准确性:可以临时在模板中打印实际取值{{ kint(row._entity.bundle()) }},确认输出的字符串和你判断语句里的warnings在拼写、大小写上完全一致,避免因为拼写偏差(比如漏写s、大小写不匹配)导致匹配失败。
  • 冗余语法说明:你之前写循环时定义了key变量但全程没有使用,这个写法不影响代码运行,但属于冗余语法,不需要在不需要索引的场景下特意声明。
  • 写法兼容性说明:Drupal的Twig运行环境对实体的get类方法做了魔术映射,bundle() 方法也可以直接用属性形式row._entity.bundle 取值,但为了适配不同类型的实体对象、减少环境依赖问题,更推荐显式调用方法的写法。

内容的提问来源于stack exchange,提问作者IDI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 14:15:07