ฉันกำลังทำแบบทดสอบโดยใช้ Webform ฉันต้องการใช้รายการแบบเลือกหลายค่าสำหรับคำถามข้อใดข้อหนึ่ง และต้องการให้คะแนนผู้ใช้จากคำตอบที่ถูกต้องที่เลือกไว้
ตัวอย่างการใช้ Cute Kittens เริ่มต้นขององค์ประกอบ Webform Image Select สำหรับค่าที่เลือก:
- ลูกแมว_1
- ลูกแมว_2
- ลูกแมว_3
- ลูกแมว_4
ฉันอยากจะบอกได้ว่าการเลือกชุดค่าผสมใดชุดหนึ่งเป็นคำตอบที่ถูกต้อง พูดว่า kitty_1 และ kitty_3 เมื่อเลือกแล้ว ควรแสดงองค์ประกอบที่ระบุว่า "คำตอบที่ถูกต้อง!"
จากที่ฉันเห็นเงื่อนไข ไม่สามารถใช้กับหลายค่าได้ ฉันสามารถสร้างตัวเลือก 'รูปแบบ' ได้ แต่นั่นจะบอกฉันได้ก็ต่อเมื่อเลือก kitty_1 หรือ kitty_3 หรือทั้งสองอย่างเท่านั้น ไม่ใช่ว่าเลือกทั้งสองอย่าง
หากไม่สามารถทำได้หากไม่มีรหัสที่กำหนดเอง สามารถเพิ่มผ่านปลั๊กอิน ฯลฯ ฉันก็คิดไม่ออกเช่นกัน
ฉันต้องการสาธิตสิ่งนี้ให้ใครบางคนเห็น ดังนั้นฉันจึงแก้ไขโมดูลเพื่อเพิ่มส่วนต่างด้านล่าง แต่เป็นวิธีที่ดีกว่ามาก
diff -r /tmp/webform/js/webform.states.js web/modules/contrib/webform/js/webform.states.js
115,119d114
< อื่นถ้า ('multi_value' ในการอ้างอิง) {
< const multiValue = การอ้างอิง ['multi_value'].split (',');
< const เท่ากับ = (multiValue.length === value.length) && (multiValue.sort().every((v, i) => v === value[i]));
< กลับเท่ากับ;
< }
diff -r /tmp/webform/src/Element/WebformElementStates.php เว็บ/โมดูล/contrib/webform/src/Element/WebformElementStates.php
485,486d484
< [$trigger_selector => ['value' => 'multi_value']],
< 'หรือ'
945c943
< elseif (in_array($trigger, ['multi_value', 'pattern', '!pattern', 'less', 'less_equal', 'greater', 'greater_equal', 'between', '!between'])) {
---
> elseif (in_array($trigger, ['pattern', '!pattern', 'less', 'less_equal', 'greater', 'greater_equal', 'between', '!between'])) {
1105d1102
< 'multi_value' => t('หลายค่า'),
diff -r /tmp/webform/src/WebformEntityConditionsManager.php web/modules/contrib/webform/src/WebformEntityConditionsManager.php
75d74
< 'multi_value' => $this->t('มีค่า'),
233c232
< if (in_array($trigger_substate, ['multi_value', 'pattern', '!pattern', 'less', 'less_equal', 'greater', 'greater_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', 'greater_equal', 'between', '!between'])) {
---
> if (in_array($trigger_substate, ['pattern', '!pattern', 'less', 'less_equal', 'greater', 'greater_equal', 'between', '!between'])) {
775,778c775
< ถ้า ($element_plugin->hasMultipleValues($element) && $trigger === 'multi_value') {
< $result = $this->checkConditionTrigger($trigger, $trigger_value, (อาร์เรย์) $element_value);
< }
< elseif ($element_plugin->hasMultipleValues($element) && $trigger !== 'ว่าง') {
---
> ถ้า ($element_plugin->hasMultipleValues($element) && $trigger !== 'ว่าง') {
832,837d828
<
< กรณี 'multi_value':
< sort ($ element_value);
< $multi_values = ระเบิด (',', $trigger_value);
< sort($multi_values);
< คืนค่า $multi_values === $element_value;