x

Основные главы

  1. LimeSurvey Cloud и LimeSurvey CE: сравнение
  2. Краткое руководство по началу работы - LimeSurvey 3.0+
  3. Установка - LimeSurvey CE
  4. Как разработать хороший опрос (руководство)
  5. Начиная
  6. Администрирование LimeSurvey
  7. Опросы - Вступление
  8. Настройки опроса
  9. Меню опроса
  10. Структура опроса
  11. Вопросы — введение
  12. Группы вопросов - введение
  13. Опросы - управление
  14. Параметры панели инструментов опроса
  15. Многоязычный опрос
  16. Движок ExpressionScript — краткое руководство
  17. Не классифицированы и расширенные функции
  18. ЧаВо
  19. Устранение неполадок
  20. Обходные пути
  21. Лицензия
  22. Журнал изменений версий
  23. Плагины
 Actions

Примеры опросов с ExpressionScript

From LimeSurvey Manual

Эта страница, возможно, переведена машинным способом и может содержать ошибки. Показать английский оригинал · Улучшить этот перевод
This page is a translated version of the page ExpressionScript sample surveys and the translation is 100% complete.


Введение

Лучший способ научиться работать с ExpressionScript — поэкспериментировать с готовыми примерами и изменить их под свои задачи.

Ниже приведён набор примеров опросов, которые демонстрируют (и позволяют протестировать), как с помощью EM можно улучшить ваш опрос. Эти опросы находятся в папке /docs/demosurveys дистрибутива.


Условия, персонализация и уравнения

Обзор

В следующем примере вычисляется ИМТ (индекс массы тела) каждого респондента. Возможности, которые демонстрирует этот пример, перечислены ниже.

Демонстрируемые возможности EM

  1. Условие — поддержка мощной условной логики;
  2. Подстановка / персонализация — возможность подставлять или адаптировать ответы и метаданные вопросов;
  3. Динамическая персонализация — обратите внимание, что отчёты на странице изменяются по мере ответов на вопросы.
  4. Микроперсонализация — условная адаптация внутри предложений и отчётов с помощью операторов if()
  5. Уравнения — новый тип вопроса, который позволяет выполнять вычисления и сохранять результаты в базе данных, даже если вычисление скрыто
  6. Условная проверка — критерии проверки, например минимально допустимое значение, могут быть условными, в частности основанными на уравнениях.


Снимки экрана

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



Когда вы вводите свои данные (и можете выбрать метрические или неметрические единицы измерения), вы видите персонализированный отчёт, в котором кратко изложены введённые вами данные и указан ваш статус веса:



Вот другой пример с неметрическими единицами, показывающий, как динамически меняется результат:



На внутреннем уровне есть скрытые вопросы типа «Уравнение», которые при необходимости преобразуют данные в метрические единицы и сохраняют в базе данных рост, вес, ИМТ и статус веса в метрической системе без использования собственного JavaScript.

В следующих примерах вы можете увидеть, как использовать математические и другие функции в персонализированных отчётах. Так выглядит страница до ввода каких-либо данных. Предусмотрена условная логика, которая показывает пустые ячейки, если данные не введены (или введены не числа), вместо сообщений «NaN» или «Divide by Zero».



По мере ввода чисел отчёт на странице изменяется и показывает выполняемое вычисление и его результат.



В этом примере опроса есть и много других примеров. Например, на снимке экрана ниже показан один из десятков способов заполнить страницу динамического условия. Как сказано в тексте справки, попробуйте указать разный возраст и особенно нелогичные сочетания ответов, чтобы увидеть забавные сообщения, формируемые внизу. Также обратите внимание: если вы укажете, что у вас больше одного ребёнка, в сообщении будет написано «I hope you enjoy playing with your X children», а не «I hope you enjoy playing with your child». Это показывает, как легко можно микроперсонализировать предложения, чтобы они соответствовали полу и/или числу ваших респондентов. Вы даже можете без труда спрягать глаголы и склонять существительные в зависимости от рода и числа.



Скачать

Чтобы получить пример опроса, перейдите по следующей ссылке: LS3_em_tailoring.zip.

Пример переписи

Обзор

Это пример переписи, в которой спрашивается, сколько человек проживает в вашем домохозяйстве.

Он демонстрирует, как условие на уровне группы упрощает реализацию «цикла» вопросов. Создав группу для человека 1, я экспортировал эту группу. Поскольку я использовал имена переменных qcode, например p1_name, вместо кода SGQA, я мог с помощью текстового редактора быстро отредактировать группу и несколько раз импортировать её заново (например, на редактирование и повторный импорт каждой повторяющейся группы уходило около 10 секунд, при этом все переменные получали уникальные имена, а логика на уровне группы оставалась корректной).

Вы также можете воспользоваться функцией Копировать вопрос, но она будет работать не так быстро, как способ, описанный выше.

Также этот пример показывает, как не допустить появления сообщения о завершении до тех пор, пока опрос действительно не будет завершён (например, пока не будут заполнены все необходимые группы).


Демонстрируемые возможности EM

  1. Условие на уровне группы - дополнительные группы (Человек 1-5) отображаются только в пределах указанного числа проживающих;
  2. Адаптация текста (tailoring) - итоговый отчёт содержит сводку демографических данных по каждому из проживающих;
  3. Постепенное отображение вопросов - как в режиме «по группам», так и в режиме «всё на одной странице», следующие вопросы появляются только после ответа на предыдущие.


Скриншоты

Опрос формирует адаптированный отчёт с демографическими данными указанного числа проживающих:



Если переключиться в режим «по одному вопросу», вы увидите, что индекс адаптирует вопросы. Так как пользователь указал, что это женщина, задаётся вопрос «Как её зовут?». А поскольку мы ответили «Мария», следующий вопрос звучит так: «Сколько лет Марии?»



Скачивание

Чтобы скачать пример опроса, нажмите здесь: LS3_group_relevance.zip.


Каскадные фильтры массива

Обзор

Этот опрос основан на макете опроса, предоставленном компанией Joy Lane Research, LLC.


Скриншоты

Обратите внимание на следующее:

  • Q02 показывает только те продукты, которые были отмечены в Q01 (с помощью array_filter)
  • Q02 также показывает «Другой продукт» - текст, введённый в поле «Другая электроника» в Q01
  • Q04 показывает только те продукты из Q02, которые были отмечены (то есть фильтр массива работает каскадно)
  • Q05 показывает только те продукты из Q02, которые не были отмечены в Q02 (с помощью каскадного array_filter_exclude)




Скачивание

Чтобы скачать приведённый выше пример, перейдите по следующей ссылке: пример опроса LS2_cascading_array_filter.


Подстановка и адаптация текста с использованием всех типов вопросов и атрибутов

Обзор

Если вы не уверены, как именовать переменные (SGQA или Qcode), вы не одиноки. Хотя в основной документации описано, как составлять имена переменных Qcode, лучше всего разобраться на работающем примере. Этот опрос показывает, как получить доступ к атрибутам вопросов и ответам с помощью ExpressionScript.


Для этого примера мы рекомендуем отключить встроенный Редактор HTML (или переключить его во всплывающий режим) при редактировании опроса. Отображение больших HTML-отчётов в режиме редактирования может занимать минуту и более.


Содержание

  • Примеры всех типов вопросов
  • Включены все типы вопросов, поддерживающие вариант «Другое», чтобы вы могли увидеть, как это влияет на именование переменных
  • Значения по умолчанию для всех типов вопросов, которые их поддерживают
  • Адаптация текста - отчёты на странице и вне её, показывающие все 16 доступных суффиксов точечной нотации EM.
  • Эти отчёты показывают все введённые на данный момент данные (то есть вы увидите, как можно создавать собственные печатные отчёты для пользователей вместо экрана печати ответов)
  • Правильное именование всех переменных в форматах Qcode и SGQA


Скриншоты

Это очень большой опрос, поэтому мы не стали приводить скриншоты. Вместо этого скачайте его и поэкспериментируйте.


Скачивание

Чтобы скачать опрос, перейдите по следующей ссылке: LS3_EM_question_attributes.lss

Традиционная проверка в новом свете

Обзор

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


Демонстрируемые типы проверки

  1. min_num_value_n - минимальное значение ответа
  2. max_num_value_n - максимальное значение ответа
  3. min_answers - минимальное необходимое количество ответов
  4. max_answers - максимально допустимое количество ответов
  5. multiflexible_min - минимально допустимое значение ответа (для типа вопроса «Массив (числа)» с гибким вводом)
  6. multiflexible_max - максимально допустимое значение ответа (для типа вопроса «Массив (числа)» с гибким вводом)
  7. min_num_value - минимально допустимая сумма всех ответов на вопрос
  8. max_num_value - максимально допустимая сумма всех ответов на вопрос
  9. equals_num_value - сумма всех ответов на вопрос должна быть равна этому значению
  10. validation - проверка вопроса с помощью регулярного выражения; может применяться к отдельным ячейкам


Снимки экрана

Благодаря новым стилям CSS каждый тип проверки отображается в виде отдельной подсказки. Показанные подсказки можно скрыть с помощью параметра hide_tip. По умолчанию подсказки отображаются красным шрифтом, если вопрос не соответствует критериям проверки, и зелёным, если соответствует:



Пользователь не может отправить страницу с ошибками проверки. Если он введёт неверные данные, он сразу получит предупреждение:



Проверку можно применять к отдельным ячейкам массива. Например, в этом примере проверки с помощью регулярных выражений гарантируют, что каждая запись является правильно отформатированным телефонным номером США с кодом региона.



Скачать

Чтобы скачать приведённый выше пример, перейдите по следующей ссылке: LS3_Validation_tests.zip.


Уравнения проверки

Обзор

Иногда требуется особая проверка, которую невозможно реализовать с помощью традиционных критериев минимума и максимума. Для этого необходимо использовать параметры em_validation_q и em_validation_sq, которые позволяют создавать сложные уравнения проверки на уровне вопроса и подвопроса соответственно.


На уровне подвопроса мы также вводим переменную «this», которая упрощает проверку каждой ячейки массива без необходимости знать имя её переменной. Подробнее о ней можно узнать, нажав здесь.


Демонстрируемые возможности EM

  1. em_validation_q - уравнение, определяющее, является ли весь вопрос допустимым
  2. em_validation_q_tip - сообщение, которое отображается, если вопрос не соответствует критериям em_validation_q
  3. em_validation_sq - уравнение, определяющее, является ли допустимым каждый подвопрос (ячейка массива)
  4. em_validation_sq_tip - сообщение, которое отображается, если любой из подвопросов недопустим.

Как правило, при использовании em_validation_sq, если какая-либо ячейка недопустима, цвет фона этой ячейки становится красным, указывая на ошибку.


Снимки экрана


Этот вопрос гарантирует, что вы вводите возраст своих детей в порядке убывания, применяя следующее уравнение проверки:

q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4





В приведённом ниже примере проверка гарантирует, что в любой строке дано не более 3 ответов, применяя следующее уравнение проверки:

(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= 3) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= 3) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= 3)

Можно также записать это так: LimeSurvey автоматически преобразует такую запись во время выполнения в приведённое выше выражение.

(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)



Скачать

Чтобы скачать образец опроса, использованный в приведённых выше примерах, перейдите по следующей ссылке: ls2_test_em_sq_validation.lss.


Условие для подвопросов

Обзор

Этот пример показывает, как могут взаимодействовать array_filter и критерии проверки. Для проверок, применяемых к суммам, учитываются только релевантные (видимые) значения.


Демонстрируемые возможности EM

  1. array_filter
  2. array_filter_exclude
  3. min_num_value
  4. max_num_value
  5. equals_num_value

Также демонстрируется динамический отчёт о количестве вопросов, на которые получены ответы в основных вопросах.


Снимки экрана

Изменение количества видимых строк динамически меняет сумму. Если подвопрос помечен как нерелевантный, его значение не очищается. Однако пока он нерелевантен, его значения не учитываются ни в одном уравнении.



Обратите внимание, что происходит, когда мы отмечаем «Пятый подвопрос» в первом вопросе «Which rows should appear below». Сумма для второго вопроса «Enter some numbers» теперь равна 5. Хотя у подвопроса 5 этого вопроса по-прежнему сохраняется значение 14 (например, если снять отметку с пятого подвопроса, вы снова увидите значение 14), оно не учитывается в сумме, так как в данный момент нерелевантно. Все нерелевантные данные очищаются (в базе данных записывается NULL) при отправке, но на странице они остаются доступными на случай, если пользователи захотят изменить свои ответы.



Скачать

Чтобы скачать наш пример, нажмите здесь: ls2_subquestion_relevance.lss.


Использование запятой в качестве десятичного разделителя (десятичной точки)

Обзор

ExpressionScript гарантирует, что в числовые поля можно вводить только допустимые числа. Если вы введёте недопустимое число, вы получите предупреждение о том, что что-то не так (например, в теме fruity весь вопрос подсвечивается красным).

Обратите внимание, что числовые значения всегда преобразуются в формат с точкой в качестве десятичного разделителя в базе данных. Благодаря этому статистический анализ работает корректно.

Чтобы изменить десятичный разделитель, откройте параметры Текстовые элементы на вкладке Настройки и найдите функцию Десятичный знак.


Дополнительную информацию о том, что такое десятичный разделитель, можно найти [https://en.wikipedia.org/wiki/Radix_point


Типы вопросов, использующие десятичный разделитель

  1. Числовой ввод [N]
  2. Многократный числовой ввод [K]
  3. Массив (числовой) [:]
  4. Массив (текстовый) [;] при использовании атрибута numbers_only
  5. Список (Один ответ) [L] при использовании атрибута other_numbers_only
  6. Короткий произвольный текст [S] при использовании атрибута numbers_only
  7. Несколько коротких текстов [Q] при использовании атрибута numbers_only
  8. Несколько ответов [M] при использовании атрибута other_numbers_only
  9. Несколько ответов с комментариями [P] при использовании атрибута other_numbers_only


Снимки экрана

На приведённых ниже снимках экрана видно, что запятую можно использовать в качестве десятичного разделителя.



Скачать

Чтобы скачать приведённый выше пример, перейдите по следующей ссылке: ls2_comma_as_radix_separator.lss.


Группы рандомизации

Обзор

Этот опрос демонстрирует, как использовать атрибут random_group.

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


Снимки экрана

Давайте вместе рассмотрим пример ниже. Первым случайным вопросом на странице будет Q1, Q4 или Q7. Вторым случайным вопросом на странице будет Q2, Q5 или Q8.



Вот рандомизация, полученная при первом тестировании этого опроса.



При втором тестировании опроса была получена другая рандомизация.



Но когда я переключился на французский язык (не перезапуская опрос), порядок рандомизации остался прежним.



Скачивание

Чтобы скачать приведённый выше пример, перейдите по следующей ссылке: Randomization_Group_Test.lss


Случайный показ одного вопроса из каждой группы

Обзор

Этот опрос показывает, как настроить опрос так, чтобы из каждой группы случайно отображался один вопрос. В нём 5 групп по 6 вопросов в каждой. В самом начале, в группе 0, заполняются пять скрытых вопросов типа «Уравнение» с именами ask1-ask5. В поле текста вопроса каждого из них указано значение {floor(rand(1,6.9999))}, то есть переменные ask1-ask5 получат значения от 1 до 6. Затем у каждого вопроса в группе есть уравнение условия вида "ask1==N", где N — номер вопроса в группе (так, у третьего вопроса в группе 1 уравнение условия "ask1==3").

Этот опрос одинаково хорошо работает в режимах «весь опрос целиком», «группа за группой» и «вопрос за вопросом». Поскольку рандомизация задаётся в первой группе, а сама группа фактически скрыта (все вопросы ask1-ask5 скрыты), для одного респондента рандомизация остаётся неизменной, но у каждого нового респондента она будет своей.


Демонстрируемые возможности

  1. Тип вопроса «Уравнение»
  2. Функции рандомизации
  3. Условная функция (if)


Снимки экрана

Это группа Group0, в которой используется тип вопроса «Уравнение» для выбора случайных значений от 1 до 6 для каждой группы (кроме последней, в которой только 4 вопроса). Обратите внимание, что функция "if()" сначала проверяет, было ли уже задано значение ask1, и если да, то использует его. Если значение не задано, функция использует случайное значение для ask1.



Эта группа показывает, как переменная (ask4) из Group0 используется для управления тем, какой вопрос отображается в четвёртой группе.



Скачивание

Чтобы скачать приведённый выше пример опроса, нажмите здесь: Пример опроса со случайными вопросами в группе.


Случайный показ определённого числа вопросов в группе (подмножества вопросов)

  Это относится только ко всем случайным вопросам одной группы и только если используется формат Группа за группой или Весь целиком.



Обзор

В этом опросе показано, как задать случайное подмножество вопросов в группе. Например, показать 5 случайных вопросов из 10, расположенных в одной группе.

В опросе есть одна группа, содержащая 10 вопросов. Всем вопросам присвоено одно и то же название группы рандомизированных вопросов. В результате при загрузке страницы они отображаются в случайном порядке. Для каждого вопроса задано уравнение условия: сумма значений «relevanceStatus» всех остальных вопросов группы должна быть меньше количества вопросов, которое вы хотите показать. Поскольку relevanceStatus присваивается по мере отображения вопросов, эта сумма фактически равна количеству предшествующих вопросов.

Так, в нашем примере «5 из 10» уравнение для Q1 будет таким:

sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5

Для Q2 оно будет таким:

sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5

И так далее...


Демонстрируемые возможности

  1. переменная relevanceStatus
  2. Рандомизация

Скачивание

Чтобы скачать приведённый выше пример, перейдите по следующей ссылке: пример опроса «5 случайных вопросов из 10».

Оценка списка продуктов, введённого пользователем

Обзор

В примере ниже показано, как попросить пользователей перечислить интересующие их продукты, а затем оценить эти продукты.


Демонстрируемые возможности ES

  1. Адаптация ответов - при оценке продуктов подписи берутся из поля комментария предыдущего вопроса с типом «Несколько ответов»
  2. Адаптация шкал - многие расширенные параметры вопросов, например заголовки шкал, также можно адаптировать.


Снимки экрана

На этом изображении видно, что, поскольку выбраны только продукты 1, 3 и 5, отображаются только эти три (с помощью атрибута array_filter). Кроме того, подписи строк во втором вопросе - это либо номера продуктов (если в поле комментария ничего не введено), либо содержимое полей комментариев.



На этом изображении показано, как задаются адаптированные ответы:



Вот файл логики для этого вопроса, который позволяет проверить, что условная логика работает как задумано (например, нет ли синтаксических ошибок):



На следующем изображении показана группа, в которой вы задаёте 5-балльную шкалу оценки (варианты 1-5), название шкалы и продукты, которые хотите оценить. Последний вопрос показывает, что каждую часть вопроса типа «массив» можно адаптировать:



На следующем изображении показан файл логики последнего вопроса. Как видно, подвопросы, ответы и заголовки шкал можно адаптировать.


Скачивание

Чтобы скачать приведённый выше пример опроса, перейдите по следующей ссылке: пример опроса «Оценка списка продуктов, введённого пользователем».