Answers:
就像我在《如何从节点模板中的实体引用呈现字段》中写的一样?[Drupal 8],content是一个渲染数组,其中包含准备显示的数据。
如果要检查或比较某些内容,请改用节点对象上可用的值。
{% if node.field_example.value %}
。
请注意,该属性取决于字段类型。如果是参考字段,则需要使用target_id。参考的问题链接到实体字段API备忘单,其中列出了常见的字段类型及其属性。
您不能确定内容内部的渲染数组的结构,因此这可能不是最佳方法。
这可能是一个更好的解决方案:
{% if content.field_example|render|striptags|trim %}
<p>field is not empty</p>
{% endif %}
这将检查渲染字段是否生成任何输出。
但这取决于您如何配置字段格式以及尝试执行的操作。例如,如果该字段为空,则可以配置为显示标签。然后,您必须对此进行调整。如果您不依赖于呈现的输出,而只想检查字段是否在数据库中具有值,请使用节点对象。请参阅Berdir的答案。
检查Twig模板(Field Collection)
模板中的字段是否不为空:field-collection-item--field-services.html.twig
安装“ 字段树枝值模块”以使用“ | field_value ” 获取值,后跟“ 不是空值 ”
{% if content.field_work|field_value is not empty %}
...
{% endif %}
{% if not (node.field_whatever.isEmpty == true) and content.field_whatever is defined %}
<div class="whatever_markup">
{{ content.field_whatever }}
</div>
{% endif %}
该解决方案非常防弹,甚至可以在可重用和/或共享模板(例如,跨node--teaser.html.twig
多个包共享)中使用,因为
双重否定not ...isEmpty == true
是必要的,否则不存在的字段将使检查失败。我还相信,与涉及渲染字段的任何检查相比,我的解决方案可以更快,更灵活地处理错误。
这适用于任何实体模板,例如,您只需在模板文件中替换node.field_xxx
为paragraph.field_xxx
paragraph.html.twig