Score:0

เงื่อนไข Webform สำหรับการเลือกหลายค่า

ธง cn

ฉันกำลังทำแบบทดสอบโดยใช้ Webform ฉันต้องการใช้รายการแบบเลือกหลายค่าสำหรับคำถามข้อใดข้อหนึ่ง และต้องการให้คะแนนผู้ใช้จากคำตอบที่ถูกต้องที่เลือกไว้

ตัวอย่างการใช้ Cute Kittens เริ่มต้นขององค์ประกอบ Webform Image Select สำหรับค่าที่เลือก:

  1. ลูกแมว_1
  2. ลูกแมว_2
  3. ลูกแมว_3
  4. ลูกแมว_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;
No Sssweat avatar
ua flag
คุณพิจารณาใช้ [โมดูลแบบทดสอบ](https://www.drupal.org/project/quiz) หรือไม่
Cameron avatar
cn flag
ใช่ ดูเหมือนว่าค่อนข้างจะบั๊กในขณะนี้ และเกินความจำเป็นสำหรับสิ่งที่เราต้องการด้วย

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา