Actions

Примери за ExpressionScript

From LimeSurvey Manual

This page is a translated version of the page ExpressionScript examples and the translation is 100% complete.

Template:Забележка


Структура

Първата част на статията ще опише за какво могат да се използват изразите и къде да намерите/добавите израз. Втората част предоставя примери за това как да използвате Expression.


Категории изрази

LimeSurvey използва изрази за следните цели:


Уместност

Цел: Скриване на групи въпроси/въпроси

Уместността контролира дали дадена група въпроси или въпрос се показват или скриват. Ако резултатът от израза е "true" (т.е. 1), елементът ще бъде показан. В противен случай (ако резултатът от израза е "false" (т.е. 0)), елементът ще бъде скрит.

Тип Показва/скрива Къде да намеря Екранна снимка
Уместност на група въпроси група въпроси Създаване/Редактиране на група въпроси -> „Уравнение на релевантност:“ 30px
Уместност на въпроса въпрос Създаване/Редактиране на въпрос -> „Уравнение на релевантност:“ 30px
Релевантност на подвъпроса подвъпрос Редактиране на подвъпроси -> „Уравнение на релевантност:“ 30px


Потвърждение

Цел: Валидиране на въвеждане/действия по въпроси/подвъпроси/отговори

Валидирането контролира дали въведеното от респондента във въпрос или действие е валидно или не. Ако резултатът от израза е "true" (т.е. 1), класът "good" ще бъде приложен към елемента и валидиращото съобщение. В противен случай, ако резултатът от израза е "фалшив" (т.е. 0)), класът "грешка" ще бъде приложен към елемента и валидиращото съобщение. Можете да декларирате стил за тези класове в template.css.

Type Validates Къде да намеря Screenshot
Валидиране на въпрос въпрос Създаване/Редактиране на въпрос -> "Логически раздел" - > „Уравнение за валидиране на въпрос“
Потвърждение на подвъпрос подвъпроси Създаване/Редактиране на въпрос -> „Раздел Логика“ -> " Уравнение за валидиране на подвъпрос" 30px

Текстов изход

Цели: (Направете нещо) и напишете някакъв текст

Може да се използва израз, за да се напише някакъв текст. Например, можете да тествате или изчислите нещо и да посочите изхода в зависимост от резултата от теста или изчислението. Може също да се използва за вмъкване на текста на въпроса, отговорите, типовете въпроси, ... на въпрос, използван преди използването на израза. Текстовият изход може да се използва навсякъде, където се показва текст, и може да върне всякакъв вид резултати.

Use Case Description
Micro tailoring Коригирайте текст, напр. напишете „г-н“ или „г-жа“ в зависимост от въпрос за пола, зададен преди
Изчисляване Изчислете стойност и я напишете, напр. „Вашият семеен доход е xxx“
Справка Вмъкнете текст от елемент, напр. „Твоето име е xxx. На колко години си?“


Съхраняване на отговорите

Цели: (Направете нещо,) (напишете малко текст) и съхранете нещо в базата данни

Типът въпрос на уравнение може да се използва за съхраняване на нещо в базата данни. Можете да направите нещо с израз, да покажете въпроса с уравнението (който е подобен на текстов дисплей) и да съхраните резултата от израза в базата данни. Той съхранява отговора в таблицата с отговори. След това резултатът може да се използва в рамките на функцията за статистика или може също да се импортира в един от форматите, предоставени от функционалността за експортиране на LimeSurvey.

Примери за изрази

Вмъкване на отговор от предишен въпрос

Цел Вмъкване на отговор от предишен въпрос
Тип Справка
Пример Първи въпрос (код на въпроса " Q00"): В кой град живееш?
Въпрос втори (код на въпроса "Q01") От колко време живеете в CITY?
Задача: Отговорът от първия въпрос трябва да се използва вместо „ГРАД“ от втория въпрос.
Израз {QOO}
Описание Отговорът, предоставен в Q00, замества полето Q00 от втория въпрос
Стъпки Създаване/Редактиране на втори въпрос
Въведете „Колко време сте живели в {QOO} (години)?“ в текстовото поле за въпрос
Файл:Simple expression city name.png

Използване на въпрос със скрито уравнение за автоматично попълване на отговор

Проблем: Представете си, че имате два въпроса Q1 и Q2. Q1 пита респондентите за тяхната възраст. Q2 разделя респондентите на три групи: възрастта е под 20 години, възрастта е 20, възрастта е над 20. Така че Q2 трябва да използва стойностите "1", "2", "3", които съответстват на горните условия. Също така не трябва да забравяме да направим Q2 невидимо (въпросът няма да се показва в анкетата, но стойностите ще бъдат чрез „фоновия процес“ в таблицата с отговори).

За да попълните базата данни с помощта на въпроса за уравнението:

  • Първо, създайте въпрос с код Q1 като въпрос за числово въвеждане.
  • След това създайте друг въпрос с код Q2 като въпрос за уравнение .
  • В раздела "Настройки на дисплея" на Q2:
    • задайте полето "Винаги скрий този въпрос" като "Включено"
    • въведете в полето "Уравнение" израза:
 {if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}

Създаване на обобщена страница с помощта на контейнери

Този урок демонстрира как можете да създадете общ преглед в края на анкетата, изброявайки всички въпроси и отговори чрез контейнери за ExpressionScript. Той също така показва как да ограничете такъв преглед само до отговори на въпроси.

Нашият пример може да бъде изтеглен от тук: Пример за анкета за контейнери за анкета.


Типове въпроси, използвани тук:'

'1. Въпроси с един избор / въпроси с единичен текст/цифрови въпроси

  • Списък (падащо меню)
  • Списък (радио) [L]
  • Да/Не [Y]
  • Дълъг свободен текст [T ]
  • Кратък свободен текст [S]
  • Числен вход [N]
  • Уравнение [*]


'2. Въпрос с подвъпроси

  • Множество кратък текст [Q]
  • Многократен отговор [M]
  • Масив [F]
  • Масив (Да/Не/Несигурно) [C]
  • Масив (избор от 10 точки) [B]


'3. Въпроси с 2 скали

  • Масив двойна скала [1]


'4. Въпроси със скали X и Y

  • Масив (числа) [:]


'5. Маскиране на въпроси

  • Показване на текст [X]


В този прост пример нашият преглед ще бъде прост списък с:

- Текст на въпроса: Отговор на потребителя


Въпроси с един избор / въпроси с един текст/цифри

За всички тези типове въпроси Limesurvey ще съхранява един отговор:

  • Списък (падащо меню)
  • Списък (радио)
  • Списък с коментар
  • Избор от 5 точки
  • Да/Не
  • Кратък свободен текст
  • Дълъг свободен текст!N !*Огромен свободен текст
  • Числен вход
  • Уравнение
  • Дата
  • Пол

Ако приемем, че кодът на въпроса е q1, можем да препратим текста на въпроса и да отговорим, като използваме:

- {q1.въпрос}: {q1.показан}

Пример:

- На колко години си?: 25


Ако искате да проверите дали този въпрос е получил отговор, можете да поставите израз IF около изхода си:

{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}

Това се „превежда“ на: АКО въпросът с код q1 не е празен, изведете „- „ И текста на въпроса И „: „ И текста на отговора (функцията join() обединява елементи като нов низ; ИНАЧЕ: не извежда нищо (“ " означава празен низ).

Въпрос с подвъпроси

За всички тези типове въпроси LimeSurvey използва подвъпроси:

  • Множество кратък текст
  • Многократен избор
  • Многократен избор с коментари
  • Масив
  • Масив (избор от 5 точки)
  • Масив (избор от 10 точки)
  • Масив (Да /Не/Несигурно)
  • Масив (Увеличаване/Същият/Намаляване)
  • Масив по колона

Ако приемем, че кодът на въпроса е q2 и подвъпросите са номерирани SQ001, SQ002 (автоматично номериране, направено от LimeSurvey), можем да направим препратка към текста на въпроса и отговора, като използваме:

- {q2_SQ001.въпрос}: {q2_SQ001.показан}

- {q2_SQ002.въпрос}: {q2_SQ002.показан}

За въпроси с множество възможности за избор има смисъл сега да се показва текстът на отбелязания подвъпрос, но да се показва Y за всяка избрана опция:

- {q2_SQ001.въпрос}: {q2_SQ001}

- {q2_SQ002.въпрос}: {q2_SQ002}

...

Обърнете внимание, че в момента не е възможно да се изведе текстът на въпроса на въпроси с подвъпроси, вижте тази заявка за функция.


Пример 1 (ако приемем, че типът на въпроса е с множествен избор)

- Познавате ли тези марки коли?

-- Мерцедес: Y

-- Ауди: Н

-- Volvo: Y


Ако искате да изведете само маркирани елементи, можете да поставите IF израз около изхода си и да проверите за стойността на квадратчето за отметка:

{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }


Използвайте функцията listifop , ако искате да изведете списък само с избраните елементи, напр.: Mercedes, Volvo

{ listifop( 'стойност', '==', 'Y', 'въпрос', ', ', that.q2.sgqa ) }


Където that.q2 се разширява до всички подвъпроси на q2. Вижте self, this and that за повече подробности.


Пример 2 (ако приемем, че типът на въпроса е масив (избор от 10 точки))

- Моля, оценете качеството на марките автомобили по-долу по скала от 1=много лошо до 10=много добро?

-- Мерцедес: 7

-- Ауди: 9

-- Волво: 9


Ако искате да изведете само оценени артикули, можете да поставите израз IF около изхода си и да проверите дали е отговорено на текущия подвъпрос, като използвате:

{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }


Използвайте функцията listifop , ако например искате да изведете само списък с избраните елементи, по-големи от осем, напр.: Audi / Volvo

{ listifop( 'стойност', '>', 8, 'въпрос', ' / ', that.q3.sgqa ) }


Въпрос с две везни

Template:Забележка


Да приемем, че се използват следните кодове:

  • Код на въпроса: q4
  • Кодове на подвъпроса: SQ001, SQ002, ...
  • Кодове на отговорите скала 1: A1, A2, ...
  • Кодове на отговорите скала 2: B1, B2, ...


Template:Забележка


Нека изведем резултатите за двете скали и първите два подвъпроса:

- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}

- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}

За да изведете текста на подвъпроса, трябва да добавите идентификатора на мащаба към контейнера (въпреки че текстовете са еднакви и за двете скали). Така че вместо {q4_SQ001.question} трябва да използваме {q4_SQ001_0.question} или {q4_SQ001_1.question}.

Ако искате да експортирате/покажете резултатите от подвъпроси само с поне един отговор, използвайте този синтаксис за всеки подвъпрос:

{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}

Въпрос със скали X и Y

Това се отнася за всички матрични въпроси, които позволяват отговор за всяка клетка (а не само за всеки ред, както беше показано по-рано):

  • Текстови масиви
  • Числа на масиви


Използвани предполагаеми кодове:

  • Код на въпрос: q5
  • Кодове на подвъпрос: SQ001, SQ002, ...
  • Кодове на отговор: A1, A2, ...

За да се обърнете към резултата от определен подвъпрос от определена колона, трябва да използвате QuestionCode. '_'. Код на подвъпроса. '_'. Код на отговора. Пример за препратка към отговора на трети подвъпрос и втора колона: q5_SQ003_A2.

Нека изведем резултатите за колони 1-3 на първите два подвъпроса:

- {q5_SQ001_A1.въпрос}: {q5_SQ001_A1.показан} | {q5_SQ001_A2.показан} | {q5_SQ001_A3.показан}

- {q5_SQ002_A1.въпрос}: {q5_SQ002_A1.показан} | {q5_SQ002_A2.показан} | {q5_SQ002_A3.показан}


Тъй като за тези типове въпроси всяка клетка (комбинация от оси X и оси Y) се равнява на един вариант за отговор, трябва да се направи тест за съществуващи данни за всяка клетка. Пример:

{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}


Template:Забележка

Скриване на въпроса, ако отговорът от предишния въпрос е празен

Цел Скриване на въпроса, ако отговорът от предишния въпрос е празен
Тип Уместност на въпроса
Пример Въпрос едно: код на въпроса "име", текст на въпроса "Как се казваш?"
Въпрос втори: текст на въпроса "{name}, на колко години си?"
Да направите: Скрийте въпрос две, ако текстовото поле на въпрос едно е празно
Израз !is_empty(име)
Описание is_empty() определя дали дадена променлива се счита за празен. Знакът "!" отрича резултата. Така че, ако променливата не е празна, изразът ще бъде верен и въпросът се показва
Стъпки Създаване/редактиране на втори въпрос
Вмъкнете "!is_empty(name)" в "Уравнение за релевантност:"
Примерен файл Hide_question_if_empty_question_group.zip
Файл:Скриване на въпроса, ако е празен 1.pngФайл:Скриване на въпроса, ако е празен 2.png


Скриване на група въпроси, ако отговорът от предишния въпрос е Да или Не

Цел Скриване на група въпроси, ако отговорът от предишния въпрос е Да или Не
Тип Уместност на групата въпроси
Пример Първа страница, първа група въпроси, първи въпрос: код на въпроса "PET", текст на въпроса "Имате ли домашен любимец?" -Да не
Втора страница, втора група въпроси: Заглавие „За вашия домашен любимец(и)“
Да направите: Показване/скриване на група въпроси две, ако отговорът на въпрос едно е Да/Не
Израз PET == "Y"
Описание PET е кода на въпроса за въпроса, чийто отговор искате да проверите. Ако не използвате суфикс, EM ще използва "Qcode.code". Така че сравнявате кода на отговора от PET въпроса със стойността "Y". Ако участникът отговори с „Да“, изразът е верен и ще се покаже групата въпроси „За вашия домашен любимец(и)“.
Стъпки Създайте/редактирайте група въпроси две
Вмъкнете "PET == "Y"" в "Уравнение на релевантност:"
Примерен файл Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip


Показване на стойност на полето за въпрос за въвеждане на множество отговори

Цел Показване на стойност на полето за въвеждане на въпрос с множество отговори
Тип Препратка
Пример Първи въпрос : код на въпрос "AskChildAge", текст на въпрос "На колко години са вашите деца?". Кодове на подвъпроси -Child1 -Child2 -Child3 - ChildXXX
Въпрос две: код на въпроса „ReportChildAge“ текст на въпроса „Относно първото ви дете: – CHILD1 е AGE1.“
Израз {AskChildAge_Child1.question}, {AskChildAge_Child1.value}
Описание Искате да използвате стойността на подвъпрос в следващ въпрос. Можете да получите достъп до стойността на подвъпроса с този вид израз: QcodeQuestion_QcodeSubquestion.value
Стъпки Създаване/редактиране на втория въпрос
Вмъкнете този текст в описанието: „Относно първото ви дете: – {AskChildAge_Child1.question} е {AskChildAge_Child1.value}.“
Примерен файл Display_value_of_a_multiple_answer_input_ поле_въпрос. zip

Потвърдете броя на квадратчетата, отбелязани на ред за въпрос „Квадратче за отметка на масив (числа)“

Цел Потвърдете броя на квадратчетата, отбелязани на ред
Тип Потвърждение
Пример Въпрос от тип " Числа на масив (Оформление на полето за отметка)"
Израз сума(...)
Описание (сума(Тест_A_1, Тест_A_2, Тест_A_3, Тест_A_4, Тест_A_5) <= X) определя дали поне X квадратчета за отметка в ред A са отметнати.
Ако искате да проверите и трите реда (A, B, C), можете да свържете израза с помощта на "&&":
(сума (Тест_A_1, Тест_A_2, Тест_A_3, Тест_A_4, Тест_A_5) <= X)
&& (сума (Тест_B_1, Тест_B_2, Тест_B_3, Тест_B_4, Тест_B_5) <= X)
&& (сума(Тест_C_1, Тест_C_2, Тест_C_3, Тест_C_4, Тест_C_5) <= X)
Стъпки Създаване/редактиране на въпрос от тип „Масив с числа (Оформление на полето за отметка)“.
Вмъкнете горния израз в „Уравнение за валидиране на въпрос“ в разширените настройки на въпроса (може да се наложи да коригирате имената на променливите!).
Примерен файл Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss

Изчислете разликата между две дати

Цел Изчисляване на разликата между две дати
Тип Уместност / Тип на въпроса с уравнението / Валидиране
Пример Първи въпрос (дата/час, код: DOB): Коя е вашата дата на раждане?
Втори въпрос (дата/час, код: datetoday): Коя е датата днес?
Въпрос три (типичен): Вие сте на XXXX дни.
Да направите: Изчислете и покажете броя на дните между датата, дадена във въпрос 1, и въпрос 2.
Израз {(strtotime(datetoday)-strtotime(DOB))/60/60 /24}
Описание strtotime изчислява броя секунди между 1 януари 1970 г. и дадената дата. Горният израз изчислява броя секунди между двете дадени дати. Терминът "/60/60/24" просто изчислява броя на дните от броя на секундите.
Вместо да питате за "datetoday", можете също да използвате strtotime('now') или просто time(), което директно връща броя секунди от януари 1970 г. досега (т.е. времето, когато е направено проучването). По този начин можете бързо да разберете възрастта на човек в години с уравнението {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} Във всеки от тези случаи е изключително важно датата да бъде въведена в правилен формат, в противен случай функцията strtotime() няма да работи правилно.
Стъпки Създайте два въпроса за дата (за датата на раждане и за днешната дата) и шаблонен въпрос.
В текста на въпроса на шаблонния въпрос вмъкнете: „На {datetoday} сте били на {(strtotime(today)-strtotime(dob))/60/60/24} дни дни.“

Моля, обърнете внимание: Функцията strtotime може да работи с МНОГО, но не с всички формати за дата. Ако срещнете проблеми, задайте формата на датата на вашето проучване на mm/dd/yyyy или yyyy-mm-dd или dd.mm.yyyy"
Примерен файл Date_difference.zip

Използване на ExpressionScript за оценяване

Ето още един пример за това как да използвате ExpressionScript с въпроси от тип масив и оценки:</ br>

Да приемем, че имате 2 въпроса за масив и искате да запазите резултатите от данните за изчислението във вашата база данни. Всъщност е просто, ще трябва да създадете и тествате вашите масиви и да изпратите фиктивен отговор, за да видите дали работи и дали ви дава резултатите в завършената страница.


Подробности за внедряването:

  • добавете въпрос от тип уравнение
  • добавете следния ред, като приемем, че Q1 е вашият код на въпрос на масив, докато Q2 е вторият:
    •  {sum(Q1_SQ001.value,Q2_SQ001.value)}

Имайте предвид, че SQ001 е кодът по подразбиране за всеки подвъпрос. Ако промените кода на подвъпроса, коригирайте съответно уравнението по-горе.


Използване на em_validation_q в масив

Можете да използвате уравнението за валидиране на въпрос, за да управлявате масив с всяко условие.


Подробности за внедряване:

  • за първия масив : масив с единичен избор
    • Кодът на въпроса е ARRAY
    • Кодът на под въпроса е SQ01,SQ02,SQ03 и SQ04

** актуализирайте уравнението за валидиране на целия въпрос и го поставете

 !is_empty(ARRAY_SQ01) и !is_empty(ARRAY_SQ03)
  • за втория масив: масив от текст
    • Кодът на въпроса е ARRAYTEXT
    • Подвъпросът при кода на оста Y са SY01,SY02,SY03 и SY04
    • Актуализирайте целия въпрос валидиращо уравнение и поставяне
       count(self.sq_SY01 >= 1) и count(self.sq_SY03 >= 3)