Puncte:0

Condiții de formular web pentru o selecție cu mai multe valori

drapel cn

Fac un test folosind Webform. Aș dori să folosesc o listă de selecție cu mai multe valori pentru una dintre întrebări și vreau să notez utilizatorul pe orice combinație de răspunsuri corecte selectate.

Folosind pisicii drăguți implicit ale elementului Webform Image Select ca exemplu, pentru valorile selecției:

  1. pisoi_1
  2. pisoi_2
  3. pisoi_3
  4. pisoi_4

Aș dori să pot spune că o anumită combinație de selecții este răspunsul corect. Spuneți kitten_1 și kitten_3, când sunt selectate, ar trebui să arate elementul care spune „Răspuns corect!”.

Din câte văd despre condiții, acestea nu pot fi aplicate mai multor valori. Aș putea crea o opțiune de „model”, dar asta mi-ar spune doar dacă fie kitten_1 sau kitten_3 sau ambele sunt selectate, nu dacă ambele sunt selectate.

Dacă acest lucru nu este posibil fără cod personalizat, poate fi adăugat printr-un plugin etc., nici eu nu îmi pot da seama.

Am vrut să fac o demonstrație cuiva, așa că am modificat modulul pentru a-l adăuga, dif de mai jos, dar mi-ar plăcea foarte mult o modalitate mai bună.

diff -r /tmp/webform/js/webform.states.js web/modules/contrib/webform/js/webform.states.js
115.119d114
< else if („multi_value” în referință) {
< const multiValue = reference['multi_value'].split(',');
< const egal = (multiValue.length === valoare.lungime) && (multiValue.sort().every((v, i) => v === valoare[i]));
< returnează egal;
<}
diff -r /tmp/webform/src/Element/WebformElementStates.php web/modules/contrib/webform/src/Element/WebformElementStates.php
485.486d484
< [$trigger_selector => ['value' => 'multi_value']],
< „sau”,
945c943
< elseif (în_array($trigger, ['multi_value', 'pattern', '!pattern', 'mai puţin', 'mai puţin_egal', 'mai mare', 'mai mare_egal', 'între', '!între'])) {
---
> elseif (în_array($trigger, ['pattern', '!pattern', 'mai puţin', 'mai puţin_egal', 'mai mare', 'mai mare_egal', 'între', '!între'])) {
1105d1102
< 'multi_value' => t('Valori multiple'),
diff -r /tmp/webform/src/WebformEntityConditionsManager.php web/modules/contrib/webform/src/WebformEntityConditionsManager.php
75d74
< 'multi_value' => $this->t('are valori'),
233c232
< dacă (în_array($trigger_substate, ['multi_value', 'pattern', '!pattern', 'mai puţin', 'mai puţin_egal', 'mai mare', 'mai mare_egal', 'între', '!între'])) {
---
> dacă (în_array($trigger_substate, ['pattern', '!pattern', 'mai puţin', 'mai puţin_egal', 'mai mare', 'mai mare_egal', 'între', '!între'])) {
diff -r /tmp/webform/src/WebformSubmissionConditionsValidator.php web/modules/contrib/webform/src/WebformSubmissionConditionsValidator.php
764c764
< dacă (în_array($trigger_substate, ['multi_value', 'pattern', '!pattern', 'mai puţin', 'mai puţin_egal', 'mai mare', 'mai mare_egal', 'între', '!între'])) {
---
> dacă (în_array($trigger_substate, ['pattern', '!pattern', 'mai puţin', 'mai puţin_egal', 'mai mare', 'mai mare_egal', 'între', '!între'])) {
775.778c775
< dacă ($element_plugin->hasMultipleValues($element) && $trigger === 'multi_value') {
< $rezultat = $this->checkConditionTrigger($trigger, $trigger_value, (array) $element_value);
<}
< elseif ($element_plugin->hasMultipleValues($element) && $trigger !== 'gol') {
---
> if ($element_plugin->hasMultipleValues($element) && $trigger !== 'gol') {
832.837d828
< 
< caz „multi_value”:
< sort($valoare_element);
< $multi_values ​​= explode(',', $trigger_value);
< sort($valori_multi);   
< return $multi_values ​​=== $element_valoare;
No Sssweat avatar
drapel ua
Te-ai gândit să folosești [modulul chestionar](https://www.drupal.org/project/quiz)?
Cameron avatar
drapel cn
Da, pare destul de greșit în acest moment și, de asemenea, exagerat pentru ceea ce ne dorim.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.