Primjeri ExpressionScripta
From LimeSurvey Manual
Struktura
Prvi dio članka opisuje za što se sve izrazi mogu koristiti te gdje pronaći/dodati izraz. Drugi dio donosi primjere korištenja izraza.
Kategorije izraza
LimeSurvey koristi izraze u sljedeće svrhe:
Relevantnost
Svrha: Skrivanje skupina pitanja/pitanja
Relevantnost određuje hoće li skupina pitanja ili pitanje biti prikazano ili skriveno. Ako je rezultat izraza „istina” (tj. 1), element će biti prikazan. U suprotnom (ako je rezultat izraza „laž”, tj. 0), element će biti skriven.
Provjera
Svrha: Provjera unosa/radnji na pitanjima/potpitanjima/odgovorima
Provjera određuje je li unos ispitanika u pitanje ili radnja valjan ili nije. Ako je rezultat izraza „istina” (tj. 1), na element i poruku provjere primijenit će se klasa „good”. U suprotnom, ako je rezultat izraza „laž” (tj. 0), na element i poruku provjere primijenit će se klasa „error”. Stil za te klase možete definirati u datoteci template.css.
Ispis teksta
Svrhe: (Napraviti nešto i) ispisati neki tekst
Izraz se može koristiti za ispis nekog teksta. Primjerice, možete nešto provjeriti ili izračunati te odrediti ispis ovisno o rezultatu provjere ili izračuna. Može se koristiti i za umetanje teksta pitanja, odgovora, vrsta pitanja itd. pitanja koje se nalazi prije izraza. Ispis teksta može se koristiti svugdje gdje se prikazuje tekst i može vratiti sve vrste rezultata.
| Slučaj uporabe | Opis |
|---|---|
| Mikroprilagodba | Prilagodba teksta, npr. ispis „g.” ili „gđa” ovisno o prethodno postavljenom pitanju o spolu |
| Izračun | Izračunajte vrijednost i ispišite je, npr. „Prihod vaše obitelji iznosi xxx” |
| Referenca | Umetnite tekst iz nekog elementa, npr. „Vaše ime je xxx. Koliko imate godina?” |
Spremanje odgovora
Svrhe: (Napraviti nešto,) (ispisati neki tekst) i spremiti nešto u bazu podataka
Vrsta pitanja Jednadžba može se koristiti za spremanje nečega u bazu podataka. Pomoću izraza možete nešto izračunati, prikazati pitanje Jednadžba (koje je slično prikazu teksta) i spremiti rezultat izraza u bazu podataka. Odgovor se sprema u tablicu odgovora. Rezultat se zatim može koristiti u značajki statistike ili uvesti u jedan od formata koje nudi LimeSurveyjeva funkcionalnost izvoza.
Primjeri izraza
Umetanje odgovora iz prethodnog pitanja
Korištenje skrivenog pitanja jednadžbe za automatsko popunjavanje odgovora
Problem: Zamislite da imate dva pitanja, Q1 i Q2. Q1 pita ispitanike za dob. Q2 dijeli ispitanike u tri skupine: dob je manja od 20 godina, dob je 20, dob je veća od 20. Dakle, Q2 treba koristiti vrijednosti "1", "2", "3", koje odgovaraju gornjim uvjetima. Također ne smijemo zaboraviti Q2 učiniti nevidljivim (pitanje se neće prikazati u upitniku, ali će vrijednosti biti spremljene "pozadinskim procesom" u tablicu odgovora).
Za popunjavanje baze podataka pomoću vrste pitanja Jednadžba:
- Najprije izradite pitanje s kôdom Q1 kao pitanje numeričkog unosa.
- Zatim izradite drugo pitanje s kôdom Q2 kao pitanje jednadžbe.
- Na kartici "Postavke prikaza" pitanja Q2:
- postavite polje "Uvijek sakrij ovo pitanje" na "Uključeno"
- u polje "Jednadžba" upišite izraz:
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}
Izrada stranice sa sažetkom pomoću rezerviranih mjesta
Ovaj vodič pokazuje kako na kraju upitnika možete izraditi pregled koji navodi sva pitanja i odgovore pomoću rezerviranih mjesta ExpressionScripta. Također pokazuje kako takav pregled ograničiti samo na pitanja na koja je odgovoreno.
Naš primjer možete preuzeti ovdje: Primjer upitnika s rezerviranim mjestima.
Ovdje korišteni tipovi pitanja:
1. Pitanja s jednom opcijom / pojedinačna tekstualna/numerička pitanja
- Popis (padajući izbornik)
- Popis (Radio) [L]
- Da/Ne [Y]
- Slobodan dugačak tekst [T]
- Slobodan tekst (kratak) [S]
- Numerički unos [N]
- Jednadžba [*]
2. Pitanje s potpitanjima
- Više kraćih tekstova [Q]
- Višestruki izbor [M]
- Niz [F]
- Niz (Da/Ne/Nesiguran) [C]
- Niz (izbor u 10 opcija) [B]
3. Pitanja s 2 skale
- Niz dvostruke skale [1]
4. Pitanja s X i Y skalama
- Niz (Brojevi) [:]
5. Pitanja s maskom
- Prikaz teksta [X]
U ovom jednostavnom primjeru naš će pregled biti jednostavan popis s:
- Tekst pitanja: Odgovor korisnika
Pitanja s jednom opcijom / pojedinačna tekstualna/numerička pitanja
Za sve ove tipove pitanja LimeSurvey će spremiti jedan odgovor:
- Popis (padajući izbornik)
- Popis (Radio)
- Popis s komentarom
- Izbor 5 opcija
- Da/Ne
- Slobodan tekst (kratak)
- Slobodan dugačak tekst
- Slobodan tekst (dugačak)
- Numerički unos
- Jednadžba
- Datum
- Spol
Uz pretpostavku da je kôd pitanja q1, tekst pitanja i odgovor možemo referencirati pomoću:
- {q1.question}: {q1.shown}
Primjer:
- Koliko imate godina?: 25
Ako želite provjeriti je li na to pitanje odgovoreno, oko izlaza možete staviti naredbu IF:
{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}
Ovo se „prevodi” kao: AKO pitanje s kôdom q1 nije prazno, ispiši „- ” I tekst pitanja I „: ” I tekst odgovora (funkcija join() spaja elemente u novi niz znakova); INAČE: ne ispisuj ništa ("" znači prazan niz znakova).
Pitanje s potpitanjima
Za sve ove tipove pitanja LimeSurvey koristi potpitanja:
- Više kraćih tekstova
- Višestruki izbor
- Višestruki izbor s komentarima
- Niz
- Niz (izbor u 5 opcija)
- Niz (izbor u 10 opcija)
- Niz (Da/Ne/Nesiguran)
- Niz (Povećaj/Isto/Smanji)
- Niz po stupcima
Uz pretpostavku da je kôd pitanja q2, a potpitanja su numerirana kao SQ001, SQ002 (automatsko numeriranje obavlja LimeSurvey), tekst pitanja i odgovor možemo referencirati pomoću:
- {q2_SQ001.question}: {q2_SQ001.shown}
- {q2_SQ002.question}: {q2_SQ002.shown}
Kod pitanja s višestrukim izborom ima smisla ne prikazati tekst označenog potpitanja, već prikazati Y za svaku odabranu opciju:
- {q2_SQ001.question}: {q2_SQ001}
- {q2_SQ002.question}: {q2_SQ002}
...
Imajte na umu da trenutačno nije moguće ispisati tekst pitanja koja sadrže potpitanja, pogledajte ovaj zahtjev za novu funkciju.
Primjer 1 (pretpostavka: vrsta pitanja je višestruki izbor)
- Poznajete li ove marke automobila?
-- Mercedes: Y
-- Audi: N
-- Volvo: Y
Ako želite ispisati samo označene stavke, možete oko izlaznog teksta postaviti naredbu IF i provjeriti vrijednost potvrdnog okvira:
{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }
Upotrijebite funkciju listifop ako želite ispisati popis samo odabranih stavki, npr.: Mercedes, Volvo
{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }
Pri čemu se that.q2 proširuje na sva potpitanja pitanja q2. Više pojedinosti potražite u odjeljku self, this i that.
Primjer 2 (pretpostavka: vrsta pitanja je Niz (izbor u 10 opcija))
- Molimo ocijenite kvalitetu dolje navedenih marki automobila na skali od 1=vrlo loše do 10=vrlo dobro?
-- Mercedes: 7
-- Audi: 9
-- Volvo: 9
Ako želite ispisati samo ocijenjene stavke, možete oko izlaznog teksta postaviti naredbu IF i provjeriti je li na trenutačno potpitanje odgovoreno pomoću:
{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }
Upotrijebite funkciju listifop ako, na primjer, želite ispisati popis samo odabranih stavki većih od osam, npr.: Audi / Volvo
{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }
Pitanje s dvije skale
Pretpostavimo da se koriste sljedeći kôdovi:
- Kôd pitanja: q4
- Kôdovi potpitanja: SQ001, SQ002, ...
- Kôdovi odgovora, skala 1: A1, A2, ...
- Kôdovi odgovora, skala 2: B1, B2, ...
Primjer pozivanja na odgovor trećeg potpitanja i druge skale: q4_SQ003_1 - pitanje 4, potpitanje 3, druga skala.
Ispišimo rezultate za obje skale i prva dva potpitanja:
- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}
- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}
Da biste ispisali tekst potpitanja, rezerviranom mjestu morate dodati ID skale (iako su tekstovi isti za obje skale). Dakle, umjesto {q4_SQ001.question} moramo upotrijebiti {q4_SQ001_0.question} ili {q4_SQ001_1.question}.
Ako želite izvesti/prikazati rezultate samo onih potpitanja koja imaju barem jedan odgovor, za svako potpitanje upotrijebite ovu sintaksu:
{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}
Pitanje s X i Y skalama
Ovo se odnosi na sva matrična pitanja koja omogućuju odgovor za svaku ćeliju (a ne samo za svaki redak, kao u prethodnom primjeru):
- Niz (Tekstovi)
- Niz (Brojevi)
Pretpostavljeni korišteni kôdovi:
- Kôd pitanja: q5
- Kôdovi potpitanja: SQ001, SQ002, ...
- Kôdovi odgovora: A1, A2, ...
Za referenciranje rezultata određenog potpitanja iz određenog stupca potrebno je koristiti QuestionCode . '_' . SubQuestionCode . '_' . AnswerCode. Primjer referenciranja odgovora trećeg potpitanja i drugog stupca: q5_SQ003_A2.
Ispišimo rezultate za stupce 1-3 prva dva potpitanja:
- {q5_SQ001_A1.question}: {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown}
- {q5_SQ002_A1.question}: {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown}
Budući da kod ovih vrsta pitanja svaka ćelija (kombinacija X osi i Y osi) odgovara jednoj opciji odgovora, provjeru postojanja podataka potrebno je napraviti za svaku ćeliju. Primjer:
{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}
Sakrijte pitanje ako je odgovor na prethodno pitanje prazan
| Svrha | Sakrijte pitanje ako je odgovor na prethodno pitanje prazan |
| Vrsta | Relevantnost pitanja |
| Primjer | Pitanje jedan: kôd pitanja "name", tekst pitanja "Kako se zovete?" Pitanje dva: tekst pitanja "{name}, koliko imate godina?" Zadatak: Sakrijte pitanje dva ako je tekstualno polje pitanja jedan prazno |
| Izraz | !is_empty(name) |
| Opis | is_empty() određuje smatra li se varijabla praznom. Znak "!" negira rezultat. Dakle, ako varijabla nije prazna, izraz će biti istinit i pitanje će se prikazati |
| Koraci | Izradite/uredite pitanje dva Unesite "!is_empty(name)" u "Jednadžba relevantnosti:" |
| Primjer datoteke | Hide_question_if_empty_question_group.zip |
![]()
| |
Sakrijte skupinu pitanja ako je odgovor na prethodno pitanje Da ili Ne
| Svrha | Sakrijte skupinu pitanja ako je odgovor na prethodno pitanje Da ili Ne |
| Vrsta | Relevantnost skupine pitanja |
| Primjer | Stranica jedan, skupina pitanja jedan, pitanje jedan: kôd pitanja "PET", tekst pitanja "Imate li kućnog ljubimca?" -Da -Ne Stranica dva, skupina pitanja dva: naslov "O vašim ljubimcima" Zadatak: Prikažite/sakrijte skupinu pitanja dva ovisno o tome je li odgovor na pitanje jedan Da/Ne |
| Izraz | PET == "Y" |
| Opis | PET je kôd pitanja čiji odgovor želite provjeriti. Ako ne koristite sufiks, EM će koristiti "Qcode.code". Dakle, kôd odgovora na pitanje PET uspoređujete s vrijednošću "Y". Ako ispitanik odgovori "Da", izraz je istinit i skupina pitanja "O vašim ljubimcima" bit će prikazana. |
| Koraci | Izradite/uredite skupinu pitanja dva Unesite "PET == "Y"" u "Jednadžba relevantnosti:" |
| Primjer datoteke | Hide_question_group_if_answer_from_previous_question_is_Yes_or_No.zip |
![]()
| |
Prikaz vrijednosti polja pitanja s višestrukim unosom odgovora
| Svrha | Prikaz vrijednosti polja pitanja s višestrukim unosom odgovora |
| Vrsta | Referenca |
| Primjer | Pitanje jedan: kôd pitanja "AskChildAge", tekst pitanja "Koliko godina imaju vaša djeca?". Kôdovi potpitanja -Child1 -Child2 -Child3 - ChildXXX Pitanje dva: kôd pitanja "ReportChildAge", tekst pitanja "O vašem prvom djetetu: - CHILD1 ima AGE1." |
| Izraz | {AskChildAge_Child1.question}, {AskChildAge_Child1.value} |
| Opis | Želite koristiti vrijednost potpitanja u sljedećem pitanju. Vrijednosti potpitanja možete pristupiti ovakvim izrazom: QcodeQuestion_QcodeSubquestion.value |
| Koraci | Izradite/uredite drugo pitanje Unesite ovaj tekst u opis: "O vašem prvom djetetu: - {AskChildAge_Child1.question} ima {AskChildAge_Child1.value}." |
| Primjer datoteke | Display_value_of_a_multiple_answer_input_question_field.zip |
| |
Provjera broja označenih okvira po retku za pitanje "Niz (Brojevi) potvrdni okvir"
| Svrha | Provjera broja označenih okvira po retku |
| Vrsta | Provjera |
| Primjer | Pitanje vrste "Niz (Brojevi)" s izgledom potvrdnog okvira (checkbox-a) |
| Izraz | sum(...) |
| Opis | (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) određuje je li označeno najviše X potvrdnih okvira u retku A. Ako želite provjeriti sva tri retka (A, B, C), izraze možete povezati pomoću "&&": (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= X) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= X) |
| Koraci | Izradite/uredite pitanje vrste "Niz (Brojevi)" s izgledom potvrdnog okvira (checkbox-a). Unesite gornji izraz u "Jednadžba validacije pitanja" u naprednim postavkama pitanja (možda ćete morati prilagoditi nazive varijabli!). |
| Primjer datoteke | Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss |
![]()
| |
Izračun razlike između dva datuma
| Svrha | Izračun razlike između dva datuma |
| Vrsta | Relevantnost / Vrsta pitanja jednadžba / Provjera |
| Primjer | Pitanje jedan (datum/vrijeme, kôd: DOB): Koji je vaš datum rođenja? Pitanje dva (datum/vrijeme, kôd: datetoday): Koji je današnji datum? Pitanje tri (tekstni prikaz): Stari ste XXXX dana. Zadatak: Izračunajte i prikažite broj dana između datuma unesenog u pitanju 1 i pitanju 2. |
| Izraz | {(strtotime(datetoday)-strtotime(DOB))/60/60/24} |
| Opis | strtotime izračunava broj sekundi između 1. siječnja 1970. i zadanog datuma. Gornji izraz izračunava broj sekundi između dva zadana datuma. Izraz "/60/60/24" samo pretvara broj sekundi u broj dana. Umjesto traženja "datetoday", možete koristiti i strtotime('now') ili jednostavno time(), što izravno vraća broj sekundi od siječnja 1970. do sada (tj. do trenutka ispunjavanja upitnika). Tako možete brzo izračunati starost osobe u godinama jednadžbom {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25}. U svim ovim slučajevima ključno je da je datum unesen u ispravnom formatu, inače funkcija strtotime() neće raditi ispravno. |
| Koraci | Izradite dva pitanja s datumom (za datum rođenja i za današnji datum) i jedno pitanje s tekstnim prikazom. U tekst pitanja s tekstnim prikazom unesite: "Na dan {datetoday} imali ste {(strtotime(today)-strtotime(dob))/60/60/24} dana." Napomena: funkcija strtotime radi s MNOGIM, ali ne sa svim formatima datuma. Ako naiđete na probleme, postavite Format datuma u svom upitniku na mm/dd/yyyy, yyyy-mm-dd ili dd.mm.yyyy" |
| Primjer datoteke | Date_difference.zip |
| |
Korištenje ExpressionScripta za procjene
Evo još jednog primjera korištenja ExpressionScripta s pitanjima vrste niz i procjenama:</ br>
Recimo da imate 2 pitanja vrste niz i želite spremiti rezultate izračuna u svoju bazu podataka. To je zapravo jednostavno: trebate izraditi i testirati nizove te poslati probni odgovor kako biste provjerili radi li sve ispravno i prikazuje li rezultate na stranici dovršetka.
Detalji implementacije:
- dodajte pitanje vrste jednadžba
- dodajte sljedeći redak uz pretpostavku da je Q1 kôd vašeg pitanja vrste niz, a Q2 kôd drugog:
{sum(Q1_SQ001.value,Q2_SQ001.value)}
Imajte na umu da je SQ001 zadani kôd svakog potpitanja. Ako promijenite kôd potpitanja, odgovarajuće prilagodite gornju jednadžbu.
Korištenje em_validation_q u nizu
Pomoću jednadžbe validacije pitanja možete kontrolirati niz s bilo kojim uvjetom.
Detalji implementacije:
- za prvi niz: niz s jednim odabirom
- Kôd pitanja je ARRAY
- Kôdovi potpitanja su SQ01, SQ02, SQ03 i SQ04
- ažurirajte jednadžbu validacije cijelog pitanja i unesite
!is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03)
- za drugi niz: niz tekstova
- Kôd pitanja je ARRAYTEXT
- Kôdovi potpitanja na Y osi su SY01, SY02, SY03 i SY04
- Ažurirajte jednadžbu validacije cijelog pitanja i unesite
count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)








