我想在 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
我终于找到了一个非常干净的解决方案,我希望它能像我一样让人们免于沮丧和数小时的搜索、试验和阅读无济于事。我只是在我的
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_
部分)以匹配您的按键命名。