Рейтинг:0

Условия веб-формы для многозначного выбора

флаг cn

Я делаю викторину, используя Webform. Я хотел бы использовать многозначный список выбора для одного из вопросов и хочу оценить пользователя по любой комбинации выбранных правильных ответов.

Используя в качестве примера милые котята по умолчанию элемента Image Select веб-формы, для значений select:

  1. котенок_1
  2. котенок_2
  3. котенок_3
  4. котенок_4

Я хотел бы иметь возможность сказать, что конкретная комбинация вариантов выбора является правильным ответом. Скажите котенок_1 и котенок_3, когда они выбраны, должен отображаться элемент с надписью «Правильный ответ!».

Из того, что я вижу об условиях, их нельзя применять к нескольким значениям. Я мог бы создать параметр «шаблон», но это сообщит мне только о том, выбраны ли котенок_1, котенок_3 или оба, а не если они оба выбраны.

Если это невозможно без пользовательского кода, можно ли его добавить через плагин и т. д., я тоже не могу понять.

Я хотел продемонстрировать это кому-то, поэтому я изменил модуль, чтобы добавить его, diff ниже, но очень хотелось бы лучшего способа.

diff -r /tmp/webform/js/webform.states.js web/modules/contrib/webform/js/webform.states.js
115,119d114
< else if ('multi_value' в ссылке) {
< const multiValue = ссылка['multi_value'].split(',');
< const equal = (multiValue.length === value.length) && (multiValue.sort().every((v, i) => v === value[i]));
< вернуть равно;
< }
diff -r /tmp/webform/src/Element/WebformElementStates.php web/modules/contrib/webform/src/Element/WebformElementStates.php
485,486d484
< [$trigger_selector => ['value' => 'multi_value']],
< 'или',
945с943
< elseif (in_array($trigger, ['multi_value', 'шаблон', '!шаблон', 'меньше', 'less_equal', 'больше', 'больше_равно', 'между', '!между'])) {
---
> elseif (in_array($trigger, ['шаблон', '!шаблон', 'меньше', 'less_equal', 'больше', 'больше_равно', 'между', '!между'])) {
1105d1102
< 'multi_value' => t('Несколько значений'),
diff -r /tmp/webform/src/WebformEntityConditionsManager.php web/modules/contrib/webform/src/WebformEntityConditionsManager.php
75d74
< 'multi_value' => $this->t('имеет значения'),
233с232
< if (in_array($trigger_substate, ['multi_value', 'шаблон', '!шаблон', 'меньше', 'less_equal', 'больше', 'больше_равно', 'между', '!между'])) {
---
> if (in_array($trigger_substate, ['шаблон', '!шаблон', 'меньше', 'less_equal', 'больше', 'больше_равно', 'между', '!между'])) {
diff -r /tmp/webform/src/WebformSubmissionConditionsValidator.php web/modules/contrib/webform/src/WebformSubmissionConditionsValidator.php
764c764
< if (in_array($trigger_substate, ['multi_value', 'шаблон', '!шаблон', 'меньше', 'less_equal', 'больше', 'больше_равно', 'между', '!между'])) {
---
> if (in_array($trigger_substate, ['шаблон', '!шаблон', 'меньше', 'less_equal', 'больше', 'больше_равно', 'между', '!между'])) {
775,778c775
< if ($element_plugin->hasMultipleValues($element) && $trigger === 'multi_value') {
< $result = $this->checkConditionTrigger($trigger, $trigger_value, (массив) $element_value);
< }
< elseif ($element_plugin->hasMultipleValues($element) && $trigger !== 'пусто') {
---
> if ($element_plugin->hasMultipleValues($element) && $trigger !== 'пусто') {
832,837d828
< 
< case 'multi_value':
< сортировка ($ element_value);
< $multi_values ​​= взорвать(',', $trigger_value);
<сортировка($multi_values);   
< return $multi_values ​​=== $element_value;
No Sssweat avatar
флаг ua
Рассматривали ли вы возможность использования [модуля викторины](https://www.drupal.org/project/quiz)?
Cameron avatar
флаг cn
Да, на данный момент кажется довольно глючным, а также излишним для того, что мы хотим.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.