Instrucțiuni pentru ExpressionScript
From LimeSurvey Manual
Prezentare generală a ceea ce a fost explicat anterior
Dacă ați urmat până acum structura manualului LimeSurvey, înseamnă că aveți deja Terminologia LimeSurvey. Apoi, am acoperit expresii și variabile pentru a învăța cum să ne îmbunătățim sondajele. În partea următoare, am trecut la tipurile și semnificațiile sintaxă evidențiere pentru a afla cum să corectăm erorile de sintaxă.
Cu aceste noțiuni de bază acoperite, am putea trece către exemple și să explicăm cum funcționează expresiile în LimeSurvey.
Evidențierea sintaxei
Următoarele capturi de ecran oferă exemple, dar nu arată valorile sfaturile instrumente. Un sfat explicativ este o casetă informativă care este afișată ori de câte ori treceți mouse-ul peste orice cuvinte colorate îndrăznețe.
Datorită acestei evidențieri de sintaxă, este foarte ușor să compuneți expresii corecte, chiar și cele care sunt complicate. Deși echipa LimeSurvey plănuiește să încerce să construiască o interfață grafică Expression Builder, puteți utiliza evidențierea de sintaxă existentă pentru a identifica și a remedia rapid greșelile de scriere. De asemenea, puteți utiliza sfaturile instrumente pentru a valida acuratețea expresiilor dvs. (de exemplu, confirmați că ați selectat variabilele dorite).
În fiecare dintre exemple, există trei coloane:
- Sursă - acesta este textul brut pe care l-ați introduce în câmpul de întrebare LimeSurvey
- Pretty Print - acesta este echivalentul evidențiat de sintaxă a ceea ce ați introdus! N!#*Rețineți că expresiile sunt afișate cu un fundal cafeniu, dar nu sunt înconjurate de acolade în această evidențiere.
- Din moment ce EM acceptă substituția recursivă, afișarea acoladelor în evidențiere ar provoca erori de sintaxă
- Rezultat - aceasta este rezultatul generat atunci când EM procesează sursa
- Tot ceea ce poate fi înlocuit corect este
- Expresiile cu erori sunt afișate în linie, cu evidențierea sintaxelor. Erorile sunt înconjurate de o casetă roșie.
Sintaxă corectă
Mai jos puteți găsi exemple de sintaxă adecvată:
- Valori: arată că variabilele cunoscute sunt codificate cu culori în funcție de dacă sunt setate pe pagina curentă. INSERTANS în stil vechi:xxxx capătă propriul stil de codare a culorilor
- Atribute întrebări: arată că notația cu puncte poate accesa unele proprietăți ale întrebărilor
- Math: arată că sunt acceptate calcule de bază și complexe
- Procesare text: arată unele dintre funcțiile de procesare a textului disponibile
- Date: arată două dintre funcțiile disponibile legate de dată
- Condițional: arată utilizarea funcției if(). Opțiunile pot fi imbricate.
- Paragraf personalizat: puteți personaliza complet un raport pe baza valorilor anterioare
- EM procese în șiruri: arată că poate face substituții în șiruri. Acest exemplu generează un nume de imagine adaptat.
- EM nu procesează acolade ca acestea: arată că dacă acoladele sunt scapă sau există un spațiu alb între expresie și acolade, ES ignoră expresia.
Sintaxa EM care conține erori
Iată exemple de erori comune la tastarea expresiilor ES. Rețineți că sfaturile instrumente oferă informații suplimentare.
- Inline Javascript care a uitat să adauge spații după acolade
- Din moment ce „document.write” apare imediat după o acoladă, EM crede că este o expresie și roșu- casetele „document” și „scrie” deoarece sunt variabile și, respectiv, funcții nedefinite
- Variabile, funcții și operatori necunoscute/ortografiate greșit
- Aici am uitat că folosim numele variabilei „gen” în loc de „ sex”, dar EM prinde acea eroare. De asemenea, introduce casete roșii „++”, deoarece acesta nu este un operator acceptat.
- Avertizează dacă se folosește = în loc de eq, sau se efectuează atribuiri de valori
- Rețineți că „=” și „+=” sunt în text roșu în loc de negru. Dacă treceți mouse-ul peste ele, veți vedea avertismente că atribuiți o valoare.
- Număr greșit de argumente pentru funcții
- if() ia 3 argumente, dar i s-au dat 4, așa că treceți cu mouse-ul peste „dacă” în casetă roșie va explica eroarea și va afișa sintaxa acceptată! N!#*sum() ia un număr nelimitat de argumente, dar am avut o virgulă finală înainte de parantezele de închidere, așa că este în casetă roșie! N!#Paranteze nepotrivite
- Aceasta este una dintre cele mai frecvente erori la scrierea expresiilor.
- Aceasta arată două exemple de paranteze de închidere lipsă și un exemplu de a avea una prea multe paranteze de închidere.
#Sintaxă nesuportată
- Dacă utilizați un operator sau o semnătură de punctuație pe care ES nu le acceptă, acesta îl va afișa în casetă roșie.
- Atribuții nevalide
- Unele variabile sunt readWrite și pot avea valorile modificate. Altele sunt doar pentru citire.
- Dacă încercați să modificați valoarea unei variabile numai pentru citire, nu puteți. EM va marca în roșu încercarea.
- Dacă încercați să atribuiți o valoare unei ecuații sau unui șir, veți primi și o eroare
"Exemple live de evidențiere a sintaxelor cu sfaturi active
Sursă | Pretty Print | Rezultat |
---|---|---|
Iată un exemplu de sintaxă OK cu sfaturi Bună ziua {if(gen=='M','Mr.','Mrs.')} {prenume}, acum este {data('g:i a',time())}. Știți unde sunt copiii și animalele dvs. de companie {sum(numPets,numKids)}? | Iată un exemplu de sintaxă OK cu sfaturi Bună ziua dacă ( gen == 'M' , 'Mr.' , 'Mrs.' ) nume de familie , acum este data ( 'g:i a' , ora ()) . Știți unde sunt suma ( numPets , numKids ) copiii și animalele dvs. de companie? | Iată un exemplu de sintaxă OK cu sfaturi Bună ziua, domnule Smith , acum este ora 6:07. Stii unde sunt cei 3 copii si animalele tale? |
Iată erori comune, astfel încât să puteți vedea sfaturile instrumente Variabilele utilizate înainte de a fi declarate: {notSetYet} Funcție necunoscută: {iff(numPets>numKids,1,2)} Variabilă necunoscută: {sum(age,num_pets,numKids)} # parametri greșiți: {sprintf()},{if(1,2)},{date()} Atribuiți variabile numai în citire:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'} Paranteze dezechilibrate: {pow(3,4},{(pow(3,4)},{pow(3,4))} | Iată erori comune, astfel încât să puteți vedea sfaturile instrumente Variabilele utilizate înainte de a fi declarate: notSetYet Funcție necunoscută: ff ( numPets > numKids ,1,2) Variabilă necunoscută: sum ( vârstă , num_animale de companie , numKids ) # parametri greșiți: sprintf () , if (1,2) , data () Atribuiți variante numai pentru citire: TOKEN:ATTRIBUTE_1 += 10 , nume = „Sally” Paranteze dezechilibrate: pow (3,4 , ( pow (3,4) , pow (3,4) ) | Iată erori comune, astfel încât să puteți vedea sfaturile instrumente Variabilele utilizate înainte de a fi declarate: notSetYet Funcție necunoscută: ff ( numPets > numKids ,1,2) Variabilă necunoscută: sum ( vârstă , num_animale de companie , numKids ) # parametri greșiți: sprintf () , if (1,2) , data () Atribuiți variante numai pentru citire: TOKEN:ATTRIBUTE_1 += 10 , nume = „Sally” Paranteze dezechilibrate: pow (3,4 , ( pow (3,4) , pow (3,4) ) |
Iată câteva dintre sintaxa neacceptate Nu există suport pentru „++”, „--”, „%”,”;”: {min(++age, --age,age % 2);} Nici „|”, „&”, „^”: {(sum(2 | 3,3 & 4,5 ^ 6)}} Nici matrice: {nume[2], nume['al meu']} | Iată câteva dintre sintaxa neacceptate Fără suport pentru „++”, „--”, „%”,”;”: min ( ++ vârstă , -- vârstă , vârstă % 2) ; Nici „|”, „&”, „^”: ( suma (2 | 3,3 & 4,5 ^ 6) } Nici matrice: nume [ 2 ] , nume [ „al meu” ] | Iată câteva dintre sintaxa neacceptate Fără suport pentru „++”, „--”, „%”,”;”: min ( ++ vârstă , -- vârstă , vârstă % 2) ; Nici „|”, „&”, „^”: ( suma (2 | 3,3 & 4,5 ^ 6) } Nici matrice: nume [ 2 ] , nume [ „al meu” ] |
Exemple de personalizare (de ex. extinderea {INSERTANS:xxx})
"Stimate {domnule}/{doamna} Smith..."
Utilizați funcția if() pentru a alege în mod condiționat dacă să afișați „Mr. sau „doamna”.
Sintaxa este if(test,do_if_true,do_if_false).
# | Cod | Întrebare | Tip |
1 | gen | Care este genul tău? | Sex |
|example1 | Dragă {if(gen=='M','Domn','Doamnă')} Smith, ... | Text lung liber |
După cum se poate observa mai jos, „domnul” și „doamna” sunt adaptate la ceea ce respondentul selectează ca răspuns la întrebarea „sex”.
"Stimate {Domnule}/{Doamna} Smith..." în e-mailul de invitație
Puteți folosi exemplul de mai sus în e-mailul de invitație folosind atribute din tabelul de simboluri. Utilizați funcția if() pentru a alege dacă „Mr.” sau „Doamna”. ar trebui folosit în e-mail.
Sintaxa este „dacă(test,do_dacă_adevărat,do_dacă_fals)”.
# | atribut | valoare |
1 | Nume | Smith |
2 | Adresă de e-mail | test@test. com |
3 | ATTRIBUTE_2 | M |
Text în e-mailul de invitație:
Stimate {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},
ați fost invitat să participați la un sondaj:
https:/...
e-mail Vizualizare:
Exemple de calcul/evaluare
Calculați valorile de evaluare în timpul execuției și stocați rezultatele în datele sondajului
Acest exemplu utilizează toate caracteristicile EM, inclusiv Relevanța, Adaptarea și tipul de întrebare Ecuație.
De asemenea, arată că toate sunt activate pentru JavaScript, așa că dacă aveți aceste funcții pe o pagină, se va schimba dinamic pe măsură ce oamenii își stabilesc și își schimbă răspunsurile.
# | Cod | Întrebare | Tip | Relevanță |
1 | numKids | Câți copii aveți? | Introducere numerică | 1 |
2 | kid1 | Câți ani are primul tău copil? | Intrare numerică | numKids >= 1 |
3 | kid2 | Câți ani are al doilea tău copil copil? | Intrare numerică | numKids >= 2 |
4 | kid3 | Câți ani are al treilea copil? | Intrare numerică | numKids >= 3 |
5 | kid4 | Câți ani are al patrulea copil? | Intrare numerică | numKids >= 4 |
6 | sumKidAges | {sum(kid1.NAOK,kid2. NAOK,kid3.NAOK,kid4.NAOK)} | Ecuație | 1 |
7 | kidSummary | Ați spus că aveți {numKids}. {dacă(numKids==1,'copil','copii')}. {if(numKids>1,implode(' ','Suma vârstelor primilor tăi ',min(numKids,4),' copii este ',sumKidAges,'.'),' ')} | |1 |
Pentru a descărca acest exemplu, faceți clic pe următorul link: Assessments_survey_example.
Puteți găsi mai jos capturi de ecran cu întrebări reprezentative. După cum puteți vedea, sintaxa EM evidențiază toate câmpurile care ar putea conține personalizare. Aici vedeți exemple de relevanță pentru evidențierea sintaxelor, tipul de întrebare Ecuație și substituții în cadrul unei întrebări. De asemenea, puteți utiliza substituții în Ajutor, Afișare antet grup, Mesaj de bun venit și Mesaj de final.
În exemplul următor, întrucât relevanța este {numKids >= 2), întrebarea va fi vizibilă doar dacă respondentul raportează că are cel puțin doi copii.
Mai jos, puteți observa că fiecare variabilă are atașat sufixul .NAOK. Acest lucru se datorează modului în care EM acceptă relevanța în cascadă. Dacă nu ați avut .NAOK, atunci suma ar fi calculată numai dacă persoana a spus că are 4 copii (de exemplu, dacă toate variabilele sunt relevante). Utilizarea .NAOK înseamnă că dorim să calculăm suma chiar dacă toate sau unele dintre variabile sunt irelevante (de exemplu, „Nu se aplică” (NA) este în regulă (OK)).
Cu toate acestea, atributul .NAOK afectează doar dacă variabilele sunt transmise în EM. Dacă respondentul spune inițial că are 3 copii și introduce vârste pentru fiecare, apoi se răzgândește și spune că are 2, nu vrem să vedem suma celor 3 valori introduse - deoarece al treilea copil este „nu se aplică” mai in cazul nostru:
Fiecare expresie separată are un cod de culoare cu un fundal cafeniu. După cum puteți vedea, există trei expresii separate aici. Ultimul conține un mesaj care este afișat condiționat numai dacă persoana are mai mulți copii.
Acum, iată capturi de ecran ale sondajului în acțiune.
Când vizitați prima pagină, vedeți acest lucru. Rețineți că spune „Ai 0 „copii” în loc de „Ai 0 „copii””.
Dacă schimb valoarea pentru numărul de copii la 1, afișajul se schimbă instantaneu în aceasta, chiar dacă este pe aceeași pagină:
Acum observați că gramatica este corectă: „Ai 1 copil”.
Acum schimb valoarea pentru numărul de copii la 3, iar afișajul se schimbă instantaneu în aceasta.
Observați că acum vedeți mesajul condiționat în partea de jos: „Suma vârstelor primilor 3 copii ai tăi este 0.”.
Acum voi introduce vârstele pentru copiii mei imaginari și obțin acest afișaj, care rezumă vârstele lor:
Din nou, scorul și afișajul se actualizează instantaneu pe măsură ce introduc valorile, așa că puteți folosi acest lucru pentru a afișa un total cumulat al unui Scor de evaluare.
Acum, schimb valoarea pentru numărul de copii la 2. Afișajul s-a schimbat în următorul:
Observați că, deși am introdus o valoare de 5,5 pentru al treilea copil, raportul acum însumează doar valorile primilor mei 2 copii.
Motivul pentru aceasta este că a treia valoare este acum irelevantă, iar valorile irelevante sunt ignorate în mod activ de EM.
Dacă ar fi să schimb numărul de copii înapoi la 3, aș vedea valoarea de 5,5 pe care am introdus-o din nou. Deci, nu pierd nicio informație pe care o introduc pe pagină.
Cu toate acestea, dacă navighez la pagina Următoarea sau Anterior, toate valorile irelevante vor fi anulate în sesiune și în baza de date. Deci, dacă ar fi să mențin valoarea la 2, merg la pagina următoare, apoi revin și afirm că de fapt am 3 copii, nu aș mai vedea vârsta de 5,5 ani.
Introduceți date și vedeți un raport care se schimbă dinamic cu ceea ce a fost introdus pe aceeași pagină
Acest exemplu prezintă procesul de croitorie din LimeSurvey.
Pentru a descărca acest exemplu, faceți clic pe următorul link: Exemplu de sondaj privind modificările dinamice.
Iată cum arată pagina inițial. Vedeți doar întrebarea în ce oraș locuiți:
Odată ce începeți să introduceți un răspuns, începe și procesul de croitorie:
Pe măsură ce introduceți răspunsurile, tabelul din partea de jos a paginii este actualizat pentru a afișa codurile de răspuns și valorile răspunsurilor dvs.
Exemple comune de depanare
Instrucțiuni imbricate if() (logică condiționată)
EM acceptă funcția „if(test,do_if_true,do_if_false)”, astfel încât să puteți efectua logica condiționată sau adaptarea. Această funcție poate fi imbricată pentru a face echivalentul cu „if { } else if { } else { }”. EM vă va anunța dacă parantezele nu sunt echilibrate (de exemplu, vă lipsește o paranteză de închidere din dreapta) sau dacă aveți paranteze suplimentare în dreapta. Ar trebui să încercați să numărați parantezele pe măsură ce compuneți instrucțiuni if imbricate lungi, să le salvați, să verificați erorile de sintaxă și să le remediați dacă sunt găsite. Să verificăm împreună exemplul de mai jos.
Grupul de întrebări folosit mai jos poate fi accesat de aici: Cosator de personalizare example.lsg
În primul rând, fără a intra nimic, vedeți doar „Bună ziua”.
Dacă introduceți un nume, acesta spune „Bună ziua {nume}”.
Dacă introduceți o vârstă, primiți un mesaj personalizat, în funcție de dacă sunteți sau nu un copil de vârstă preșcolară:
De vârstă școlară, adolescent sau adult. Iată un adolescent care vrea să fie anonim:
Aici este fișierul logic al grupului. După cum puteți vedea în întrebarea „if-based”, există declarații if imbricate bazate pe vârsta persoanei.
Când editați inițial această întrebare, este posibil ca, la un moment dat, să aveți un număr greșit de paranteze. Iată ce se întâmplă dacă aveți prea puține:
Dacă treci cu mouse-ul peste cuvântul „dacă”, care este înconjurat de o căsuță roșie, se spune „Paranteze nu sunt echilibrate”. În acest caz, ar trebui să existe patru paranteze de închidere după „deja un adult!”, dar sunt doar trei.
Dacă, pe de altă parte, aveți o paranteză în plus dreapta, aceasta va fi înconjurată de o casetă roșie, astfel:
Când editați de fapt întrebarea, întrebarea arată astfel: