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

Primjeri ExpressionScripta

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 examples and the translation is 100% complete.
Pomozite nam proširiti ovaj članak dodavanjem vlastitih primjera. To će pomoći drugima da započnu s korištenjem skripte izraza.


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.

Vrsta Prikazuje/skriva Gdje pronaći Snimka zaslona
Relevantnost skupine pitanja skupina pitanja Izradi/Uredi skupinu pitanja -> "Jednadžba relevantnosti:"
Relevantnost pitanja pitanje Izradi/Uredi pitanje -> "Jednadžba relevantnosti:"
Relevantnost potpitanja potpitanje Uredi potpitanje -> "Jednadžba relevantnosti:"


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.

Vrsta Provjerava Gdje pronaći Snimka zaslona
Provjera pitanja pitanje Izradi/Uredi pitanje -> "Kartica Logika" -> "Jednadžba validacije pitanja"
Provjera potpitanja potpitanja Izradi/Uredi pitanje -> "Kartica Logika" -> "Jednadžba validacije potpitanja" ‎

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

Svrha Umetanje odgovora iz prethodnog pitanja
Vrsta Referenca
Primjer Prvo pitanje (kôd pitanja "Q00"): U kojem gradu živite?
Drugo pitanje (kôd pitanja "Q01") Koliko dugo živite u GRAD?
Za napraviti: Odgovor iz prvog pitanja treba se koristiti umjesto "GRAD" u drugom pitanju.
Izraz {QOO}
Opis Odgovor dan u Q00 zamjenjuje polje Q00 iz drugog pitanja
Koraci Izradi/Uredi drugo pitanje
Umetnite "Koliko dugo živite u {QOO} (godina)?" u polje teksta 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

Ovo se odnosi samo na vrstu pitanja s dvostrukom skalom.


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, ...


Za pozivanje na rezultat određenog potpitanja na određenoj skali morate upotrijebiti KôdPitanja . '_' . KôdPotpitanja . '_' . ScaleID. Imajte na umu da je "ScaleID" 0 za prvu skalu, a 1 za drugu!
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),"")}


Za ispis teksta potpitanja potrebno je rezerviranom mjestu dodati kôd odgovora (iako su tekstovi isti za sve opcije odgovora). Dakle, umjesto {q5_SQ001.question} moramo koristiti {q5_SQ001_A1.question} ili {q5_SQ001_A2.question}.

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)