Príklady ExpressionScript
From LimeSurvey Manual
Štruktúra
Prvá časť článku popisuje, na čo možno výrazy používať a kde ich nájsť alebo pridať. Druhá časť obsahuje príklady použitia výrazov.
Kategórie výrazov
LimeSurvey používa výrazy na tieto účely:
Relevancia
Účel: Skrývanie skupín otázok/otázok
Relevantnosť určuje, či sa skupina otázok alebo otázka zobrazí, alebo skryje. Ak je výsledok výrazu „true“ (t. j. 1), prvok sa zobrazí. V opačnom prípade (ak je výsledok výrazu „false“, t. j. 0) bude prvok skrytý.
Validácia
Účel: Validácia vstupov/akcií pri otázkach/podotázkach/odpovediach
Validácia určuje, či je vstup respondenta do otázky alebo akcia platná, alebo nie. Ak je výsledok výrazu „true“ (t. j. 1), na prvok a validačnú správu sa použije trieda „good“. V opačnom prípade, ak je výsledok výrazu „false“ (t. j. 0), na prvok a validačnú správu sa použije trieda „error“. Štýl pre tieto triedy môžete definovať v súbore template.css.
Textový výstup
Účely: (Niečo vykonať) a vypísať nejaký text
Výraz možno použiť na vypísanie textu. Môžete napríklad niečo otestovať alebo vypočítať a podľa výsledku testu či výpočtu určiť výstup. Možno ho použiť aj na vloženie textu otázky, odpovedí, typov otázok atď. otázky, ktorá bola použitá pred výrazom. Textový výstup možno použiť všade, kde sa zobrazuje text, a môže vracať akýkoľvek druh výsledkov.
| Prípad použitia | Popis |
|---|---|
| Mikroprispôsobenie | Úprava textu, napr. napísať „pán“ alebo „pani“ podľa predtým položenej otázky na pohlavie |
| Výpočet | Vypočítať hodnotu a vypísať ju, napr. „Príjem vašej rodiny je xxx“ |
| Odkaz | Vložiť text z prvku, napr. „Vaše meno je xxx. Koľko máte rokov?“ |
Ukladanie odpovedí
Účely: (Niečo vykonať,) (vypísať nejaký text) a uložiť niečo do databázy
Typ otázky Rovnica možno použiť na uloženie údajov do databázy. Pomocou výrazu môžete niečo vykonať, zobraziť otázku typu Rovnica (ktorá je podobná zobrazeniu textu) a uložiť výsledok výrazu do databázy. Odpoveď sa uloží do tabuľky odpovedí. Výsledok potom možno použiť vo funkcii štatistík alebo ho možno importovať do jedného z formátov, ktoré poskytuje funkcia exportu LimeSurvey.
Príklady výrazov
Vloženie odpovede z predchádzajúcej otázky
Použitie skrytej otázky typu rovnica na automatické vyplnenie odpovede
Problém: Predstavte si, že máte dve otázky Q1 a Q2. Q1 sa pýta respondentov na vek. Q2 rozdeľuje respondentov do troch skupín: vek je pod 20 rokov, vek je 20, vek je viac ako 20. Q2 teda má používať hodnoty „1“, „2“, „3“, ktoré zodpovedajú uvedeným podmienkam. Nesmieme tiež zabudnúť Q2 skryť (otázka sa v prieskume nezobrazí, ale hodnoty sa uložia „procesom na pozadí“ do tabuľky odpovedí).
Vyplnenie databázy pomocou typu otázky Rovnica:
- Najprv vytvorte otázku s kódom Q1 ako otázku s číselným vstupom.
- Potom vytvorte ďalšiu otázku s kódom Q2 ako otázku typu rovnica.
- Na karte „Nastavenia zobrazenia“ otázky Q2:
- nastavte pole „Vždy skryť túto otázku“ na „Zapnuté“
- do poľa „Rovnica“ zadajte výraz:
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}
Vytvorenie súhrnnej stránky pomocou zástupných symbolov
Tento návod ukazuje, ako môžete na konci prieskumu vytvoriť prehľad, ktorý zobrazí všetky otázky a odpovede pomocou zástupných symbolov ExpressionScript. Ukazuje tiež, ako takýto prehľad obmedziť len na zodpovedané otázky.
Náš príklad si môžete stiahnuť tu: Príklad prieskumu so zástupnými znakmi.
Tu použité typy otázok:
1. Otázky s jednou odpoveďou / jednoduché textové/číselné otázky
- Rozbaľovací zoznam
- Zoznam (Radio) [L]
- Áno/Nie [Y]
- Dlhý text [T]
- Krátky text [S]
- Číselný vstup [N]
- Rovnica [*]
2. Otázka s podotázkami
- Viacnásobný krátky text [Q]
- Možnosť výberu viacerých možností [M]
- Pole [F]
- Otázky s definovanou odpoveďou Áno/Nie/Neviem [C]
- Pole (výber z 10 bodov) [B]
3. Otázky s 2 škálami
- Otázky s dvoma škálami [1]
4. Otázky so škálami X a Y
- Otázky s číselnou hodnotou z rozbaľovacieho poľa [:]
5. Základné typy otázok
- Zobrazenie textu [X]
V tomto jednoduchom príklade bude náš prehľad jednoduchým zoznamom s:
- Text otázky: odpoveď používateľa
Otázky s možnosťou výberu len 1 odpovede / jednoduché textové/číselné otázky
Pre všetky tieto typy otázok uloží LimeSurvey jednu odpoveď:
- Rozbaľovací zoznam
- Zoznam (Radio)
- Zoznam s komentárom
- 5 možností
- Áno/Nie
- Krátky text
- Dlhý text
- Rozsiahle textové pole
- Číselný vstup
- Rovnica
- Dátum
- Pohlavie
Ak predpokladáme, že kód otázky je q1, na text otázky a odpoveď sa môžeme odkázať takto:
- {q1.question}: {q1.shown}
Príklad:
- Koľko máte rokov?: 25
Ak chcete overiť, či bola daná otázka zodpovedaná, môžete výstup obaliť príkazom IF:
{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}
Toto sa „prekladá“ takto: AK otázka s kódom q1 nie je prázdna, vypíš „- “ A text otázky A „: “ A text odpovede (funkcia join() spája prvky do nového reťazca); INAK nevypíš nič ("" znamená prázdny reťazec).
Otázka s podotázkami
Pre všetky tieto typy otázok LimeSurvey používa podotázky:
- Viacnásobný krátky text
- Možnosť výberu viacerých možností
- Možnosť výberu viacerých možností s komentárom
- Pole
- Pole (výber z 5 bodov)
- Pole (výber z 10 bodov)
- Otázky s definovanou odpoveďou Áno/Nie/Neviem
- Otázky so škálou (Nárast/Bez zmeny/Pokles)
- Pole podľa stĺpcov
Ak predpokladáme, že kód otázky je q2 a podotázky sú očíslované SQ001, SQ002, (automatické číslovanie vykonáva LimeSurvey), na text otázky a odpoveď sa môžeme odkázať takto:
- {q2_SQ001.question}: {q2_SQ001.shown}
- {q2_SQ002.question}: {q2_SQ002.shown}
Pri otázkach s možnosťou výberu viacerých odpovedí dáva zmysel nezobrazovať text zaškrtnutej podotázky, ale zobraziť Y pre každú vybranú možnosť:
- {q2_SQ001.question}: {q2_SQ001}
- {q2_SQ002.question}: {q2_SQ002}
...
Upozorňujeme, že momentálne nie je možné vypísať text otázky pri otázkach s podotázkami, pozrite si túto požiadavku na novú funkciu.
Príklad 1 (za predpokladu, že typ otázky je Možnosť výberu viacerých možností)
- Poznáte tieto automobilové značky?
-- Mercedes: Y
-- Audi: N
-- Volvo: Y
Ak chcete zobraziť iba označené položky, môžete výstup obaliť príkazom IF a skontrolovať hodnotu začiarkavacieho políčka:
{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }
Ak chcete zobraziť zoznam iba vybraných položiek, použite funkciu listifop, napr.: Mercedes, Volvo
{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }
Kde that.q2 zahŕňa všetky podotázky otázky q2. Viac informácií nájdete v časti self, this a that.
Príklad 2 (za predpokladu, že typ otázky je Pole (výber z 10 bodov))
- Ohodnoťte kvalitu nižšie uvedených automobilových značiek na škále od 1 = veľmi zlá po 10 = veľmi dobrá.
-- Mercedes: 7
-- Audi: 9
-- Volvo: 9
Ak chcete zobraziť iba ohodnotené položky, môžete výstup obaliť príkazom IF a pomocou nasledujúceho výrazu skontrolovať, či bola aktuálna podotázka zodpovedaná:
{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }
Funkciu listifop použite, ak chcete napríklad zobraziť zoznam iba vybraných položiek s hodnotou väčšou než osem, napr.: Audi / Volvo
{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }
Otázka s dvoma škálami
Predpokladajme, že sa používajú nasledujúce kódy:
- Kód otázky: q4
- Kódy podotázok: SQ001, SQ002, ...
- Kódy odpovedí škála 1: A1, A2, ...
- Kódy odpovedí škála 2: B1, B2, ...
Príklad odkazu na odpoveď tretej podotázky a druhej škály: q4_SQ003_1 - otázka 4, podotázka 3, druhá škála.
Zobrazme výsledky pre obe škály a prvé dve podotázky:
- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}
- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}
Ak chcete zobraziť text podotázky, musíte do zástupného symbolu pridať ID škály (hoci texty sú pre obe škály rovnaké). Namiesto {q4_SQ001.question} teda musíme použiť {q4_SQ001_0.question} alebo {q4_SQ001_1.question}.
Ak chcete exportovať/zobraziť iba výsledky podotázok s aspoň jednou odpoveďou, použite pre každú podotázku túto syntax:
{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}
Otázka so stupnicami X a Y
Platí pre všetky maticové otázky, ktoré umožňujú odpoveď v každej bunke (nielen v každom riadku, ako bolo uvedené vyššie):
- Pole textov
- Pole čísel
Predpokladané použité kódy:
- Kód otázky: q5
- Kódy podotázok: SQ001, SQ002, ...
- Kódy odpovedí: A1, A2, ...
Ak chcete odkazovať na výsledok určitej podotázky z určitého stĺpca, musíte použiť QuestionCode . '_' . SubQuestionCode . '_' . AnswerCode. Príklad odkazu na odpoveď tretej podotázky a druhého stĺpca: q5_SQ003_A2.
Vypíšme výsledky pre stĺpce 1 – 3 prvých dvoch podotázok:
- {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}
Keďže pri týchto typoch otázok každá bunka (kombinácia osi X a osi Y) zodpovedá jednej možnosti odpovede, kontrolu existujúcich údajov je potrebné urobiť pre každú bunku. Príklad:
{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}
Skrytie otázky, ak je odpoveď na predchádzajúcu otázku prázdna
| Účel | Skryť otázku, ak je odpoveď na predchádzajúcu otázku prázdna |
| Typ | Relevantnosť otázky |
| Príklad | Otázka jedna: kód otázky "name", text otázky "Ako sa voláte?" Otázka dva: text otázky "{name}, koľko máte rokov?" Úloha: Skryť otázku dva, ak je textové pole otázky jedna prázdne |
| Výraz | !is_empty(name) |
| Popis | is_empty() zisťuje, či sa premenná považuje za prázdnu. Znak "!" neguje výsledok. Ak teda premenná nie je prázdna, výraz bude pravdivý a otázka sa zobrazí |
| Postup | Vytvorte/upravte otázku dva Do poľa "Rovnica relevantnosti" vložte "!is_empty(name)" |
| Vzorový súbor | Hide_question_if_empty_question_group.zip |
![]()
| |
Skrytie skupiny otázok, ak je odpoveď na predchádzajúcu otázku Áno alebo Nie
| Účel | Skryť skupinu otázok, ak je odpoveď na predchádzajúcu otázku Áno alebo Nie |
| Typ | Relevantnosť skupiny otázok |
| Príklad | Strana jedna, skupina otázok jedna, otázka jedna: kód otázky "PET", text otázky "Máte domáce zviera?" -Áno -Nie Strana dva, skupina otázok dva: Názov "O vašich domácich zvieratách" Úloha: Zobraziť/skryť skupinu otázok dva podľa toho, či je odpoveď na otázku jedna Áno/Nie |
| Výraz | PET == "Y" |
| Popis | PET je kód otázky, ktorej odpoveď chcete skontrolovať. Ak nepoužijete príponu, EM použije "Qcode.code". Porovnávate teda kód odpovede otázky PET s hodnotou "Y". Ak respondent odpovie "Áno", výraz bude pravdivý a skupina otázok "O vašich domácich zvieratách" sa zobrazí. |
| Postup | Vytvorte/upravte skupinu otázok dva Do poľa "Rovnica relevantnosti" vložte "PET == "Y"" |
| Vzorový súbor | Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip |
![]()
| |
Zobrazenie hodnoty poľa otázky s viacerými vstupmi odpovede
| Účel | Zobraziť hodnotu poľa otázky s viacerými vstupmi odpovede |
| Typ | Odkaz |
| Príklad | Otázka jedna: kód otázky "AskChildAge", text otázky "Koľko rokov majú vaše deti?". Kódy podotázok -Child1 -Child2 -Child3 - ChildXXX Otázka dva: kód otázky "ReportChildAge", text otázky "O vašom prvom dieťati: - CHILD1 má AGE1 rokov." |
| Výraz | {AskChildAge_Child1.question}, {AskChildAge_Child1.value} |
| Popis | Chcete použiť hodnotu podotázky v nasledujúcej otázke. K hodnote podotázky získate prístup týmto typom výrazu: QcodeQuestion_QcodeSubquestion.value |
| Postup | Vytvorte/upravte druhú otázku Do popisu vložte tento text: "O vašom prvom dieťati: - {AskChildAge_Child1.question} má {AskChildAge_Child1.value} rokov." |
| Vzorový súbor | Display_value_of_a_multiple_answer_input_question_field.zip |
| |
Overenie počtu začiarknutých políčok v riadku pri otázke "Pole (čísla) so začiarkavacími políčkami"
| Účel | Overiť počet začiarknutých políčok v riadku |
| Typ | Validácia |
| Príklad | Otázka typu "Pole čísel (rozloženie so začiarkavacími políčkami)" |
| Výraz | sum(...) |
| Popis | (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) zisťuje, či je v riadku A začiarknutých najviac X políčok. Ak chcete skontrolovať všetky tri riadky (A, B, C), môžete výraz spojiť pomocou "&&": (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) |
| Postup | Vytvorte/upravte otázku typu "Pole čísel (rozloženie so začiarkavacími políčkami)". Vložte vyššie uvedený výraz do poľa "Rovnica na overenie otázky" v rozšírených nastaveniach otázky (možno budete musieť upraviť názvy premenných!). |
| Vzorový súbor | Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss |
![]()
| |
Výpočet rozdielu medzi dvoma dátumami
| Účel | Vypočítať rozdiel medzi dvoma dátumami |
| Typ | Relevantnosť / typ otázky Rovnica / Validácia |
| Príklad | Otázka jedna (dátum/čas, kód: DOB): Aký je váš dátum narodenia? Otázka dva (dátum/čas, kód: datetoday): Aký je dnes dátum? Otázka tri (boilerplate): Máte XXXX dní. Úloha: Vypočítať a zobraziť počet dní medzi dátumom zadaným v otázke 1 a v otázke 2. |
| Výraz | {(strtotime(datetoday)-strtotime(DOB))/60/60/24} |
| Popis | strtotime vypočíta počet sekúnd medzi 1. januárom 1970 a zadaným dátumom. Vyššie uvedený výraz vypočíta počet sekúnd medzi dvoma zadanými dátumami. Člen "/60/60/24" jednoducho prevedie počet sekúnd na počet dní. Namiesto zisťovania "datetoday" môžete použiť aj strtotime('now') alebo jednoducho time(), ktorá priamo vráti počet sekúnd od januára 1970 do súčasnosti (t. j. do času vypĺňania prieskumu). Vek osoby v rokoch tak môžete rýchlo zistiť pomocou rovnice {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} V každom z týchto prípadov je dôležité, aby bol dátum zadaný v správnom formáte, inak funkcia strtotime() nebude fungovať správne. |
| Postup | Vytvorte dve otázky s dátumom (pre dátum narodenia a pre dnešný dátum) a jednu boilerplate otázku. Do textu otázky boilerplate otázky vložte: "Dňa {datetoday} ste mali {(strtotime(today)-strtotime(dob))/60/60/24} dní." Upozornenie: Funkcia strtotime dokáže pracovať s MNOHÝMI, ale nie so všetkými formátmi dátumu. Ak narazíte na problémy, nastavte formát dátumu v prieskume na mm/dd/yyyy alebo yyyy-mm-dd alebo dd.mm.yyyy" |
| Vzorový súbor | Date_difference.zip |
| |
Použitie ExpressionScript pre hodnotenia
Tu je ďalší príklad použitia ExpressionScript s otázkami typu pole a hodnoteniami:</ br>
Povedzme, že máte 2 otázky typu pole a chcete uložiť výsledky výpočtu do databázy. Je to vlastne jednoduché: vytvorte a otestujte svoje polia a odošlite testovaciu odpoveď, aby ste zistili, či to funguje a či sa výsledky zobrazia na stránke dokončenia.
Podrobnosti implementácie:
- pridajte otázku typu rovnica
- pridajte nasledujúci riadok za predpokladu, že Q1 je kód vašej otázky typu pole a Q2 je kód druhej:
{sum(Q1_SQ001.value,Q2_SQ001.value)}
Upozorňujeme, že SQ001 je predvolený kód každej podotázky. Ak zmeníte kód podotázky, upravte vyššie uvedenú rovnicu zodpovedajúcim spôsobom.
Použitie em_validation_q v poli
Pomocou rovnice na overenie otázky môžete ovládať pole podľa ľubovoľnej podmienky.
Podrobnosti implementácie:
- pre prvé pole: pole s jednou voľbou
- Kód otázky je ARRAY
- Kódy podotázok sú SQ01,SQ02,SQ03 a SQ04
- upravte rovnicu na overenie celej otázky a zadajte
!is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03)
- pre druhé pole: pole textov
- Kód otázky je ARRAYTEXT
- Kódy podotázok na osi Y sú SY01,SY02,SY03 a SY04
- Upravte rovnicu na overenie celej otázky a zadajte
count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)








