Инструкции за ExpressionScript
From LimeSurvey Manual
Общ преглед на обясненото по-рано
Ако досега сте следвали структурата на ръководството на LimeSurvey, това означава, че вече използвате терминологията на LimeSurvey. След това разгледахме изрази и променливи, за да научим как да подобрим нашите проучвания. В следващата част преминахме към типовете и значенията на маркиране на синтаксис, за да научим как да коригираме синтактични грешки.
След като обхванем тези основни понятия, можем да преминем към примери и обяснение как работят изразите в LimeSurvey.
Осветяване на синтаксиса
Следните екранни снимки дават примери, но не показват стойностите на подсказките. Подсказката е информативно поле, което се показва всеки път, когато задържите курсора на мишката върху произволни думи с получер цвят.
Благодарение на това подчертаване на синтаксиса е много лесно да се съставят правилни изрази, дори и тези, които са сложни. Въпреки че екипът на LimeSurvey планира да се опита да изгради GUI на Expression Builder, можете да използвате съществуващото осветяване на синтаксиса, за да идентифицирате бързо и коригирате правописни грешки. Можете също така да използвате подсказките, за да потвърдите точността на вашите изрази (напр. да потвърдите, че сте избрали желаната променлива(и)).
Във всеки от примерите има три колони:
- Източник - това е необработеният текст, който бихте въвели в полето за въпроси на LimeSurvey
- Красив печат - това е синтаксисно подчертаният еквивалент на въведеното от вас
- Обърнете внимание, че изразите се показват с кафяв фон, но не са заобиколени от къдрави скоби при това осветяване.
- Тъй като EM поддържа рекурсивно заместване, показването на къдрави скоби в осветяването би причинило синтактични грешки
- Резултат - това е изходът, генериран, когато EM обработва източника
- Всичко, което може да бъде правилно заменено, е
- Изразите с грешки се показват на линия, с подчертаване на синтаксиса. Грешките са заобиколени от поле с червена линия.
Правилен синтаксис
Можете да намерите по-долу примери за правилен синтаксис:
- Стойности: показва, че известните променливи са цветно кодирани според това дали са зададени на текущата страница. INSERTANS в стар стил: xxxx получава свой собствен стил на цветно кодиране
- Атрибути на въпроси: показва, че нотацията с точки има достъп до някои свойства на въпросите
- Math: показва, че се поддържат основни и сложни изчисления
- TextProcessing: показва някои от наличните функции за обработка на текст
- Дати: показва две от наличните функции, свързани с дата
- Условно: показва използването на функцията if(). Изборите могат да бъдат вложени.
- Специализиран параграф: можете напълно да персонализирате отчет въз основа на предишни стойности
- EM процеси в рамките на низове: показва, че може да прави замествания в рамките на низове. Този пример генерира персонализирано име на изображение.
- EM не обработва фигурни скоби като тези: показва, че ако фигурните скоби са екранирани или има бяло пространство между израза и фигурните скоби, ES игнорира израза.
Синтаксисът на EM съдържа грешки
Ето примери за често срещани грешки при въвеждане на ES изрази. Обърнете внимание, че подсказките предоставят допълнителна информация.
- Вграден Javascript, който е забравил да добави интервали след къдрава скоба
- Тъй като "document.write" се появява точно след къдрава скоба, EM смята, че това е израз, а червено- кутии "document" и "write", тъй като те са съответно недефинирана променлива и функции
- Неизвестни/Грешно изписани променливи, функции и оператори
- Тук забравихме, че използваме името на променливата "gender" вместо " секс", но ЕМ улавя тази грешка. Освен това маркира в червено '++', тъй като това не е поддържан оператор.
- Предупреждава, ако използвате = вместо eq или изпълнявате присвояване на стойност
- Обърнете внимание, че '=' и '+=' са в червен текст вместо черен. Ако задържите курсора на мишката върху тях, ще видите предупреждения, че присвоявате стойност.
- Грешен брой аргументи за функции
- if() приема 3 аргумента, но са му дадени 4, така че задържането върху "if" в червено, ще обясни грешката и ще покаже поддържания синтаксис
- sum() приема неограничен брой аргументи, но имахме запетая в края преди затварящите скоби, така че това е в червено! N!#Несъответстващи скоби
- Това е една от най-честите грешки при писане на изрази.
- Това показва два примера за липсващи затварящи скоби и един пример за твърде много затварящи скоби.
#Неподдържан синтаксис
- Ако използвате оператор или пунктуация, които ES не поддържа, той ще го постави в червено.
- Невалидни присвоявания
- Някои променливи се четат и записват и стойностите им могат да се променят. Други са само за четене.
- Ако се опитате да промените стойността на променлива само за четене, не можете. EM ще постави в червена кутия опита.
- Ако се опитате да присвоите стойност на уравнение или низ, вие също ще получите грешка
"На живо" примери за подчертаване на синтаксиса с активни подсказки
!Н! !Н!!Н!Източник | Красив печат | Резултат |
---|---|---|
Ето пример за ОК синтаксис с подсказки Здравейте {if(gender=='M','Mr.','Mrs.')} {фамилия}, сега е {date('g:i a',time())}. Знаете ли къде са вашите {sum(numPets,numKids)} деца и домашни любимци? | Ето пример за ОК синтаксис с подсказки Здравейте , ако ( пол == 'M' , 'Mr.' , 'Mrs.' ) фамилия , сега е дата ( 'g:i a' , час ()) . Знаете ли къде са вашите ( numPets , numKids ) деца и домашни любимци? | Ето пример за ОК синтаксис с подсказки Здравейте , г-н Смит , сега е 6:07 сутринта. Знаете ли къде са вашите 3 деца и домашни любимци? |
Ето често срещани грешки, за да можете да видите подсказките Променливи, използвани преди да бъдат декларирани: {notSetYet} Неизвестна функция: {iff(numPets>numKids,1,2)} Неизвестна променлива: {sum(age,num_pets,numKids)} Грешен # параметър: {sprintf()},{if(1,2)},{date()} Присвояване на променливи само за четене:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'} Небалансирани скоби: {pow(3,4},{(pow(3,4)},{pow(3,4))} | Ето често срещани грешки, за да можете да видите подсказките Променливи, използвани преди да бъдат декларирани: notSetYet Неизвестна функция: iff ( numPets > numKids ,1,2) Неизвестна променлива: сума ( възраст , num_pets , numKids ) Грешни # параметри: sprintf () , if (1,2) , date () Присвояване на променливи само за четене: TOKEN:ATTRIBUTE_1 += 10 , име = 'Сали' Небалансирани скоби: pow (3,4 , ( pow (3,4) , pow (3,4) ) | Ето често срещани грешки, за да можете да видите подсказките Променливи, използвани преди да бъдат декларирани: notSetYet Неизвестна функция: iff ( numPets > numKids ,1,2) Неизвестна променлива: сума ( възраст , num_pets , numKids ) Грешни # параметри: sprintf () , if (1,2) , date () Присвояване на променливи само за четене: TOKEN:ATTRIBUTE_1 += 10 , име = 'Сали' Небалансирани скоби: pow (3,4 , ( pow (3,4) , pow (3,4) ) |
Ето част от неподдържания синтаксис Няма поддръжка за '++', '--', '%',';': {min(++age, --age,age % 2);} Нито '|', '&', '^': {(sum(2 | 3,3 & 4,5 ^ 6)}} Нито масиви: {име[2], име['мое']} | Ето част от неподдържания синтаксис Няма поддръжка за '++', '--', '%',';': мин. ( ++ възраст , -- възраст , възраст % 2) ; Нито '|', '&', '^': ( сума (2 | 3,3 & 4,5 ^ 6) } Нито масиви: име [ 2 ] , име [ 'мое' ] | Ето част от неподдържания синтаксис Няма поддръжка за '++', '--', '%',';': мин. ( ++ възраст , -- възраст , възраст % 2) ; Нито '|', '&', '^': ( сума (2 | 3,3 & 4,5 ^ 6) } Нито масиви: име [ 2 ] , име [ 'мое' ] |
Примери за адаптиране (напр. разширяване на {INSERTANS:xxx})
"Уважаеми {г-н}/{г-жо} Смит..."
Използвайте функцията if(), за да изберете условно дали да се покаже „Mr.“ или „г-жа“.
Синтаксисът е if(test,do_if_true,do_if_false).
# | Код | Въпрос | Тип |
1 | пол | Какъв е вашият пол? | Пол |
|example1 | Уважаеми {if(gender=='M','Mr.','Mrs.')} Смит, ... | Дълъг свободен текст |
Както може да се види по-долу, „г-н“ и „г-жа“ са съобразени с това, което респондентът избира като отговор на въпроса „пол“.
"Уважаеми {Mr}/{Mrs} Smith..." в имейла за покана
Можете да използвате примера по-горе в имейла с поканата, като използвате атрибути от таблицата с токени. Използвайте функцията if(), за да изберете дали „Mr.“ или „г-жа“ трябва да се използва в имейла.
Синтаксисът е "if(test,do_if_true,do_if_false)".
# | атрибут | стойност |
1 | Фамилия | Смит |
2 | Имейл адрес | test@test. com |
3 | ATTRIBUTE_2 | M |
Текст в имейла с поканата:
Уважаеми {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},
бяхте поканени да участвате в проучване:
https:/...
Изглед по имейл:
Изчисляване/Примери за оценка
Изчислете стойностите на оценката по време на изпълнение и съхранете резултатите в данните от проучването
Този пример използва всички функции на EM, включително релевантност, приспособяване и тип въпрос Equation.
Също така показва, че всички те са с активиран JavaScript, така че ако имате тези функции на страница, тя ще се променя динамично, когато хората задават и променят своите отговори.
# | Код | Въпрос | Тип | Уместност | |||||
1 | numKids | Колко деца имате? | Въведено число | - | 2 | kid1 | На колко години е първото ви дете? | Числен вход | numKids >= 1 |
3 | kid2 | На колко години е второто ви дете дете? | Числен вход | numKids >= 2 | |||||
4 | kid3 | На колко години е третото ви дете? | Числен вход | numKids >= 3 | |||||
5 | kid4 | На колко години е четвъртото ви дете? | Числен вход | numKids >= 4 | |||||
6 | sumKidAges | {sum(kid1.NAOK,kid2. NAOK,kid3.NAOK,kid4.NAOK)} | Уравнение | 1 | |||||
7 | kidSummary | Казахте, че имате {numKids}. {if(numKids==1,'child','children')}. {if(numKids>1,implode(' ','Сборът на възрастта на вашите първи ',min(numKids,4),' деца е ',sumKidAges,'.'),' ')} | |1 |
За да изтеглите този пример, моля, щракнете върху следната връзка: Assessments_survey_example.
Можете да намерите по-долу екранни снимки на представителни въпроси. Както можете да видите, EM синтаксисът подчертава всички полета, които може да съдържат приспособяване. Тук виждате примери за уместност при открояване на синтаксис, тип въпрос с уравнение и замествания в рамките на въпрос. Можете също да използвате замествания в Помощ, Показване на заглавката на групата, Поздравително съобщение и Крайно съобщение.
В следващия пример, тъй като уместността е {numKids >= 2), въпросът ще бъде видим само ако респондентът съобщи, че има поне две деца.
По-долу може да забележите, че към всяка променлива е прикрепен суфиксът .NAOK. Това се дължи на начина, по който EM поддържа каскадна уместност. Ако не сте имали .NAOK, тогава сумата ще бъде изчислена само ако лицето каза, че има 4 деца (напр. ако всички променливи са уместни). Използването на .NAOK означава, че искаме да изчислим сумата, дори ако всички или някои от променливите са неуместни (напр. „Неприложимо“ (NA) е добре (OK)).
Атрибутът .NAOK обаче засяга само дали променливите се предават в EM. Ако респондентът първоначално каже, че има 3 деца и въведе възрасти за всяко, след това промени решението си и каже, че има 2, ние не искаме да видим сумата от 3 въведени стойности - тъй като третото дете е „неприложимо“ в нашия случай вече:
Всеки отделен Expression е цветно кодиран с кафяв фон. Както можете да видите, тук има три отделни израза. Последният съдържа съобщение, което се показва условно само ако лицето има повече от едно дете.
Ето екранни снимки на анкетата в действие.
Когато за първи път посетите страницата, виждате това. Обърнете внимание, че се казва "Имате 0 деца" вместо "Имате 0 дете'".
Ако променя стойността за брой деца на 1, дисплеят незабавно се променя на това, въпреки че е на същата страница:
Сега забележете, че граматиката е правилна: „Имате 1 дете'".
Сега променям стойността за брой деца на 3 и дисплеят моментално се променя към това.
Забележете, че сега виждате условното съобщение в долната част: „Сборът на възрастта на първите ви 3 деца е 0.“.
Сега ще въведа възрасти за моите въображаеми деца и ще получа този дисплей, обобщаващ възрастта им:
Отново, резултатът и дисплеят се актуализират незабавно, докато въвеждам стойностите, така че можете да използвате това, за да покажете текущия общ резултат за оценка.
Сега променям стойността за броя на децата на 2. Дисплеят се промени на това:
Забележете, че въпреки че бях въвел стойност от 5,5 за третото дете, отчетът сега сумира само стойностите на първите ми 2 деца.
Причината за това е, че третата стойност вече е неуместна, а неуместните стойности се игнорират активно от EM.
Ако трябваше да променя броя на децата обратно на 3, щях да видя отново въведената от мен стойност от 5,5. Така че не губя никаква информация, която въвеждам на страницата.
Въпреки това, ако отида до следващата или предишната страница, всички неподходящи стойности ще бъдат NULL в сесията и в базата данни. Така че, ако запазя стойността на 2, отида на следващата страница и след това се върна и заявя, че всъщност имам 3 деца, вече няма да виждам възрастта 5,5.
Въведете данни и вижте динамично променящ се отчет за въведеното на същата страница
Този пример представя процеса на шиене в рамките на LimeSurvey.
За да изтеглите този пример, щракнете върху следната връзка: Пример за анкета за динамични промени.
Ето как изглежда страницата първоначално. Виждате само въпроса в кой град живеете:
След като започнете да въвеждате отговор, процесът на адаптиране също започва:
Докато въвеждате отговори, таблицата в долната част на страницата се актуализира, за да показва кодовете на отговорите и стойностите на вашите отговори.
Често срещани примери за отстраняване на грешки
Вложени оператори if() (условна логика)
EM поддържа функцията "if(test,do_if_true,do_if_false)", така че да можете да изпълнявате условна логика или приспособяване. Тази функция може да бъде вложена, за да направи еквивалента на "if { } else if { } else { }". EM ще ви уведоми, ако скобите не са балансирани (напр. липсва ви затваряща дясна скоба) или ако имате допълнителни десни скоби. Трябва да опитате да преброите скобите, докато съставяте дълги вложени изрази if, да ги запишете, да проверите за синтактични грешки и да ги коригирате, ако бъдат открити такива. Нека проверим заедно примера по-долу.
Групата от въпроси, използвани по-долу, може да бъде достъпна от тук: Tailoring survey example.lsg
Първо, без нищо въведено, вие просто виждате „Здравей“.
Ако въведете име, то казва „Здравей, {name}“.
Ако въведете възраст, получавате персонализирано съобщение в зависимост от това дали сте дете в предучилищна възраст или не:
Училищна възраст, тийнейджър или възрастен. Ето един тийнейджър, който иска да остане анонимен:
Ето логическия файл на групата. Както можете да видите във въпроса "базиран на ако", има вложени изрази ако, базирани на възрастта на лицето.
Когато първоначално редактирате този въпрос, е вероятно в даден момент да имате грешен брой скоби. Ето какво се случва, ако имате твърде малко:
Ако задържите курсора на мишката върху думата „ако“, която е заобиколена от червена кутия, се казва „Скобите не са балансирани“. В този случай трябва да има четири затварящи скоби след „вече възрастен!“, но има само три.
Ако, от друга страна, имате допълнителна дясна скоба, тя ще бъде заобиколена от червена кутия, като тази:
Когато всъщност редактирате въпроса, той изглежда така: