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:
- pisoi_1
- pisoi_2
- pisoi_3
- 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;