You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 9中如何获取嵌套Paragraph下拉字段值实现条件判断?

解决Drupal 9嵌套段落中获取下拉字段值的问题

你遇到的核心问题是直接从content渲染数组中取值,而content存储的是经过处理的渲染结构,并非原始字段值。以下是两种正确获取嵌套段落下拉字段值的方法:

方法一:在Twig模板中直接访问实体字段

在paragraph--my_fields.html.twig模板中,通过父段落实体直接访问子段落的字段值(注意替换成你实际的字段机器名):

{%
  set classes = [
    'paragraph',
    'paragraph--type--' ~ paragraph.bundle|clean_class,
    view_mode ? 'paragraph--view-mode--' ~ view_mode|clean_class,
    not paragraph.isPublished() ? 'paragraph--unpublished'
  ]
%}
{% block paragraph %} 
  {% block content %} 
    {# 检查父段落中是否存在my_repeater_1子段落字段且有值 #}
    {% if paragraph.field_my_repeater_1 is not empty %}
      {# 获取第一个子段落实体(若为多值字段可循环处理) #}
      {% set sub_paragraph = paragraph.field_my_repeater_1.0.entity %}
      {# 获取下拉字段的原始键值(1或2) #}
      {% set dropdown_value = sub_paragraph.field_my_dropdown.value %}

      {% if dropdown_value == "1" %}
        DO X
      {% elseif dropdown_value == "2" %}
        DO Y
      {% endif %}
    {% endif %}
  {% endblock %}
{% endblock paragraph %}

关键说明:

  • paragraph.field_my_repeater_1:父段落中指向my_repeater_1子段落的字段机器名,需替换为你实际使用的名称
  • .0.entity:由于段落字段默认是多值类型,.0取第一个子段落,.entity获取子段落的实体对象
  • .field_my_dropdown.value:直接获取下拉字段的原始键值(对应你配置的1或2)

方法二:通过预处理函数传递字段值

如果需要更复杂的逻辑,可在主题的.theme文件中添加预处理函数,将字段值传递到模板:

function YOUR_THEME_preprocess_paragraph__my_fields(&$variables) {
  $paragraph = $variables['paragraph'];
  // 检查父段落是否包含目标子段落字段
  if ($paragraph->hasField('field_my_repeater_1') && !$paragraph->get('field_my_repeater_1')->isEmpty()) {
    $sub_paragraph = $paragraph->get('field_my_repeater_1')->entity;
    // 检查子段落是否包含下拉字段
    if ($sub_paragraph->hasField('field_my_dropdown') && !$sub_paragraph->get('field_my_dropdown')->isEmpty()) {
      $variables['my_dropdown_value'] = $sub_paragraph->get('field_my_dropdown')->value;
    }
  }
}

之后在paragraph--my_fields.html.twig中直接使用传递过来的值:

{%
  set classes = [
    'paragraph',
    'paragraph--type--' ~ paragraph.bundle|clean_class,
    view_mode ? 'paragraph--view-mode--' ~ view_mode|clean_class,
    not paragraph.isPublished() ? 'paragraph--unpublished'
  ]
%}
{% block paragraph %} 
  {% block content %} 
    {% if my_dropdown_value is defined %}
      {% if my_dropdown_value == "1" %}
        DO X
      {% elseif my_dropdown_value == "2" %}
        DO Y
      {% endif %}
    {% endif %}
  {% endblock %}
{% endblock paragraph %}

注意事项

  • 所有字段机器名需与你实际配置的一致(比如field_my_repeater_1、field_my_dropdown)
  • 若my_repeater_1是多值字段(可添加多个子段落),需用for循环遍历每个子段落:
    {% for item in paragraph.field_my_repeater_1 %}
      {% set sub_paragraph = item.entity %}
      {% set dropdown_value = sub_paragraph.field_my_dropdown.value %}
      {# 针对每个子段落的下拉值执行逻辑 #}
    {% endfor %}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:53:30