Tôi đang làm một bài kiểm tra sử dụng Webform. Tôi muốn sử dụng danh sách lựa chọn đa giá trị cho một trong các câu hỏi và muốn chấm điểm người dùng dựa trên bất kỳ tổ hợp câu trả lời đúng nào được chọn.
Sử dụng hình ảnh Webform Select mặc định của phần tử Cute Kittens làm ví dụ, cho các giá trị của lựa chọn:
- mèo con_1
- mèo con_2
- mèo con_3
- mèo con_4
Tôi muốn có thể nói rằng một sự kết hợp cụ thể của các lựa chọn là câu trả lời đúng. Giả sử mèo con_1 và mèo con_3, khi chúng được chọn, nó sẽ hiển thị phần tử có nội dung "Câu trả lời đúng!".
Từ những gì tôi có thể thấy về các điều kiện, chúng không thể được áp dụng cho nhiều giá trị. Tôi có thể tạo tùy chọn 'mẫu', nhưng điều đó sẽ chỉ cho tôi biết nếu mèo con_1 hoặc mèo con_3 hoặc cả hai được chọn, chứ không phải nếu cả hai đều được chọn.
Nếu điều này là không thể nếu không có mã tùy chỉnh, thì nó có thể được thêm thông qua một plugin, v.v., tôi cũng không thể tìm ra điều đó.
Tôi muốn giới thiệu điều này cho ai đó, vì vậy tôi đã sửa đổi mô-đun để thêm nó, khác bên dưới, nhưng rất giống một cách tốt hơn.
diff -r /tmp/webform/js/webform.states.js web/modules/contrib/webform/js/webform.states.js
115,119d114
< other if ('multi_value' trong tham chiếu) {
< const multiValue = tham chiếu['multi_value'].split(',');
< const equal = (multiValue.length === value.length) && (multiValue.sort().every((v, i) => v === value[i]));
< trả về bằng nhau;
< }
diff -r /tmp/webform/src/Element/WebformElementStates.php web/modules/contrib/webform/src/Element/WebformElementStates.php
485,486d484
< [$trigger_selector => ['value' => 'multi_value']],
< 'hoặc',
945c943
< otherif (in_array($trigger, ['multi_value', 'pattern', '!pattern', 'less', 'less_equal', 'greater', 'greater_equal', 'between', '!between'])) {
---
> otherif (in_array($trigger, ['pattern', '!pattern', 'less', 'less_equal', 'greater', 'greater_equal', 'between', '!between'])) {
1105d1102
< 'multi_value' => t('Đa giá trị'),
diff -r /tmp/webform/src/WebformEntityConditionsManager.php web/modules/contrib/webform/src/WebformEntityConditionsManager.php
75d74
< 'multi_value' => $this->t('có giá trị'),
233c232
< if (in_array($trigger_substate, ['multi_value', 'pattern', '!pattern', 'less', 'less_equal', 'greater', 'largeer_equal', 'between', '!between'])) {
---
> if (in_array($trigger_substate, ['pattern', '!pattern', 'less', 'less_equal', 'greater', 'greater_equal', 'between', '!between'])) {
diff -r /tmp/webform/src/WebformSubmissionConditionsValidator.php web/modules/contrib/webform/src/WebformSubmissionConditionsValidator.php
764c764
< if (in_array($trigger_substate, ['multi_value', 'pattern', '!pattern', 'less', 'less_equal', 'greater', 'largeer_equal', 'between', '!between'])) {
---
> if (in_array($trigger_substate, ['pattern', '!pattern', 'less', 'less_equal', 'greater', 'greater_equal', 'between', '!between'])) {
775,778c775
< if ($element_plugin->hasMultipleValues($element) && $trigger === 'multi_value') {
< $result = $this->checkConditionTrigger($trigger, $trigger_value, (mảng) $element_value);
< }
< otherif ($element_plugin->hasMultipleValues($element) && $trigger !== 'empty') {
---
> if ($element_plugin->hasMultipleValues($element) && $trigger !== 'empty') {
832,837d828
<
< trường hợp 'multi_value':
< sắp xếp($element_value);
< $multi_values = phát nổ(',', $trigger_value);
< sắp xếp($multi_values);
< return $multi_values === $element_value;