树枝中选定无线电的总和值

问题描述 投票:0回答:1

我想在 Drupal Webform 表单中总结所选无线电的所有值(所有

q_
键选中的值)。现在我这样做
data.q_1 + data.q_2 +  data.q_3 +  data.q_4 +  data.q_5
但我想要一种更有效的方法来避免必须键入所有
data.q_#
因为每个组中有很多
q_
。我用
computed_twig
过滤器尝试了这个(在 Webform 的
reduce
元素中):

{% set questions = qp1.ps1|filter((v,k) => k starts with 'q_') %}
{{ questions | reduce((carry, v) => carry + v) }}

以上是给我一个

Unsupported operand types
错误。

这是我的 yaml 代码的最小示例:

qp1:
  '#type': wizard_page
  '#title': 'Part I'
  '#open': true
  ps1:
    '#type': details
    '#title': title...
    '#required': true
    '#attributes':
      class:
        - qp1_1
    q_1:
      '#type': radios
      '#title': q1.....
      '#options':
        - 'option 1 with value 0'
        - 'option 2 with value 1'
        - 'option 3 with value 2'
        - 'option 4 with value 3'
      '#required': true
    q_2:
      '#type': radios
      '#title': q2....
      '#options':
        - 'option 1 with value 0'
        - 'option 2 with value 1'
        - 'option 3 with value 2'
        - 'option 4 with value 3'
      '#required': true
    q_3:
      '#type': radios
      '#title': q3.....
      '#options':
        - 'option 1 with value 0'
        - 'option 2 with value 1'
        - 'option 3 with value 2'
        - 'option 4 with value 3'
      '#required': true
    q_4:
      '#type': radios
      '#title': q4.......
      '#options':
        - 'option 1 with value 0'
        - 'option 2 with value 1'
        - 'option 3 with value 2'
        - 'option 4 with value 3'
      '#required': true
    q_5:
      '#type': radios
      '#title': q5........
      '#options':
        - 'option 1 with value 0'
        - 'option 2 with value 1'
        - 'option 3 with value 2'
        - 'option 4 with value 3'
      '#required': true
twig
1个回答
0
投票

我终于找到了一个非常干净的解决方案,我希望它能像我一样让人们免于沮丧和数小时的搜索、试验和阅读无济于事。我只是在我的

computed_twig
模板中使用了它。使用
for
循环遍历
data
数组并仅汇总以
q_
:

开头的键的值
    {% set sum = 0 %}
     {% for key, value in data %}
      {% if key matches '/^q_\\d+$/' %}
       {% set sum = sum + value %}
      {% endif %}
     {% endfor %} {{ sum }}

这对我的案例来说完全符合预期,并且让我不必根据我有的几十个问题的数量输入太多

data.q#

注意:对于我使用的命名(q_1,q_2 ...),对于数组中的每个键值对,我们检查键是否与模式

/^q_\d+$/
匹配。此模式匹配任何以
q_
开头后跟一位或多位数字的键。如果键匹配此模式,我们将值添加到 sum 变量。循环完成后,sum 变量将包含与模式匹配的键的所有值的总和。您可能想要编辑模式(
q_
部分)以匹配您的按键命名。

© www.soinside.com 2019 - 2024. All rights reserved.