x

Hlavní kapitoly

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Rychlý průvodce - LimeSurvey 3.0+
  3. Instalace - LimeSurvey CE
  4. Jak vytvořit dobrý průzkum (návod)
  5. Začínáme
  6. Správa LimeSurvey
  7. Průzkumy - úvod
  8. Nastavení průzkumu
  9. Menu průzkumu
  10. Struktura průzkumu
  11. Otázky - úvod
  12. Skupiny otázek - úvod
  13. Průzkumy - správa
  14. Možnosti panelu nástrojů průzkumu
  15. Vícejazyčný průzkum
  16. ExpressionScript Engine - Rychlý průvodce
  17. Nezařazené a pokročilé funkce
  18. Obecné FAQ
  19. Řešení potíží
  20. Řešení a obejití problémů
  21. Licence
  22. Záznam změn verzí
  23. Zásuvné moduly
 Actions

Příklady ExpressionScript

From LimeSurvey Manual

Tato stránka mohla být přeložena strojově a může obsahovat chyby. Zobrazit anglický originál · Vylepšit tento překlad
This page is a translated version of the page ExpressionScript examples and the translation is 100% complete.
Pomozte nám rozšířit tento článek přidáním vlastních příkladů. Pomůžete tak ostatním začít používat Expression Script.


Struktura

První část článku popisuje, k čemu lze výrazy použít a kde je najdete či přidáte. Druhá část obsahuje příklady, jak výrazy používat.


Kategorie výrazů

LimeSurvey používá výrazy k následujícím účelům:


Relevance

Účel: skrytí skupin otázek/otázek

Relevance určuje, zda se skupina otázek nebo otázka zobrazí, nebo skryje. Pokud je výsledkem výrazu „true“ (tj. 1), prvek se zobrazí. Jinak (pokud je výsledkem výrazu „false“, tj. 0) bude prvek skryt.

Typ Zobrazí/skryje Kde najít Snímek obrazovky
Relevance skupiny otázek skupina otázek Vytvořit/Upravit skupinu otázek -> "Rovnice relevance:"
Relevance otázky otázka Vytvořit/Upravit otázku -> "Rovnice relevance:"
Relevance dílčí otázky dílčí otázka Editace dílčích otázek -> "Rovnice relevance:"


Ověření

Účel: ověření vstupu/akcí u otázek/dílčích otázek/odpovědí

Ověření určuje, zda je vstup respondenta do otázky nebo akce platný, či nikoli. Pokud je výsledkem výrazu „true“ (tj. 1), použije se na prvek a zprávu o ověření třída „good“. Jinak, pokud je výsledkem výrazu „false“ (tj. 0), použije se na prvek a zprávu o ověření třída „error“. Styl pro tyto třídy můžete definovat v souboru template.css.

Typ Ověřuje Kde najít Snímek obrazovky
Ověření otázky otázka Vytvořit/Upravit otázku -> "Karta Logika" -> "Rovnice k ověření otázky"
Ověření dílčí otázky dílčí otázky Vytvořit/Upravit otázku -> "Karta Logika" -> "Validační rovnice podotázky" ‎

Textový výstup

Účely: (provést nějakou akci a) vypsat text

Výraz lze použít k vypsání textu. Můžete například něco otestovat nebo vypočítat a podle výsledku testu či výpočtu určit výstup. Lze jej také použít k vložení textu otázky, odpovědí, typů otázek atd. u otázky použité před daným výrazem. Textový výstup lze použít všude, kde se zobrazuje text, a může vracet jakékoli výsledky.

Případ užití Popis
Mikro přizpůsobení Úprava textu, např. napsání „pan“ nebo „paní“ podle dříve položené otázky na pohlaví
Výpočet Výpočet hodnoty a její vypsání, např. „Příjem vaší rodiny je xxx“
Odkaz Vložení textu z prvku, např. „Jmenujete se xxx. Kolik je vám let?“


Ukládání odpovědí

Účely: (provést nějakou akci,) (vypsat text) a uložit něco do databáze

Typ otázky Rovnice lze použít k uložení hodnoty do databáze. Pomocí výrazu můžete něco provést, zobrazit otázku typu Rovnice (podobnou zobrazení textu) a výsledek výrazu uložit do databáze. Odpověď se uloží do tabulky odpovědí. Výsledek pak lze použít ve statistikách nebo jej exportovat do některého z formátů, které nabízí funkce exportu LimeSurvey.

Příklady výrazů

Vložení odpovědi z předchozí otázky

Účel Vložení odpovědi z předchozí otázky
Typ Odkaz
Příklad Otázka jedna (kód otázky "Q00"): V jakém městě bydlíte?
Otázka dvě (kód otázky "Q01"): Jak dlouho bydlíte ve městě MĚSTO?
Úkol: Místo slova „MĚSTO“ v druhé otázce se má použít odpověď z první otázky.
Výraz {QOO}
Popis Odpověď zadaná v Q00 nahradí pole Q00 v druhé otázce
Postup Vytvořte/Upravte otázku dvě
Do pole textu otázky vložte "Jak dlouho bydlíte ve městě {QOO} (let)?"

Použití skryté otázky typu Rovnice k automatickému vyplnění odpovědi

Problém: Představte si, že máte dvě otázky Q1 a Q2. Q1 se ptá respondentů na jejich věk. Q2 rozděluje respondenty do tří skupin: věk je nižší než 20 let, věk je 20, věk je vyšší než 20. Q2 by tedy měla používat hodnoty „1“, „2“, „3“, které odpovídají výše uvedeným podmínkám. Nesmíme také zapomenout Q2 skrýt (otázka se v průzkumu nezobrazí, ale hodnoty se do tabulky odpovědí uloží „na pozadí“).

Vyplnění databáze pomocí typu otázky Rovnice:

  • Nejprve vytvořte otázku s kódem Q1 jako otázku typu Číselný vstup.
  • Poté vytvořte další otázku s kódem Q2 jako otázku typu Rovnice.
  • Na kartě „Nastavení zobrazení“ otázky Q2:
    • nastavte pole „Vždy skryje tuto otázku“ na „Zapnuto“
    • do pole „Rovnice“ zadejte výraz:
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}

Vytvoření souhrnné stránky pomocí zástupných symbolů

Tento návod ukazuje, jak na konci průzkumu vytvořit přehled všech otázek a odpovědí pomocí zástupných symbolů ExpressionScript. Ukazuje také, jak takový přehled omezit pouze na zodpovězené otázky.

Náš příklad si můžete stáhnout zde: Příklad průzkumu se zástupnými znaky.


Zde použité typy otázek:

1. Otázky s výběrem jedné možnosti / jednoduché textové či číselné otázky

  • Rozbalovací seznam
  • Přepínačový seznam [L]
  • Ano/Ne [Y]
  • Dlouhý text [T]
  • Krátký text [S]
  • Číselný vstup [N]
  • Rovnice [*]


2. Otázky s dílčími otázkami

  • Vícenásobné krátké texty [Q]
  • Vícenásobné možnosti [M]
  • Pole [F]
  • Pole (Ano/Ne/Nevím) [C]
  • Pole (výběr z 10 možností) [B]


3. Otázky se 2 škálami

  • Pole s dvojí škálou [1]


4. Otázky se škálami X a Y

  • Pole (Čísla) [:]


5. Speciální otázky

  • Zobrazení textu [X]


V tomto jednoduchém příkladu bude náš přehled tvořit jednoduchý seznam:

- Text otázky: odpověď uživatele


Otázky s výběrem jedné možnosti / jednoduché textové či číselné otázky

U všech těchto typů otázek uloží LimeSurvey jednu odpověď:

  • Rozbalovací seznam
  • Přepínačový seznam
  • Seznam s komentářem
  • Výběr z 5 možností
  • Ano/Ne
  • Krátký text
  • Dlouhý text
  • Textové pole (rozsáhlé)
  • Číselný vstup
  • Rovnice
  • Datum
  • Pohlaví

Pokud je kód otázky q1, můžeme na text otázky a odpověď odkazovat takto:

- {q1.question}: {q1.shown}

Příklad:

- Kolik je vám let?: 25


Pokud chcete zkontrolovat, zda byla otázka zodpovězena, můžete výstup obalit příkazem IF:

{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}

To se „přeloží“ takto: POKUD otázka s kódem q1 není prázdná, vypiš „- “ A text otázky A „: “ A text odpovědi (funkce join() spojí prvky do nového řetězce); JINAK nevypisuj nic ("" znamená prázdný řetězec).

Otázky s dílčími otázkami

U všech těchto typů otázek LimeSurvey používá dílčí otázky:

  • Vícenásobné krátké texty
  • Vícenásobné možnosti
  • Vícenásobné možnosti s komentáři
  • Pole
  • Pole (výběr z 5 možností)
  • Pole (výběr z 10 možností)
  • Pole (Ano/Ne/Nevím)
  • Pole (zvýšení, stejné, pokles)
  • Pole po sloupcích

Pokud je kód otázky q2 a dílčí otázky jsou očíslovány SQ001, SQ002 (automatické číslování provádí LimeSurvey), můžeme na text otázky a odpověď odkazovat takto:

- {q2_SQ001.question}: {q2_SQ001.shown}

- {q2_SQ002.question}: {q2_SQ002.shown}

U otázek typu Vícenásobné možnosti dává smysl nezobrazovat text zaškrtnuté dílčí otázky, ale zobrazit Y pro každou vybranou možnost:

- {q2_SQ001.question}: {q2_SQ001}

- {q2_SQ002.question}: {q2_SQ002}

...

Upozorňujeme, že v současné době není možné vypsat text otázek s dílčími otázkami, viz tento požadavek na novou funkci.


Příklad 1 (za předpokladu, že typ otázky je vícenásobné možnosti)

- Znáte tyto automobilové značky?

-- Mercedes: Y

-- Audi: N

-- Volvo: Y


Pokud chcete vypsat pouze zaškrtnuté položky, můžete kolem výstupu použít příkaz IF a zkontrolovat hodnotu zaškrtávacího pole:

{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }


Pokud chcete vypsat seznam pouze vybraných položek, použijte funkci listifop, např.: Mercedes, Volvo

{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }


Kde  that.q2  se rozbalí na všechny dílčí otázky otázky q2. Další podrobnosti naleznete v části self, this a that.


Příklad 2 (za předpokladu, že typ otázky je Pole (výběr z 10 možností))

- Ohodnoťte prosím kvalitu níže uvedených automobilových značek na škále od 1 = velmi špatná do 10 = velmi dobrá.

-- Mercedes: 7

-- Audi: 9

-- Volvo: 9


Pokud chcete vypsat pouze ohodnocené položky, můžete kolem výstupu použít příkaz IF a pomocí následujícího výrazu zkontrolovat, zda byla aktuální dílčí otázka zodpovězena:

{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }


Pokud chcete například vypsat seznam pouze vybraných položek s hodnotou větší než osm, použijte funkci listifop, např.: Audi / Volvo

{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }


Otázka se dvěma škálami

Platí pouze pro typ otázky s duální škálou.


Předpokládejme, že se používají následující kódy:

  • Kód otázky: q4
  • Kódy dílčích otázek: SQ001, SQ002, ...
  • Kódy odpovědí škály 1: A1, A2, ...
  • Kódy odpovědí škály 2: B1, B2, ...


Chcete-li odkazovat na výsledek určité dílčí otázky na určité škále, musíte použít QuestionCode . '_' . SubQuestionCode . '_' . ScaleID. Upozornění: „ScaleID“ je 0 pro první škálu a 1 pro druhou!
Příklad odkazu na odpověď třetí dílčí otázky a druhé škály: q4_SQ003_1 – otázka 4, dílčí otázka 3, druhá škála.


Vypišme výsledky pro obě škály a první dvě dílčí otá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}

Chcete-li vypsat text dílčí otázky, musíte k zástupnému symbolu přidat ID škály (i když jsou texty pro obě škály stejné). Místo {q4_SQ001.question} tedy musíme použít {q4_SQ001_0.question} nebo {q4_SQ001_1.question}.

Pokud chcete exportovat/zobrazit výsledky pouze těch dílčích otázek, které mají alespoň jednu odpověď, použijte pro každou dílčí otázku tuto syntaxi:

{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}

Otázka s měřítky X a Y

Platí pro všechny maticové otázky, které umožňují odpověď v každé buňce (nejen v každém řádku, jak bylo uvedeno dříve):

  • Pole (Texty)
  • Pole (Čísla)


Předpokládané použité kódy:

  • Kód otázky: q5
  • Kódy dílčích otázek: SQ001, SQ002, ...
  • Kódy odpovědí: A1, A2, ...

Chcete-li odkázat na výsledek určité dílčí otázky z určitého sloupce, musíte použít KódOtázky . '_' . KódDílčíOtázky . '_' . KódOdpovědi. Příklad odkazu na odpověď třetí dílčí otázky a druhého sloupce: q5_SQ003_A2.

Vypišme výsledky pro sloupce 1–3 prvních dvou dílčích otázek:

- {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}


Protože u těchto typů otázek každá buňka (kombinace osy X a osy Y) odpovídá jedné možnosti odpovědi, je nutné pro každou buňku provést test existence dat. Příklad:

{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}


Chcete-li vypsat text dílčí otázky, musíte do zástupného symbolu přidat kód odpovědi (i když jsou texty pro všechny možnosti odpovědi stejné). Místo {q5_SQ001.question} tedy musíme použít {q5_SQ001_A1.question} nebo {q5_SQ001_A2.question}.

Skrytí otázky, pokud je odpověď na předchozí otázku prázdná

Účel Skrýt otázku, pokud je odpověď na předchozí otázku prázdná
Typ Relevance otázky
Příklad Otázka jedna: kód otázky "name", text otázky "Jak se jmenujete?"
Otázka dvě: text otázky "{name}, kolik je vám let?"
Úkol: Skrýt otázku dvě, pokud je textové pole otázky jedna prázdné
Výraz !is_empty(name)
Popis is_empty() určuje, zda je proměnná považována za prázdnou. Znak "!" výsledek neguje. Pokud tedy proměnná není prázdná, výraz bude pravdivý a otázka se zobrazí
Postup Vytvořte/upravte otázku dvě
Do pole "Rovnice relevance" vložte "!is_empty(name)"
Ukázkový soubor Hide_question_if_empty_question_group.zip


Skrytí skupiny otázek, pokud je odpověď na předchozí otázku Ano nebo Ne

Účel Skrýt skupinu otázek, pokud je odpověď na předchozí otázku Ano nebo Ne
Typ Relevance skupiny otázek
Příklad Stránka jedna, skupina otázek jedna, otázka jedna: kód otázky "PET", text otázky "Máte domácí zvíře?" -Ano -Ne
Stránka dvě, skupina otázek dvě: název "O vašich domácích zvířatech"
Úkol: Zobrazit/skrýt skupinu otázek dvě podle toho, zda je odpověď na otázku jedna Ano/Ne
Výraz PET == "Y"
Popis PET je kód otázky, jejíž odpověď chcete zkontrolovat. Pokud nepoužijete suffix, EM použije "Qcode.code". Porovnáváte tedy kód odpovědi otázky PET s hodnotou "Y". Pokud respondent odpoví "Ano", výraz je pravdivý a skupina otázek "O vašich domácích zvířatech" se zobrazí.
Postup Vytvořte/upravte skupinu otázek dvě
Do pole "Rovnice relevance" vložte "PET == "Y""
Ukázkový soubor Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip


Zobrazení hodnoty pole otázky s více vstupy odpovědí

Účel Zobrazit hodnotu pole otázky s více vstupy odpovědí
Typ Odkaz
Příklad Otázka jedna: kód otázky "AskChildAge", text otázky "Kolik let je vašim dětem?". Kódy dílčích otázek -Child1 -Child2 -Child3 - ChildXXX
Otázka dvě: kód otázky "ReportChildAge", text otázky "O vašem prvním dítěti: - CHILD1 je AGE1."
Výraz {AskChildAge_Child1.question}, {AskChildAge_Child1.value}
Popis Chcete použít hodnotu dílčí otázky v následující otázce. K hodnotě dílčí otázky můžete přistupovat pomocí výrazu tohoto typu: KódOtázky_KódDílčíOtázky.value
Postup Vytvořte/upravte druhou otázku
Do popisu vložte tento text: "O vašem prvním dítěti: - {AskChildAge_Child1.question} je {AskChildAge_Child1.value}."
Ukázkový soubor Display_value_of_a_multiple_answer_input_question_field.zip

Ověření počtu zaškrtnutých polí na řádek u otázky "Pole (Čísla) Checkbox"

Účel Ověřit počet zaškrtnutých polí na řádek
Typ Ověření
Příklad Otázka typu "Pole (Čísla) (Rozvržení checkboxu)"
Výraz sum(...)
Popis (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) určuje, zda je v řádku A zaškrtnuto alespoň X zaškrtávacích polí.
Pokud chcete zkontrolovat všechny tři řádky (A, B, C), můžete výrazy spojit pomocí "&&":
(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 Vytvořte/upravte otázku typu "Pole (Čísla) (Rozvržení checkboxu)".
Výše uvedený výraz vložte do pole "Rovnice k ověření otázky" v pokročilém nastavení otázky (možná bude nutné upravit názvy proměnných!).
Ukázkový soubor Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss

Výpočet rozdílu mezi dvěma daty

Účel Vypočítat rozdíl mezi dvěma daty
Typ Relevance / Typ otázky Rovnice / Ověření
Příklad Otázka jedna (datum/čas, kód: DOB): Jaké je vaše datum narození?
Otázka dvě (datum/čas, kód: datetoday): Jaké je dnes datum?
Otázka tři (boilerplate): Je vám XXXX dní.
Úkol: Vypočítat a zobrazit počet dní mezi datem zadaným v otázce 1 a otázce 2.
Výraz {(strtotime(datetoday)-strtotime(DOB))/60/60/24}
Popis strtotime vypočítá počet sekund mezi 1. lednem 1970 a zadaným datem. Výše uvedený výraz vypočítá počet sekund mezi dvěma zadanými daty. Člen "/60/60/24" pouze převede počet sekund na počet dní.
Místo dotazu na "datetoday" můžete také použít strtotime('now') nebo jednoduše time(), což přímo vrací počet sekund od ledna 1970 do současnosti (tj. do okamžiku vyplnění průzkumu). Tak můžete rychle zjistit věk osoby v letech pomocí rovnice {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} V každém z těchto případů je zásadní, aby bylo datum zadáno ve správném formátu, jinak funkce strtotime() nebude fungovat správně.
Postup Vytvořte dvě otázky typu datum (pro datum narození a pro dnešní datum) a jednu boilerplate otázku.
Do textu otázky boilerplate vložte: "Dne {datetoday} vám bylo {(strtotime(today)-strtotime(dob))/60/60/24} dní."

Upozornění: Funkce strtotime si poradí s MNOHA, ale ne se všemi formáty data. Pokud narazíte na problémy, nastavte ve svém průzkumu Formát data na mm/dd/yyyy, yyyy-mm-dd nebo dd.mm.yyyy"
Ukázkový soubor Date_difference.zip

Použití ExpressionScript pro hodnocení

Zde je další příklad použití ExpressionScript s otázkami typu Pole a hodnocením:</ br>

Řekněme, že máte 2 otázky typu pole a chcete uložit výsledky výpočtu do databáze. Je to vlastně jednoduché: vytvořte a otestujte svá pole a odešlete zkušební odpověď, abyste zjistili, zda vše funguje a zda se výsledky zobrazí na stránce po dokončení.


Podrobnosti implementace:

  • přidejte otázku typu rovnice
  • přidejte následující řádek za předpokladu, že Q1 je kód vaší první otázky typu pole a Q2 kód druhé:
    • {sum(Q1_SQ001.value,Q2_SQ001.value)}

Upozorňujeme, že SQ001 je výchozí kód každé dílčí otázky. Pokud kód dílčí otázky změníte, odpovídajícím způsobem upravte výše uvedenou rovnici.


Použití em_validation_q v poli

Pomocí rovnice k ověření otázky můžete řídit pole podle libovolné podmínky.


Podrobnosti implementace:

  • pro první pole: pole s jednou volbou
    • Kód otázky je ARRAY
    • Kódy dílčích otázek jsou SQ01, SQ02, SQ03 a SQ04
    • upravte Rovnici k ověření celé otázky a vložte
      !is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03) 
  • pro druhé pole: pole s textem
    • Kód otázky je ARRAYTEXT
    • Kódy dílčích otázek na ose Y jsou SY01, SY02, SY03 a SY04
    • Upravte Rovnici k ověření celé otázky a vložte
      count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)