Actions

ExpressionScript How-tos/bg: Difference between revisions

From LimeSurvey Manual

(Created page with "<center>File:em-tailoring2-q-kidSummary.jpg</center>")
(Created page with "Ето екранни снимки на анкетата в действие.")
Line 220: Line 220:
Ето екранни снимки на анкетата в действие.
Ето екранни снимки на анкетата в действие.


When you first visit the page, you see this. Note that is says "You have 0 '''children'''" instead of "You have 0 '''child'''".
Когато за първи път посетите страницата, виждате това. Обърнете внимание, че се казва "Имате 0 '''деца'''" вместо "Имате 0 '''дете''''".





Revision as of 08:02, 28 November 2023


Общ преглед на обясненото по-рано

Ако досега сте следвали структурата на ръководството на LimeSurvey, това означава, че вече използвате терминологията на LimeSurvey. След това разгледахме изрази и променливи, за да научим как да подобрим нашите проучвания. В следващата част преминахме към типовете и значенията на маркиране на синтаксис, за да научим как да коригираме синтактични грешки.

След като обхванем тези основни понятия, можем да преминем към примери и обяснение как работят изразите в LimeSurvey.


Осветяване на синтаксиса

Следните екранни снимки дават примери, но не показват стойностите на подсказките. Подсказката е информативно поле, което се показва всеки път, когато задържите курсора на мишката върху произволни думи с получер цвят.

Благодарение на това подчертаване на синтаксиса е много лесно да се съставят правилни изрази, дори и тези, които са сложни. Въпреки че екипът на LimeSurvey планира да се опита да изгради GUI на Expression Builder, можете да използвате съществуващото осветяване на синтаксиса, за да идентифицирате бързо и коригирате правописни грешки. Можете също така да използвате подсказките, за да потвърдите точността на вашите изрази (напр. да потвърдите, че сте избрали желаната променлива(и)).

Във всеки от примерите има три колони:

  1. Източник - това е необработеният текст, който бихте въвели в полето за въпроси на LimeSurvey
  2. Красив печат - това е синтаксисно подчертаният еквивалент на въведеното от вас
    • Обърнете внимание, че изразите се показват с кафяв фон, но не са заобиколени от къдрави скоби при това осветяване.
    • Тъй като EM поддържа рекурсивно заместване, показването на къдрави скоби в осветяването би причинило синтактични грешки
  3. Резултат - това е изходът, генериран, когато EM обработва източника
    • Всичко, което може да бъде правилно заменено, е
    • Изразите с грешки се показват на линия, с подчертаване на синтаксиса. Грешките са заобиколени от поле с червена линия.


Правилен синтаксис

Можете да намерите по-долу примери за правилен синтаксис:

  1. Стойности: показва, че известните променливи са цветно кодирани според това дали са зададени на текущата страница. INSERTANS в стар стил: xxxx получава свой собствен стил на цветно кодиране
  2. Атрибути на въпроси: показва, че нотацията с точки има достъп до някои свойства на въпросите
  3. Math: показва, че се поддържат основни и сложни изчисления
  4. TextProcessing: показва някои от наличните функции за обработка на текст
  5. Дати: показва две от наличните функции, свързани с дата
  6. Условно: показва използването на функцията if(). Изборите могат да бъдат вложени.
  7. Специализиран параграф: можете напълно да персонализирате отчет въз основа на предишни стойности
  8. EM процеси в рамките на низове: показва, че може да прави замествания в рамките на низове. Този пример генерира персонализирано име на изображение.
  9. EM не обработва фигурни скоби като тези: показва, че ако фигурните скоби са екранирани или има бяло пространство между израза и фигурните скоби, ES игнорира израза.



Синтаксисът на EM съдържа грешки

Ето примери за често срещани грешки при въвеждане на ES изрази. Обърнете внимание, че подсказките предоставят допълнителна информация.

  1. Вграден Javascript, който е забравил да добави интервали след къдрава скоба
    • Тъй като "document.write" се появява точно след къдрава скоба, EM смята, че това е израз, а червено- кутии "document" и "write", тъй като те са съответно недефинирана променлива и функции
  2. Неизвестни/Грешно изписани променливи, функции и оператори
    • Тук забравихме, че използваме името на променливата "gender" вместо " секс", но ЕМ улавя тази грешка. Освен това маркира в червено '++', тъй като това не е поддържан оператор.
  3. Предупреждава, ако използвате = вместо eq или изпълнявате присвояване на стойност
    • Обърнете внимание, че '=' и '+=' са в червен текст вместо черен. Ако задържите курсора на мишката върху тях, ще видите предупреждения, че присвоявате стойност.
  4. Грешен брой аргументи за функции
    • if() приема 3 аргумента, но са му дадени 4, така че задържането върху "if" в червено, ще обясни грешката и ще покаже поддържания синтаксис
    • sum() приема неограничен брой аргументи, но имахме запетая в края преди затварящите скоби, така че това е в червено! N!#Несъответстващи скоби
    • Това е една от най-честите грешки при писане на изрази.
    • Това показва два примера за липсващи затварящи скоби и един пример за твърде много затварящи скоби.
#Неподдържан синтаксис
    • Ако използвате оператор или пунктуация, които ES не поддържа, той ще го постави в червено.
  1. Невалидни присвоявания
    • Някои променливи се четат и записват и стойностите им могат да се променят. Други са само за четене.
    • Ако се опитате да промените стойността на променлива само за четене, не можете. 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.')} Смит, ... Дълъг свободен текст



Както може да се види по-долу, „г-н“ и „г-жа“ са съобразени с това, което респондентът избира като отговор на въпроса „пол“.


Файл:em-tailoring-q-ex1-usage.jpg Файл:em-tailoring-q-ex2-usage.jpg


"Уважаеми {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 дете'".



If I change the value for number of children to 1, the display instantly changes to this, even though it is on the same page:



Now notice that the grammar is correct: "You have 1 child".

Now I change the value for number of children to 3, and the display instantly changes to this.

Notice that you now see the conditional message at the bottom:  "The sum of ages of your first 3 kids is 0.".



Now I'll enter ages for my imaginary children, and I get this display, summing up their ages:



Again, the score and display updates instantly as I enter the values, so you can use this to show a running total of an Assessment Score.


Now, I change the value for the number of children to 2. The display has changed to this:



Notice that although I had entered a value of 5.5 for the third child, the report now only sums the values of my first 2 children.

The reason for this is that the 3rd value is now irrelevant, and irrelevant values are actively ignored by EM.

If I were to change the number of kids back to 3, I would see the value of 5.5 I entered again. So, I don't lose any information I enter on the page.

However, if I navigate to the Next or Previous page, all irrelevant values will be NULLed out in the session and in the database. So, if I were to keep the value at 2, go to the next page, and then come back and state that I actually have 3 kids, I would no longer see the age of 5.5.


Enter data and see a dynamically changing report of what was entered on the same page

This example presents the Tailoring process within LimeSurvey.

To download this example, click on the following link: Dynamic changes survey example.

Here is what the page looks like initially. You only see the question asking what city you live in:



Once you start to enter an answer, the tailoring process is also starting:


As you enter answers, the table at the bottom of the page is updated to show the answer codes and values of your responses.


Common Debugging Examples

Nested if() Statements (Conditional Logic)

EM supports the function "if(test,do_if_true,do_if_false)" so that you can perform conditional logic or tailoring. This function can be nested to do the equivalent of "if { } else if { } else {  }". EM will let you know if the parentheses are not balanced (e.g., you are missing a closing right parenthesis), or if you have any extra right parentheses. You should try to count the parentheses as you compose long nested if statements, save it, check for syntax errors, and fix them if any are found. Let's check together the below example.

The group of questions used below can be accessed from here: Tailoring survey example.lsg


First, with nothing entered, you just see "Hello."



If you enter a name, it says, "Hello {name}."



If you enter an age, you get a tailored message, depending upon whether you are a pre-school-age child or not:



School aged, teenager, or adult. Here is a  teenager who wants to be anonymous:



Here is the logic file of the group. As you can see in the "if-based" question, there are nested if statements based upon the person's age.



When you are originally editing this question, it is likely that at some point, you will have the wrong number of parentheses. Here's what happens if you have too few:



If you hover over the word "if", which is surrounded by a red box, it says "Parentheses not balanced". In this case, there should be four closing parentheses after "already an adult!", but there are only three.

If, on the other hand, you have an extra right parenthesis, it will be surrounded by a red box, like this:



When you are actually editing the question, the question looks like this: