x

Glavna poglavlja

  1. LimeSurvey Cloud u usporedbi s LimeSurvey CE
  2. Vodič za brzi početak - LimeSurvey 3.0+
  3. Instalacija - LimeSurvey CE
  4. Kako izraditi dobar upitnik (vodič)
  5. Početak rada
  6. Administriranje LimeSurveya
  7. Upitnici - uvod
  8. Postavke upitnika
  9. Izbornik upitnika
  10. Struktura upitnika
  11. Pitanja - uvod
  12. Skupine pitanja - uvod
  13. Upitnici - upravljanje
  14. Opcije alatne trake upitnika
  15. Višejezični upitnik
  16. ExpressionScript Engine - Vodič za brzi početak
  17. Nekategorizirane i napredne značajke
  18. Opći FAQ
  19. Rješavanje problema
  20. Zaobilazna rješenja
  21. Licenca
  22. Popis izmjena po verzijama
  23. Dodaci
 Actions

ExpressionScript upute po primjerima

From LimeSurvey Manual

Ova je stranica možda strojno prevedena i može sadržavati pogreške. Prikaži engleski izvornik · Poboljšaj ovaj prijevod
This page is a translated version of the page ExpressionScript How-tos and the translation is 100% complete.


Pregled dosadašnjih objašnjenja

Ako ste do sada pratili strukturu LimeSurvey uputa, već poznajete LimeSurvey terminologiju. Zatim smo obradili izraze i varijable kako bismo naučili kako poboljšati svoje upitnike. U sljedećem dijelu prešli smo na vrste i značenja isticanja sintakse kako bismo naučili ispravljati sintaktičke pogreške.

Kada su ti osnovni pojmovi obrađeni, možemo prijeći na primjere i objasniti kako izrazi funkcioniraju u LimeSurveyu.


Isticanje sintakse

Sljedeće snimke zaslona daju primjere, ali ne prikazuju vrijednosti opisa alata (tooltip). Opis alata je informativni okvir koji se prikazuje kada mišem prijeđete preko bilo koje podebljane obojene riječi.

Zahvaljujući ovom isticanju sintakse vrlo je lako sastaviti ispravne izraze, čak i one složene. Iako LimeSurvey tim planira izraditi grafičko sučelje za izradu izraza (Expression Builder), postojeće isticanje sintakse možete koristiti za brzo prepoznavanje i ispravljanje tipfelera. Opise alata možete koristiti i za provjeru točnosti svojih izraza (npr. potvrdite da ste odabrali željenu varijablu ili varijable).

U svakom primjeru postoje tri stupca:

  1. Izvor - ovo je neobrađeni tekst koji biste unijeli u polje pitanja u LimeSurveyu
  2. Formatirani prikaz - ovo je ekvivalent unesenog teksta s istaknutom sintaksom
    • Imajte na umu da su izrazi u ovom isticanju prikazani smeđkastom pozadinom, ali nisu okruženi vitičastim zagradama.
    • Budući da EM podržava rekurzivnu zamjenu, prikaz vitičastih zagrada u isticanju izazvao bi sintaktičke pogreške
  3. Rezultat - ovo je izlaz koji nastaje kada EM obradi izvor
    • Sve što se može ispravno zamijeniti bit će zamijenjeno
    • Izrazi s pogreškama prikazani su u retku, s isticanjem sintakse. Pogreške su okružene crveno obrubljenim okvirom.


Ispravna sintaksa

U nastavku možete pronaći primjere ispravne sintakse:

  1. Vrijednosti: prikazuje da su poznate varijable obojene ovisno o tome jesu li postavljene na trenutnoj stranici.
  2. Atributi pitanja: prikazuje da se pomoću točkaste notacije može pristupiti nekim svojstvima pitanja
  3. Matematika: prikazuje da su podržani osnovni i složeni izračuni
  4. Obrada teksta: prikazuje neke od dostupnih funkcija za obradu teksta
  5. Datumi: prikazuje dvije od dostupnih funkcija povezanih s datumima
  6. Uvjetno: prikazuje upotrebu funkcije if(). Izbori mogu biti ugniježđeni.
  7. Prilagođeni odlomak: izvješće možete u potpunosti prilagoditi na temelju prethodnih vrijednosti
  8. EM obrađuje unutar nizova znakova: prikazuje da može obavljati zamjene unutar nizova znakova. Ovaj primjer generira prilagođeni naziv slike.
  9. EM ne obrađuje vitičaste zagrade poput ovih: prikazuje da ES zanemaruje izraz ako su vitičaste zagrade escapeane ili ako postoji razmak između izraza i vitičastih zagrada.


EM sintaksa s pogreškama

Ovdje su primjeri uobičajenih pogrešaka pri upisivanju ES izraza. Imajte na umu da opisi alata pružaju dodatne informacije.

  1. Umetnuti JavaScript u kojem nisu dodani razmaci nakon vitičaste zagrade
    • Budući da se "document.write" pojavljuje odmah nakon vitičaste zagrade, EM pretpostavlja da je riječ o izrazu te crvenim okvirom označava "document" i "write" jer su to nedefinirana varijabla, odnosno funkcija
  2. Nepoznate/pogrešno napisane varijable, funkcije i operatori
    • Ovdje smo zaboravili da koristimo naziv varijable "gender" umjesto "sex", ali EM uočava tu pogrešku. Crvenim okvirom označava i '++', jer to nije podržan operator.
  3. Upozorava ako koristite = umjesto eq ili obavljate dodjelu vrijednosti
    • Imajte na umu da su '=' i '+=' u crvenom, a ne crnom tekstu. Ako mišem prijeđete preko njih, vidjet ćete upozorenja da dodjeljujete vrijednost.
  4. Pogrešan broj argumenata za funkcije
    • if() prima 3 argumenta, ali je dobio 4, pa će prelazak mišem preko "if" u crvenom okviru objasniti pogrešku i prikazati podržanu sintaksu
    • sum() prima neograničen broj argumenata, ali imali smo zarez prije zatvarajuće zagrade, pa je on označen crvenim okvirom
  5. Neusklađene zagrade
    • Ovo je jedna od najčešćih pogrešaka pri pisanju izraza.
    • Ovdje su prikazana dva primjera nedostajućih zatvarajućih zagrada i jedan primjer jedne suvišne zatvarajuće zagrade.
  6. Nepodržana sintaksa
    • Ako koristite operator ili interpunkcijski znak koji ES ne podržava, bit će označen crvenim okvirom.
  7. Nevažeće dodjele
    • Neke varijable su readWrite i njihove se vrijednosti mogu mijenjati. Druge su samo za čitanje.
    • Ako pokušate promijeniti vrijednost varijable samo za čitanje, to nije moguće. EM će pokušaj označiti crvenim okvirom.
    • Ako pokušate dodijeliti vrijednost jednadžbi ili nizu znakova, također ćete dobiti pogrešku



"Živi" primjeri isticanja sintakse s aktivnim opisima alata

IzvorFormatirani prikazRezultat
Ovo je primjer ispravne sintakse s opisima alata
Pozdrav {if(gender=='M','Mr.','Mrs.')} {surname}, sada je {date('g:i a',time())}. Znate li gdje se nalazi vaših {sum(numPets,numKids)} djece i kućnih ljubimaca?
Ovo je primjer ispravne sintakse s opisima alata
Pozdrav if(gender == 'M','Mr.','Mrs.') surname, sada je date('g:i a',time()). Znate li gdje se nalazi vaših sum(numPets,numKids) djece i kućnih ljubimaca?
Ovo je primjer ispravne sintakse s opisima alata
Pozdrav Mr. Smith, sada je 6:07 am. Znate li gdje se nalazi vaših 3 djece i kućnih ljubimaca?
Ovdje su uobičajene pogreške kako biste vidjeli opise alata
Varijable korištene prije deklaracije: {notSetYet}
Nepoznata funkcija: {iff(numPets>numKids,1,2)}
Nepoznata varijabla: {sum(age,num_pets,numKids)}
Pogrešan broj parametara: {sprintf()},{if(1,2)},{date()}
Dodjela vrijednosti varijablama samo za čitanje:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'}
Nesparene zagrade: {pow(3,4},{(pow(3,4)},{pow(3,4))}
Ovdje su uobičajene pogreške kako biste mogli vidjeti opise alata
Varijable korištene prije nego što su deklarirane: notSetYet
Nepoznata funkcija: iff(numPets > numKids,1,2)
Nepoznata varijabla: sum(age,num_pets,numKids)
Pogrešan broj parametara: sprintf(),if(1,2),date()
Dodjela vrijednosti varijablama samo za čitanje:TOKEN:ATTRIBUTE_1+=10,name='Sally'
Neuravnotežene zagrade: pow(3,4,(pow(3,4),pow(3,4))
Ovdje su uobičajene pogreške kako biste mogli vidjeti opise alata
Varijable korištene prije nego što su deklarirane: notSetYet
Nepoznata funkcija: iff(numPets > numKids,1,2)
Nepoznata varijabla: sum(age,num_pets,numKids)
Pogrešan broj parametara: sprintf(),if(1,2),date()
Dodjela vrijednosti varijablama samo za čitanje:TOKEN:ATTRIBUTE_1+=10,name='Sally'
Neuravnotežene zagrade: pow(3,4,(pow(3,4),pow(3,4))
Evo dijela nepodržane sintakse
Nema podrške za '++', '--', '%',';': {min(++age, --age,age % 2);}
Niti za '|', '&', '^': {(sum(2 | 3,3 & 4,5 ^ 6)}}
Niti za polja: {name[2], name['mine']}
Evo dijela nepodržane sintakse
Nema podrške za '++', '--', '%',';': min( ++ age, -- age,age % 2) ;
Niti za '|', '&', '^': (sum(2 | 3,3 & 4,5 ^ 6)}
Niti za polja: name [ 2 ] ,name [ 'mine' ]
Evo dijela nepodržane sintakse
Nema podrške za '++', '--', '%',';': min( ++ age, -- age,age % 2) ;
Niti za '|', '&', '^': (sum(2 | 3,3 & 4,5 ^ 6)}
Niti za polja: name [ 2 ] ,name [ 'mine' ]


Primjeri prilagodbe

"Poštovani {Mr}/{Mrs} Smith..."

Upotrijebite funkciju if() za uvjetni odabir prikaza 'Mr.' ili 'Mrs.'.

Sintaksa je if(test,do_if_true,do_if_false).

# Šifra Pitanje Vrsta
1 gender Koji je vaš spol? Spol
2 example1 Poštovani {if(gender=='M','Mr.','Mrs.')} Smith, ... Slobodan dugačak tekst



Kao što se može vidjeti u nastavku, "Mr" i "Mrs" prilagođavaju se odgovoru koji ispitanik odabere na pitanje "gender".



"Poštovani {Mr}/{Mrs} Smith..." u e-mailu pozivnice

Gornji primjer možete upotrijebiti u e-mailu pozivnice pomoću atributa iz tablice sudionika (token). Upotrijebite funkciju if() kako biste odabrali treba li u e-pošti koristiti 'Mr.' ili 'Mrs.'.


Sintaksa je "if(test,do_if_true,do_if_false)".

# atribut vrijednost
1 Prezime Smith
2 E-mail adresa test@test.com
3 ATTRIBUTE_2 M


Tekst u e-mailu pozivnice:

Poštovani {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},

pozvani ste na sudjelovanje u upitniku:

https:/...



Prikaz e-pošte:


Primjeri izračuna / procjene

Izračunajte vrijednosti procjene tijekom izvođenja i spremite rezultate u podatke upitnika

Ovaj primjer koristi sve značajke EM-a, uključujući relevantnost, prilagodbu i vrstu pitanja jednadžba.

Također pokazuje da sve one podržavaju JavaScript, pa će se stranica koja sadrži ove značajke dinamički mijenjati dok ispitanici unose i mijenjaju svoje odgovore.

# Šifra Pitanje Vrsta Relevantnost
1 numKids Koliko djece imate? Numerički unos 1
2 kid1 Koliko godina ima vaše prvo dijete? Numerički unos numKids >= 1
3 kid2 Koliko godina ima vaše drugo dijete? Numerički unos numKids >= 2
4 kid3 Koliko godina ima vaše treće dijete? Numerički unos numKids >= 3
5 kid4 Koliko godina ima vaše četvrto dijete? Numerički unos numKids >= 4
6 sumKidAges {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK)} Jednadžba 1
7 kidSummary Rekli ste da imate {numKids}. {if(numKids==1,'child','children')}. {if(numKids>1,implode(' ','The sum of ages of your first ',min(numKids,4),' kids is ',sumKidAges,'.'),' ')} Prikaz teksta 1


Za preuzimanje ovog primjera kliknite na sljedeću poveznicu: Assessments_survey_example.


U nastavku možete pronaći snimke zaslona reprezentativnih pitanja. Kao što vidite, EM sintaksnim isticanjem označava sva polja koja mogu sadržavati prilagodbu. Ovdje vidite primjere sintaksnog isticanja za relevantnost, vrstu pitanja jednadžba i zamjene unutar pitanja. Zamjene možete koristiti i u pomoći, prikazu zaglavlja grupe, poruci dobrodošlice i završnoj poruci.

U sljedećem primjeru, budući da je relevantnost {numKids >= 2), pitanje će biti vidljivo samo ako ispitanik navede da ima barem dvoje djece.



U nastavku možete primijetiti da je svakoj varijabli dodan sufiks .NAOK. To je zbog načina na koji EM podržava kaskadnu relevantnost. Da nema .NAOK, zbroj bi se izračunao samo ako osoba navede da ima 4 djece (tj. ako su sve varijable relevantne). Korištenje .NAOK znači da želimo izračunati zbroj čak i ako su sve ili neke varijable irelevantne (tj. „Nije primjenjivo” (NA) je u redu (OK)).

Međutim, atribut .NAOK utječe samo na to prosljeđuju li se varijable u EM. Ako ispitanik na početku kaže da ima troje djece i unese dob svakog od njih, a zatim se predomisli i kaže da ima dvoje, ne želimo vidjeti zbroj tri unesene vrijednosti - jer treće dijete u našem slučaju više nije „primjenjivo”:



Svaki zasebni izraz označen je bojom, s tamnobež pozadinom. Kao što vidite, ovdje postoje tri zasebna izraza. Posljednji sadrži poruku koja se uvjetno prikazuje samo ako osoba ima više od jednog djeteta.



Evo snimaka zaslona upitnika u radu.

Kada prvi put posjetite stranicu, vidite ovo. Primijetite da piše „Imate 0 djece” umjesto „Imate 0 dijete”.



Ako promijenim vrijednost broja djece na 1, prikaz se odmah mijenja u ovo, iako se nalazi na istoj stranici:



Sada primijetite da je gramatika ispravna: „Imate 1 dijete”.

Sada mijenjam vrijednost broja djece na 3 i prikaz se odmah mijenja u ovo.

Primijetite da sada pri dnu vidite uvjetnu poruku: „Zbroj dobi vaše prvo troje djece iznosi 0.”.



Sada ću unijeti dob svoje zamišljene djece i dobivam ovaj prikaz, koji zbraja njihovu dob:



Rezultat i prikaz ponovno se ažuriraju odmah dok unosim vrijednosti, pa to možete koristiti za prikaz tekućeg zbroja procjene.


Sada mijenjam vrijednost broja djece na 2. Prikaz se promijenio u ovo:



Primijetite da, iako sam za treće dijete unio vrijednost 5,5, izvješće sada zbraja samo vrijednosti prvih dvoje djece.

Razlog tome je što je treća vrijednost sada irelevantna, a EM aktivno zanemaruje irelevantne vrijednosti.

Ako broj djece vratim na 3, ponovno bih vidio vrijednost 5,5 koju sam unio. Dakle, ne gubim nijednu informaciju koju unesem na stranicu.

Međutim, ako prijeđem na sljedeću ili prethodnu stranicu, sve irelevantne vrijednosti bit će postavljene na NULL u sesiji i u bazi podataka. Dakle, ako bih ostavio vrijednost 2, prešao na sljedeću stranicu, a zatim se vratio i naveo da zapravo imam troje djece, više ne bih vidio dob 5,5.


Unesite podatke i pogledajte dinamički promjenjivo izvješće o unesenom na istoj stranici

Ovaj primjer prikazuje proces prilagodbe unutar LimeSurveya.

Za preuzimanje ovog primjera kliknite sljedeću poveznicu: Primjer upitnika s dinamičkim promjenama.

Ovako stranica izgleda na početku. Vidite samo pitanje u kojem se pita u kojem gradu živite:



Čim počnete unositi odgovor, započinje i proces prilagodbe (tailoring):


Dok unosite odgovore, tablica pri dnu stranice se ažurira i prikazuje kôdove odgovora i vrijednosti vaših odgovora.


Uobičajeni primjeri otklanjanja pogrešaka

Ugniježđene naredbe if() (uvjetna logika)

EM podržava funkciju "if(test,do_if_true,do_if_false)" kako biste mogli provoditi uvjetnu logiku ili prilagodbu. Ova se funkcija može ugnijezditi kako bi se postigao ekvivalent "if { } else if { } else { }". EM će vas obavijestiti ako zagrade nisu uravnotežene (npr. nedostaje zatvorena desna zagrada) ili ako imate suvišne desne zagrade. Prilikom pisanja dugih ugniježđenih naredbi if pokušajte prebrojati zagrade, spremite ih, provjerite postoje li sintaksne pogreške i ispravite ih ako ih pronađete. Provjerimo zajedno donji primjer.

Grupa pitanja korištena u nastavku dostupna je ovdje: Primjer upitnika s prilagodbom.lsg


Prvo, dok ništa nije uneseno, vidite samo "Pozdrav."



Ako unesete ime, prikazat će se "Pozdrav {name}."



Ako unesete dob, dobit ćete prilagođenu poruku, ovisno o tome je li riječ o djetetu predškolske dobi ili nije:



Školska dob, tinejdžer ili odrasla osoba. Evo tinejdžera koji želi ostati anoniman:



Ovo je datoteka s logikom grupe. Kao što vidite u pitanju temeljenom na naredbi "if", postoje ugniježđene naredbe if koje se temelje na dobi osobe.



Kada prvi put uređujete ovo pitanje, vjerojatno ćete u nekom trenutku imati pogrešan broj zagrada. Evo što se događa ako ih imate premalo:



Ako prijeđete mišem preko riječi "if", koja je okružena crvenim okvirom, prikazat će se "Parentheses not balanced" (zagrade nisu uravnotežene). U ovom slučaju iza "already an adult!" trebale bi biti četiri zatvorene zagrade, a ima ih samo tri.

Ako, s druge strane, imate suvišnu desnu zagradu, bit će okružena crvenim okvirom, ovako:



Kada zaista uređujete pitanje, ono izgleda ovako: