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

ExpressionScript – prezentace

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 - Presentation and the translation is 100% complete.


Úvod

LimeSurvey používá Expression Script (skript výrazů), díky kterému LimeSurvey podporuje složitější větvení, hodnocení, ověření a přizpůsobení obsahu. Nahrazuje způsob, jakým LimeSurvey na pozadí spravuje nahrazování, podmínky a hodnocení. Také výrazně urychluje zpracování, protože odstraňuje většinu čtení z databáze za běhu. Expression Script vyvinul Dr. Thomas White (TMSWhite).


Klíčové definice

  1. Výraz: Cokoli uzavřené ve složených závorkách:
    • Za předpokladu, že bezprostředně za levou složenou závorkou ani před pravou složenou závorkou není žádná mezera.
    • Obsah výrazu vyhodnocuje EM, takže může obsahovat matematické vzorce, funkce a složité zpracování řetězců a dat.
  2. Přizpůsobení (tailoring): Někdy se nazývá „piping“. Jde o proces podmíněné úpravy textu:
    • Máte přístup ke všem „nahrazovacím polím“, údajům o respondentech a datům odpovědí.
    • Také máte snazší přístup k otázkám, odpovědím a jejich vlastnostem.
  3. Rovnice relevance: Nový atribut otázky, který řídí viditelnost otázky:
    • Pokud existuje rovnice relevance, otázka se zobrazí, pouze pokud se relevance vyhodnotí jako pravda.
    • Interně se všechny příkazy array_filter a array_filter_exclude mění na relevanci na úrovni dílčích otázek.
  4. SGQA (jak se proměnné pojmenovávaly dříve):
    • Znamená Survey-Group-Question-Answer (průzkum-skupina-otázka-odpověď)
    • Názvy proměnných SGQA vypadají například takto: 123X5X382X971 a mohou mít přípony dílčích otázek.
    • Tyto názvy proměnných jsou specifické pro podkladové databázové kódy S/Q/G/A, takže je často nutné je měnit.
  5. Rovnice – typ otázky: Nový typ otázky, který ukládá výpočty nebo reporty do databáze:
    • Je podobný otázce typu Boilerplate, ale jeho obsah se ukládá do databáze, i když nastavíte „Vždy skryje tuto otázku“.
  6. Kód otázky: Toto je upřednostňovaný název proměnné pro EM:
    • Může to být popisný název označující účel otázky, což usnadňuje čtení složité logiky.
    • Platné kódy otázek by NEMĚLY začínat číslicí, takže pro číslování otázek pomocí kódu otázky jednoduše použijte „q1“, „q1a“ nebo „g1q2“.
    • Tento kód se stane názvem proměnné při exportu dat do SPSS nebo R. Pokud tedy provádíte statistickou analýzu, musíte vytvářet pouze jedinečné kódy otázek.


Musím používat Expression Script?

Stručná odpověď je „ne“. Silně to však závisí na složitosti průzkumu, který chcete vytvořit.

Například editor podmínek pokrývá některé základní výrazy, které lze použít u otázek vašeho průzkumu. Editor podmínek je však omezený. Proto se používá Expression Script – rozšiřuje možnosti přizpůsobení.


Mohu kombinovat podmínky a rovnice relevance?

Ano. U některých otázek můžete použít editor podmínek a u jiných rovnice relevance.

U jedné otázky nemůžete mít nastavené současně podmínky i výrazy! Jakmile je podmínka nastavena, nahradí jakýkoli výraz zapsaný v poli rovnice relevance. Pole rovnice relevance pak již také nelze ručně upravovat.

Existuje však způsob, jak v jedné otázce použít výrazy i podmínky. Jak bylo uvedeno výše, podmínka nahradí pole rovnice relevance. Poté si prohlédněte nově vytvořenou rovnici a zkopírujte ji do textového editoru. Nově vytvořenou podmínku smažte v editoru podmínek a poté upravte otázku tak, že výrazy založené na podmínce z textového souboru přidáte k ostatním výrazům, které chcete použít.


Jak si vybrat mezi podmínkami a relevancí?

Zde je seznam výhod a nevýhod jednotlivých způsobů:

Způsob Výhody Nevýhody
Podmínky 1. Pěkné grafické rozhraní pro vytváření jednoduchých podmínek.
2. Grafické rozhraní je dobře zdokumentované a podpůrný tým mu rozumí
1. Podporuje pouze jednoduchá porovnání a nezvládá dobře podmínky „A“ a „NEBO“.
2. Kaskádové podmínky fungují nespolehlivě
3. Pomalé – náročné na databázi – může zpomalit dlouhé průzkumy.
4. Byly hlášeny některé problémy s opětovným načítáním podmínek.
5. Grafické rozhraní se špatně škáluje, pokud jsou k dispozici desítky, stovky nebo tisíce otázek.
6. Převod papírových průzkumů může být pomalý, protože musí používat názvy SGQA.
7. Pro složité větvení často potřebujete programátora, který logiku napíše na míru.
Relevance 1. Podporuje velmi složitou logiku, včetně více než 80 funkcí a matematických/řetězcových operátorů.
2. Dokonalá podpora kaskádové logiky.
3. Rychlé – žádná další volání databáze, podpora průzkumů s více než 1000 otázkami.
4. Žádné problémy s opětovným načítáním logiky, protože nevyžaduje kódy SGQA.
5. Zvýraznění syntaxe se škáluje i na průzkumy s více než 1000 otázkami.
6. Snadné a rychlé použití pro skupiny, které chtějí převést stávající papírové průzkumy do elektronické podoby.
7. Snadno podporuje částečně strukturované rozhovory a epidemiologické průzkumy bez nutnosti programátora.
1. Žádné grafické rozhraní pro jednoduché podmínky – místo toho využívá zvýraznění syntaxe.


Poznámka:
  • Doporučujeme použít to, co lépe vyhovuje vašim potřebám.
  • Podrobnější vysvětlení funkcí EM najdete na následujícím odkazu.

Začínáme

Nejlepší způsob, jak začít s EM:

  • Nainstalujte nejnovější stabilní verzi z https://www.limesurvey.org/en/download.
  • Importujte a prozkoumejte některé ukázkové průzkumy.
  • Prozkoumejte případy použití a návody a příklady krok za krokem.
  • Prozkoumejte dokumentaci EM (tuto stránku)
    • Testy jednotek izolovaných výrazů (pokročilé)
      • ukazují příklady použití všech funkcí a operátorů EM a výsledky v PHP a JavaScriptu;
      • upozorňujeme, že několik funkcí generuje v PHP a JavaScriptu odlišné výsledky, takže vám tato stránka umožní naplánovat logiku EM odpovídajícím způsobem.

Terminologie

Tyto pojmy se běžně používají k popisu možností EM:

  • Větvení založené na relevanci – pokud je otázka relevantní, zobrazí se, jinak ne (např. je neviditelná a v databázi se označí jako NULL). Pole relevance najdete v panelu editoru otázky i v panelu editoru skupiny otázek. Druhé jmenované slouží k použití sady podmínek na celou skupinu bez nutnosti kopírovat stejnou podmínku do každé otázky a/nebo ke kombinaci podmíněné logiky na úrovni skupiny a otázky.
  • Přizpůsobení – Jakmile víte, které otázky se mají položit, přizpůsobení (někdy nazývané piping) určuje, jak se má otázka položit. Podporuje nejen jednoduché nahrazení (například {TOKEN:FIRSTNAME}), ale také časování sloves a skloňování podstatných jmen podle pohlaví nebo počtu vašich subjektů. Také umožňuje změnit zprávu, kterou zobrazíte respondentovi průzkumu, podle toho, zda (nebo jak) odpověděl na jiné otázky.
  • Rovnice – EM přidává nový typ otázky nazvaný Rovnice, který ukládá výsledek výrazu. Výsledky rovnic se vypočítají a zapíší do databáze, i když je na stránce skryjete. Používají se proto pro skryté výpočty skóre, navigaci založenou na složitých rovnicích, hodnocení a reporty, které budou vygenerovány a uloženy v databázi.


Relevance a kaskádová relevance

Každý typ otázky má nyní možnost relevance, která určuje, zda se otázka zobrazí, nebo ne. EM zpracovává každou rovnici relevance v pořadí, v jakém se objevují v průzkumu. Pokud je výraz pravdivý (nebo chybí – kvůli podpoře starších průzkumů), otázka se zobrazí. Pokud není relevantní, otázka bude skryta a hodnota v databázi bude nastavena na NULL. Pokud ve skupině nejsou žádné relevantní otázky, bude celá skupina přeskočena.

Pokud je navíc kterákoli proměnná ve výrazu nerelevantní, výraz se vždy vyhodnotí jako nepravda. Tím je umožněna kaskádová relevance, takže nemusíte psát velmi dlouhé rovnice relevance pro každou otázku.

Řekněme, že máte pět otázek Q1–Q5 a chcete zobrazit Q2, pouze pokud byla zodpovězena Q1, a Q3, pouze pokud byla zodpovězena Q2 atd. Rovnice relevance by mohly vypadat takto:

Kód otázky Relevance Otázka
Q1 1 Jak se jmenujete?
Q2 Q1 {Q1}, kolik je vám let?
Q3 Q2 Takže vám je {Q2} let. Jste ženatý/vdaná?
Q4 Q3 == "Y" {Q1}, jak dlouho jste ženatý/vdaná?
Q5 Q4 Kolik máte dětí, {Q1}?


Relevance na úrovni skupiny

ExpressionScript podporuje také relevanci na úrovni skupiny. Usnadňuje to implementaci smyček. Řekněme, že chcete shromáždit informace až o 10 entitách (například o produktech nebo osobách z domácnosti), přičemž nejprve zjistíte, kolik entit vyžaduje doplňující otázky (například dotazem, kolik lidí žije v domácnosti, nebo tím, že respondenti zaškrtnou, které produkty se jim z dlouhého seznamu líbí). Jakmile víte, kolik entit vyžaduje doplňující otázky, můžete pro každou z 10 skupin doplňujících otázek použít relevanci na úrovni skupiny jako {count >= 1}, {count >=2}, ... {count >= 10}. V rámci každé skupiny můžete mít podmíněnou logiku na úrovni otázek (např. doplňující otázky specifické pro pohlaví nebo věk každého subjektu). Rovnice relevance na úrovni otázky a skupiny se spojují operátorem AND, aby se určilo, co se má zobrazit.

Chcete-li si takový příklad vyzkoušet, importujte následující průzkum: Příklad sčítacího průzkumu.

Na následujícím snímku obrazovky je vidět, že skupina Person 1 se zobrazí (je relevantní), pokud respondent žije alespoň s jednou další osobou ve společné domácnosti:



Přizpůsobení/Piping

Cokoli ve složených závorkách se nyní považuje za výraz (s jednou výjimkou popsanou níže). Výrazy mají přístup ke všem LimeReplacementFields a proměnným (prostřednictvím několika aliasů), ke všem typickým operátorům rovnic (matematickým, logickým i porovnávacím) a k desítkám funkcí (které dokonce fungují dynamicky na straně klienta).

Pomocí těchto rovnic můžete například:

  1. Podmíněně zobrazovat respondentům přizpůsobené zprávy na základě předchozích odpovědí;
  2. Vytvářet hodnocení a zobrazovat jeho výsledky (nebo na jejich základě podmíněně větvit průzkum či zobrazovat zprávy), a to zcela bez použití samotného modulu hodnocení;
  3. Skloňovat podstatná jména a časovat slovesa v otázkách, odpovědích a reportech;
  4. Zobrazit souhrny odpovědí před stránkou „Zobrazit vaše odpovědi“ na konci průzkumu.


Rovnice

Existuje nový typ otázky nazvaný Rovnice. Představte si ji jako typ otázky Zobrazení textu s tím rozdílem, že hodnotu zobrazeného obsahu ukládá do databáze. Pokud tedy text otázky typu Rovnice obsahuje výpočet hodnocení, bude tato hodnota uložena v databázi v proměnné, kterou lze zobrazit ve veřejných nebo soukromých statistikách.


Syntaxe

Cokoli uvnitř složených závorek se nyní považuje za výraz (s jednou výjimkou: na začátku ani na konci nesmí být žádné mezery - to je nutné, aby se ExpressionScript nepokoušel zpracovávat vložený JavaScript).

Upozorňujeme, že výrazy mohou být napsány na více řádcích, pokud za otevírací složenou závorkou ani před zavírací složenou závorkou není žádná mezera. To je užitečné zejména u vnořených příkazů „if()“, například takto:

{if(is_empty(PFTotals),
 '',
 if(PFTotals >= -5 && PFTotals <= -4,
   'Very Soft',
   if(PFTotals >= -3 && PFTotals <= -2,
     'Soft',
     if(PFTotals == -1,
       'Somewhat Soft',
       if(PFTotals == 0,
         'Moderate',
         if(PFTotals == 1,
           'Somewhat Hard',
           if(PFTotals >= 2 && PFTotals <= 3,
             'Hard',
             if(PFTotals >= 4 && PFTotals <= 5,
               'Very Hard',
               ''
             )
           )
         )
       )
     )
   )
 )
)}

ExpressionScript podporuje následující syntaxi:

  • Všechny standardní matematické operátory (např. +,-,*,/,!);
  • Všechny standardní porovnávací operátory (např. <,<=,==,!=,>,>=, plus jejich ekvivalenty: lt, le, eq, ne, gt, ge);
  • Závorky (takže můžete seskupovat dílčí výrazy);
  • Podmíněné operátory (např. &&,| | a jejich ekvivalenty: and, or);
  • Řetězce v jednoduchých i dvojitých uvozovkách (do každého lze vnořit řetězec s druhým typem uvozovek);
  • Operátor čárky (takže můžete mít seznam výrazů a vrátit jen konečný výsledek);
  • Operátor přiřazení (=);
  • Předdefinované proměnné (pro odkazy na otázky, atributy otázek a odpovědi) - např. kódy SGQA;
  • Předdefinované funkce (již jich je více než 80 a další lze snadno přidat).


Operátory

Syntaxe EM se řídí běžnou prioritou operátorů:

Úroveň Operátor(y) Popis
1 () závorky pro seskupení nebo volání funkcí
2 ! - + unární operátory: negace (not), záporné znaménko, kladné znaménko
3 * / násobení, dělení
4 + - sčítání, odčítání
5 < <= > >= lt le gt ge relační porovnání
6 == != eq ne porovnání rovnosti
7 and logické AND
8 or logické OR
9 = operátor přiřazení
10 , operátor čárky
Pro zajištění konzistence mezi JavaScriptem a PHP operátor plus (+) provádí sčítání, pokud jsou oba operandy číselné, ale provádí zřetězení, pokud jsou obě části nečíselné řetězce. Pro zřetězení však doporučujeme používat funkci „join()“, protože tak je váš záměr jasnější. Zároveň se tím vyhnete neočekávaným výsledkům, pokud jste očekávali řetězce, ale získali jste čísla (nebo naopak).

Upozornění na nesoulad čísla a řetězce a na abecední/číselné porovnání

Když porovnáváte hodnoty pomocí relačních operátorů nebo operátorů rovnosti, dávejte pozor na nesoulad typů. Hodnotu zadanou uživatelem (nebo poskytnutou prostřednictvím kódu odpovědi) lze použít jako číslo, pokud je zjevně číslem. Pokud některou z hodnot uzavřete do ", provede se porovnání textu/řetězců. Chcete-li porovnávat jako čísla, nikdy číslo do " neuzavírejte.

Například Q0.NAOK > "50" platí, pokud je Q0.NAOK číselná otázka s hodnotou 9. Je to proto, že operátor > předpokládá abecední porovnání, nikoli číselné.

Abyste měli jistotu, že porovnáváte celočíselné hodnoty, můžete použít intval(Q0.NAOK) > 50. Pamatujte, že pokud Q0.NAOK není číslo (je prázdné nebo je řetězec), pak intval(Q0.NAOK) === 0. Pro porovnání řetězců ("A" < "B") použijte přímo strcmp: strcmp(Q0.NAOK,"B") nebo strcmp(Q0.NAOK,"A5").

Upozornění k používání operátoru přiřazení (=)

Operátorům přiřazení byste se měli vyhýbat, pokud to není nezbytně nutné, protože mohou způsobit neočekávané vedlejší účinky. Pokud například změníte hodnotu předchozí odpovědi, kaskádová relevance a logika ověření mezi touto otázkou a aktuální otázkou se znovu nevypočítají, takže můžete skončit s vnitřně nekonzistentními daty (např. otázky, které zůstanou zodpovězené, ale měly být nastaveny na NULL, nebo otázky, které jsou přeskočeny, ale měly být zodpovězeny). Obecně platí, že pokud chcete proměnné přiřadit hodnotu, měli byste vytvořit otázku typu Rovnice a pomocí výrazu nastavit její hodnotu. Přesto existují vzácné případy, kdy lidé tento operátor skutečně potřebují, proto jsme jej zpřístupnili.

Aby vás na tento operátor upozornil, je v rovnicích se zvýrazněním syntaxe zobrazen červeným písmem (abyste ho nezaměnili s „==“).



Použití operátoru přiřazení

Hlavní důvody, proč můžete chtít použít operátor přiřazení:

  • Potřebujete pomocí rovnice nastavit výchozí hodnotu u otázky, která výchozí hodnoty nepřijímá (například seznam s přepínači, kde vám uživatelské rozhraní umožňuje vybrat jednu z možností odpovědí, ale nedovoluje zadat rovnici). Buďte však opatrní, protože LimeSurvey nebude schopen ověřit, že vaše rovnice vytvoří jednu z povolených odpovědí pro danou otázku;
  • Potřebujete násilně změnit odpověď na předchozí otázku na základě pozdější odpovědi;
  • atd...


  Pozor : Přiřazení se provádí pouze v PHP. To znamená, že se hodnota neaktualizuje na stejné stránce, ale až když uživatel přejde na další stránku. Proto buďte opatrní, když je operátor přiřazení použit na stejné stránce spolu s jinými výrazy.



K tomuto účelu můžete použít celý systém Expression Manageru. Je však lepší použít Rovnici.

Některé příklady:

  • Nastavení odpovědi na otázku typu krátký text malými písmeny : {QCODE=strtolower(QCODE.NAOK)};
  • Nastavení výchozí hodnoty odpovědi u otázky typu pole na začátku průzkumu : {Q1_SQ1=(is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)};
  • Nastavení výchozí hodnoty odpovědi u otázky typu pole textů na začátku průzkumu : {Q1_SQY1_SQX1 = (is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)};
  • Nastavení odpovědi s podmínkou : {QCODE=if(YesNo="Y","A1","")}.

Zabezpečení XSS

Při zapnuté ochraně XSS nelze některé části systému Expression Manageru použít:

  • zahájení HTML značky v jednom výrazu a její ukončení v jiném výrazu;
  • použití složitého výrazu v adrese URL.


Upozorňujeme, že XSS je ve výchozím nastavení povoleno v každé instalaci LimeSurvey.


Příklady a náhradní řešení:

  • {if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")} nefunguje se zabezpečením XSS, zde můžete použít {if(1,"<strong>information</strong>","information")};
  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a>, zde můžete použít otázku typu rovnice, protože použití úplného kódu otázky je v pořádku: <a href="/script.php?value={EQUATION.NAOK}">next</a>.


Přístup k proměnným

ExpressionScript poskytuje přístup pouze pro čtení ke všem proměnným, které můžete potřebovat. Z důvodu zpětné kompatibility poskytuje přístup k následujícímu:

ExpressionScript navíc umožňuje odkazovat na proměnné pomocí kódu otázky (sloupec 'title' v tabulce otázek v databázi). Je to také označení proměnné, které se použije při exportu dat do SPSS, R nebo SAS. Pokud máte například otázky na jméno, věk a pohlaví, můžete tyto proměnné nazvat name, age a gender místo 12345X13X22, 12345X13X23 a 12345X13X24. Díky tomu jsou rovnice srozumitelnější a logiku může snáze ověřit kdokoli, navíc lze otázky libovolně přesouvat, aniž byste museli sledovat čísla skupin nebo otázek.

Důležité: Bezpečnější je odkazovat na proměnné, které se vyskytují na předchozích stránkách nebo v předchozích otázkách.

ExpressionScript dále umožňuje přístup k mnoha vlastnostem otázky:


Syntaxe Význam Příklad Výsledek příkladu
Qcode alias pro Qcode.code {implode(',',name,gender)} 'Tom','M'
Qcode.code vybraný kód odpovědi na otázku, pokud je relevantní (jinak prázdné), nebo textová hodnota, pokud nejde o kódovanou otázku {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK totéž jako Qcode - viz popis NAOK {gender.NAOK} 'M'
Qcode.value hodnota hodnocení otázky, pokud je relevantní (jinak prázdné), nebo textová hodnota, pokud nejde o kódovanou otázku {gender.value} '1'
Qcode.valueNAOK totéž jako Qcode.value - viz popis NAOK {gender.valueNAOK} '1'
Qcode.shown zobrazená hodnota otázky {implode(',',name.shown,gender.shown)} 'Tom','Male'
Qcode.question text otázky {gender.question} 'What is your gender?'
Qcode.mandatory zda je otázka povinná (Y/N) {gender.mandatory} 'N'
Qcode.qid interní číslo otázky (ne pořadové číslo) {gender.qid} 337
Qcode.type typ otázky {gender.type} 'G'
Qcode.jsName správný název otázky v JavaScriptu bez ohledu na to, zda je deklarována na této stránce či nikoli {gender.jsName} 'java1827X3X337'
Qcode.gid interní číslo skupiny (ne pořadové číslo) {gender.gid} 3
Qcode.qseq pořadové číslo otázky, počínaje 0 {gender.qseq} 5
Qcode.gseq pořadové číslo skupiny, počínaje 0 {gender.gseq} 1
Qcode.relevanceStatus zda je otázka aktuálně relevantní (0 nebo 1) {gender.relevanceStatus} 1
Qcode.relevance rovnice relevance na úrovni otázky {gender.relevance} '!is_empty(name)'
Qcode.grelevance rovnice relevance na úrovni skupiny {gender.grelevance} 'num_children >= 5'
Qcode.sgqa hodnota SGQA této otázky {gender.sgqa} '1827X3X337'


Problém s HTML editorem

Pokud používáte HTML editor, některé znaky se nahradí HTML entitami.

  • & za &amp;
  • < za &lt;
  • > za &gt;

Pokud používáte HTML editor, musíte použít:

  • and pro &
  • lt pro <
  • le pro <=
  • gt pro >
  • ge pro >=


Doporučujeme odstranit z výrazu veškeré HTML, které se v něm objevuje. Pokud používáte HTML editor LimeSurvey, klikněte na tlačítko „Zdroj“ (v levé horní části editoru) a smažte všechny znaky, které nesouvisejí s vaším výrazem (např.

,
a podobně).

Pojmenování proměnných Qcode

Zde jsou podrobnosti o tom, jak sestavit Qcode (a získat přístup k některým vlastnostem) podle typu otázky. Obecně se Qcode sestavuje takto:

 QuestionCode . '_' . SubQuestionID . '_' . ScaleId

Pro komentář a jiné jsou odpovídající kódy otázek QuestionCode_comment a QuestionCode_other.

Typ Popis Kód Dílčí otázky Možnosti odpovědí Škály Kód odpovědi Zobrazená odpověď Relevance
5 Výběr z 5 možností, přepínače Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Pole (výběr z 10 možností), přepínače Q2 L1-L6 1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Pole (výběr z 5 možností), přepínače Q3 1-5 1-5 {Q3_1} {Q3_1.shown} {Q3_1>=3}
1 Pole (flexibilní popisky), dvojitá škála Q4 sq1-sq5 0:a1-a3 1:b1-b3 {Q4_sq1_0} {Q4_sq1_1.shown} {Q4_sq1_1=='b2'}
H Pole (flexibilní) - formát sloupců Q5 1-5 s,m,t {Q5_1} {Q5_1.shown} {Q5_1=='s'}
F Pole (flexibilní) - formát řádků Q6 F1-F5 1-5 {Q6_F3} {Q6_F3.shown} {Q6_F3==4}
E Pole (zvýšení, stejné, pokles), přepínače Q7 1-7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Pole (více flexibilních) 1 až 10 Q8 ls1,todo,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Pole (více flexibilních) text Q9 hp,st,sw 1st,2nd,3rd {Q9_hp_3rd} {Q9_hp_3rd.shown} {Q9_hp_3rd=='Peter'}
C Pole (ano/nejisté/ne), přepínače Q10 1-5 Y,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Zobrazení textu Q11 {Q11.shown}
D Datum Q12 {Q12} {Q12.shown}
* Rovnice Q13 {Q13} {Q13.shown} {Q13>5}
~124~ Načtení souboru (zaznamenává počet nahraných souborů) Q14 {Q14} {Q14>0}
G Rozbalovací seznam pohlaví Q15 M,F {Q15} {Q15.shown} {Q15=='M'}
U Textové pole (rozsáhlé) Q16 {Q16} {Q16.shown} {strlen(Q16)>100}
I Otázka na jazyk Q17 {Q17} {Q17.shown} {Q17=='en'}
! Seznam - rozbalovací Q18 1-5 {Q18} {Q18.shown} {Q18==3}
L Seznam, rozbalovací seznam/přepínače Q19 A-Z {Q19} {Q19.shown} {Q19=='X'}
O Seznam s komentářem, rozbalovací seznam/přepínače + textové pole Q20 A-F {Q20},{Q20comment} {Q20.shown} {Q20=='B'}
T Dlouhý text Q21 {Q21} {Q21.shown} {strstr(Q21,'hello')>0}
M Vícenásobné možnosti, zaškrtávací pole Q22 A-F, other {Q22_E}, {Q22_other} {Q22_E.shown}, {Q22_other.shown} {Q22_E=='Y'}
P Vícenásobné možnosti s komentáři, zaškrtávací pole + text Q23 A-F {Q23_D}, {Q23_Dcomment} {Q23_D.shown} {!is_empty(Q23)}
K Vícenásobné číselné otázky Q24 self,mom,dad {Q24_self} {Q24_self.shown} {Q24_self>30}
Q Vícenásobné krátké texty Q25 A-F {Q25_B} {Q25_B.shown} {substr(Q25_B,1,1)=='Q'}
N Číselná otázka Q26 {Q26} {Q26.shown} {Q26 > 30}
R Pořadí Q27 1-4 {Q27_1} {Q27_1.shown} {Q27_1==3}
S Krátký text Q28 {Q28} {Q28.shown} {Q28=='mine'}
Y Ano/Ne, přepínače Q29 {Q29} {Q29.shown} {Q29=='Y'}


Použití NAOK

NAOK --> „Not Applicable“ (NA, nepoužitelné) je v pořádku (OK)


Použití NAOK znamená, že všechny nebo některé proměnné jsou irelevantní (tj. „Not Applicable“ (NA) je v pořádku (OK)).

Například: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) vždy vrátí prázdný řetězec, pokud je jedna dílčí otázka otázky Q1 odfiltrována. Pro spočítání zaškrtnutých dílčích otázek v takové otázce lze použít count(Q1_SQ1.NAOK,Q1_SQ2.NAOK,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Pokud je dílčí otázka skrytá, EM vrátí prázdný řetězec.

Bez NAOK, pokud je jedna otázka nebo jedna dílčí otázka skrytá, EM vždy vrátí prázdný řetězec (což je totéž jako vrácení false).

Přípona .shown vždy používá systém NAOK (prázdný řetězec, pokud je skrytá), ale pokud potřebujete kód odpovědi, je vždy dobré přidat .NAOK za kód otázky (kromě případů, kdy to potřebujete jinak a víte, co děláte).

Další informace najdete v podkapitole Přepsání kaskádových podmínek.


Rezervované proměnné „this“, „self“ a „that“

Často potřebujete vyhodnotit všechny části otázky, například spočítat, na kolik dílčích otázek bylo odpovězeno, nebo sečíst skóre. Jindy chcete zpracovat jen určité řádky nebo sloupce otázky (například získat součty řádků či sloupců a uložit je do databáze). Tyto rezervované proměnné tento postup značně usnadňují.


Proměnná „this“

Proměnná „this“ se používá výhradně v možnostech „Rovnice k ověření otázky“ a „Validační rovnice podotázky“ (druhá z nich není z grafického rozhraní dostupná). Rozvine se na názvy proměnných jednotlivých buněk v těchto otázkách. Pokud tedy chcete zajistit, aby každá položka byla větší než tři, nastavte „Validační rovnici podotázky“ na (this > 3).


Proměnná „self“

Proměnné „self“ a „that“ jsou výkonnější a slouží jako makra, která se rozvinou před zpracováním rovnic. Možnosti syntaxe proměnné „self“ jsou:

  • self
  • self.suffix
  • self.sub-selector
  • self.sub-selector.suffix
  1. suffix je libovolná z běžných přípon qcode (např. NAOK, value, shown)
  1. sub-selector může být jedním z následujících:
  • comments - pouze dílčí otázky, které jsou komentáři (např. vícenásobné možnosti s komentáři a seznam s komentářem);
  • nocomments - pouze dílčí otázky, které nejsou komentáři;
  • sq_X - kde X je identifikátor řádku nebo sloupce. Vybrány jsou pouze dílčí otázky odpovídající vzoru X. Vyhledávání probíhá v úplném identifikátoru kódu, takže sq_X odpovídá dílčím otázkám nX, X, Xn (např. pokud použijete sq_1, budou zahrnuty dílčí otázky a1, 1a, 1, 11 nebo 001). Dávejte pozor na typ otázky s dvojitou škálou, kde kódy dílčích otázek jsou QCODE_SQCODE_1 a QCODE_SQCODE_1, a na typ otázky s pořadím, kde kódy dílčích otázek jsou QCODE_1, QCODE_2 ....

Příklady:

  • Byla zodpovězena nějaká část otázky? -> {count(self.NAOK)>0}
  • Jaké je skóre hodnocení pro tuto otázku? -> {sum(self.value)}

Pomocí nich můžete také získat součty řádků a sloupců. Předpokládejme, že máte pole čísel s řádky A-E a sloupci 1-5.

  • Jaký je celkový součet? -> {sum(self.NAOK)}
  • Jaký je součet řádku B? -> {sum(self.sq_B.NAOK)}
  • Jaký je součet sloupce 3? -> {sum(self.sq_3.NAOK)}


Proměnná „that“

Proměnná „that“ je podobná proměnné „self“, ale umožňuje odkazovat na jiné otázky. Její syntaxe je:

  • that.qname
  • that.qname.suffix
  • that.qname.sub-selector
  • that.qname.sub-selector.suffix

qname je název otázky bez jakýchkoli přípon dílčích otázek. Vytvořme tedy otázku „q1“, kde „q“ představuje také její qname.

Příklady:

  • Byla zodpovězena nějaká část otázky q1? -> {count(that.q1.NAOK)>0}
  • Jaké je skóre hodnocení pro q2? -> {sum(that.q2.NAOK)}
  • Jaký je celkový součet otázky q3? -> {sum(that.q3.NAOK)}
  • Jaký je součet řádku C v q4? -> {sum(that.q4.sq_C.NAOK)}
  • Jaký je součet sloupce 2 v q4? -> {sum(that.q4.sq_2.NAOK)}

Proměnné „self“ a „that“ lze použít v jakékoli relevanci, ověření nebo přizpůsobení textu.

Jediným upozorněním je, že při použití funkce Show logic file se zobrazí rozbalená hodnota proměnných „self“ a „that“. Díky tomu uvidíte skutečnou rovnici, která bude vygenerována, a můžete (spolu s EM) ověřit, zda proměnné existují. Může to působit matoucím dojmem, protože můžete vidět velmi dlouhé rovnice. Pokud však otázku upravíte, uvidíte původní rovnici používající „self“ a/nebo „that“.

Tyto proměnné byste neměli používat, pokud
  • chcete explicitně pojmenovat každou proměnnou použitou v rovnici, nebo
  • používáte proměnné, které nemají dílčí otázky (např. otázky s jednou odpovědí). V takových případech je předpona „that“ zbytečná a riskujete neočekávané výsledky.

Přístup k funkcím

ExpressionScript poskytuje přístup k matematickým funkcím, funkcím pro práci s řetězci a uživatelsky definovaným funkcím, jak je uvedeno níže. Pro tyto funkce existují ekvivalenty v PHP a JavaScriptu, takže fungují stejně na straně serveru (PHP) i klienta (JavaScript). Přidávání nových funkcí je snadné.


Implementované funkce

V současné době jsou k dispozici následující funkce:

Funkce Význam Syntaxe
abs Absolutní hodnota number abs(number)
acos Arkus kosinus number acos(number)
addslashes Uvození řetězce pomocí zpětných lomítek string addslashes(string)
asin Arkus sinus number asin(number)
atan Arkus tangens number atan(number)
atan2 Arkus tangens dvou proměnných number atan2(number, number)
ceil Zaokrouhlit směrem nahoru number ceil(number)
checkdate Vrátí pravdu (1), pokud jde o platné datum v gregoriánském kalendáři bool checkdate(month,day,year)
convert_value Převede číselnou hodnotu pomocí vstupní a výstupní tabulky číselných hodnot number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList)
cos Kosinus number cos(number)
count Spočítá počet zodpovězených (neprázdných) otázek v seznamu number count(arg1, arg12, ..., argN)
countif Spočítá počet zodpovězených otázek v seznamu, které se rovnají prvnímu argumentu number countif(matches, arg1, arg2, ... argN)
countifop Spočítá počet zodpovězených otázek v seznamu, které splňují kritérium (arg op value) number countifop(op, value, arg1, arg2, ... argN)
date Formátovat lokální datum/čas string date(format [, timestamp=time()])
exp Vypočítá exponent e number exp(number)
fixnum V případě potřeby zobrazí čísla s čárkou jako oddělovačem desetinných míst string fixnum(number)
floor Zaokrouhlit směrem dolů number floor(number)
gmdate Formátovat GMT datum/čas string gmdate(format [, timestamp=time()])
html_entity_decode Převede všechny HTML entity na odpovídající znaky (vždy používá ENT_QUOTES a UTF-8) string html_entity_decode(string)
htmlentities Převede všechny vhodné znaky na HTML entity (vždy používá ENT_QUOTES a UTF-8) string htmlentities(string)
expr_mgr_htmlspecialchars Převede speciální znaky na HTML entity (vždy používá ENT_QUOTES a UTF-8) string htmlspecialchars(string)
expr_mgr_htmlspecialchars_decode Převede speciální HTML entity zpět na znaky (vždy používá ENT_QUOTES a UTF-8) string htmlspecialchars_decode(string)
idate Formátovat místní čas/datum jako celočíselné string idate(string [, timestamp=time()])
if Podmínka ve stylu Excelu if(test,result_if_true,result_if_false) if(test,result_if_true,result_if_false)
implode Spojit položky pole řetězcem string implode(glue,arg1,arg2,...,argN)
intval Získat číselnou hodnotu řetězce int intval(number [, base=10])
is_empty Zjistí, zda je proměnná považována za prázdnou bool is_empty(var)
is_float Zjistí, zda je typ proměnné float bool is_float(var)
is_int Zjistí, zda je typ proměnné celé číslo bool is_int(var)
is_nan Zjistit jestli proměnná není číslo bool is_nan(var)
is_null Zjistit jestli je proměnná hodnoty NULL bool is_null(var)
is_numeric Zjistí, zda je proměnná číslo nebo číselný řetězec bool is_numeric(var)
is_string Zjistí, zda je typ proměnné řetězec bool is_string(var)
join (New in 2.0 build 130129) Spojí prvky do nového řetězce join(arg1, arg2, ... argN)
list Vrátí seznam neprázdných hodnot oddělených čárkami string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) Vrátí seznam zadané vlastnosti otázky (retProp) oddělený znakem 'glue' z otázek v seznamu, které splňují kritérium (cmpProp op value) string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
ltrim Odstraní bílé znaky (nebo jiné znaky) ze začátku řetězce string ltrim(string [, charlist])
max Najít nejvyšší hodnotu number max(arg1, arg2, ... argN)
min Najít nejnižší hodnotu number min(arg1, arg2, ... argN)
mktime Získá UNIX timestamp pro datum (každý ze 6 argumentů je volitelný) number mktime([hour [, minute [, second [, month [, day [, year ]]]]]])
modulo-function Funkce modulo zatím není podporována. Místo ní můžete použít funkci floor() floor(x/y)==(x/y)
nl2br Vloží HTML zalomení řádku před všechny nové řádky v řetězci string nl2br(string)
number_format Formátuje číslo s oddělovačem tisíců string number_format(number)
pi Získá hodnotu pí number pi()
pow Exponenciální výraz number pow(base, exp)
quoted_printable_decode Převede řetězec ve formátu quoted-printable na 8bitový řetězec string quoted_printable_decode(string)
quoted_printable_encode Převede 8bitový řetězec na řetězec ve formátu quoted-printable string quoted_printable_encode(string)
quotemeta Uveďte meta znaky string quotemeta(string)
rand Generovat náhodné číslo, viz tento příklad int rand() OR int rand(min, max)
regexMatch porovná řetězec s regulárním výrazem bool regexMatch(pattern,input)
round Zaokrouhlit číslo na volitelnou přesnost number round(val [, precision])
rtrim Odstraní bílé znaky (nebo jiné znaky) z konce řetězce string rtrim(string [, charlist])
sin Sinus number sin(arg)
sprintf Vrátit formátovaný řetězec string sprintf(format, arg1, arg2, ... argN)
sqrt Odmocnina number sqrt(arg)
stddev Vypočítá výběrovou směrodatnou odchylku pro seznam čísel number stddev(arg1, arg2, ... argN)
str_pad Doplní řetězec na určitou délku jiným řetězcem string str_pad(input, pad_length [, pad_string])
str_repeat Zopakovat řetězec string str_repeat(input, multiplier)
str_replace Nahradí všechny výskyty hledaného řetězce náhradním řetězcem string str_replace(search, replace, subject)
strcasecmp Binárně bezpečné velikost-neřešící (case-insensitive) porovnání řetězců int strcasecmp(str1, str2)
strcmp Binárně bezpečné porovnání řetězců int strcmp(str1, str2)
strip_tags Odebrat HTML a PHP značky z řetězce string strip_tags(str, allowable_tags)
stripos Najde pozici prvního výskytu unicode řetězce bez ohledu na velikost písmen (počítáno od 0, pokud nenalezeno, vrací false) int stripos(haystack, needle [, offset=0])
stripslashes Od-cituje citovaný text string stripslashes(string)
stristr Velikost-neřešící strstr string stristr(haystack, needle [, before_needle=false])
strlen Získat délku řetězce int strlen(string)
strpos Najde pozici prvního výskytu unicode řetězce (počítáno od 0, pokud nenalezeno, vrací false) int strpos(haystack, needle [ offset=0])
strrev Převrátit řetězec string strrev(string)
strstr Najít první výskyt řetězce string strstr(haystack, needle[, before_needle=false])
strtolower Převede řetězec na malá písmena string strtolower(string)
strtotime Převede téměř jakýkoli anglický textový popis data a času na Unix timestamp int strtotime(string)
strtoupper Převede řetězec na velká písmena string strtoupper(string)
substr Vrátí část unicode řetězce string substr(string, start [, length])
sum Vypočítat součet hodnot pole number sum(arg1, arg2, ... argN)
sumifop Sečte hodnoty zodpovězených otázek v seznamu, které splňují kritérium (arg op value) number sumifop(op, value, arg1, arg2, ... argN)
tan Tangens number tan(arg)
time Vrátit aktuální UNIX timestamp number time()
trim Odstraní bílé znaky (nebo jiné znaky) ze začátku a konce řetězce string trim(string [, charlist])
ucwords Převede první znak každého slova v řetězci na velké písmeno string ucwords(string)
unique Vrátí pravdu, jsou-li všechny neprázdné odpovědi unikátní boolean unique(arg1, ..., argN)
Klikněte zde, pokud se chcete dozvědět více o plánovaných (nebo zvažovaných) funkcích.

<span id="Create_new_expression_functions_with_plugin_ (New in 4.0.0 )">

Vytvoření nových funkcí výrazů pomocí zásuvného modulu (New in 4.0.0 )

Pokud potřebujete novou funkci, která v jádru neexistuje, můžete ji vytvořit pomocí zásuvného modulu. Taková nová funkce se vytváří pomocí události expressionManagerStart.

ExpressionScript ví, které proměnné jsou lokální

Aby bylo možné správně sestavit JavaScript pro stránku, musí EM vědět, které proměnné jsou na stránce nastaveny a jaké je jejich JavaScript ID (např. pro document.getElementById(x)). Musí také vědět, které proměnné jsou nastaveny na jiných stránkách (aby mohl zajistit, že potřebná pole <input type='hidden' value='x'> jsou přítomna a vyplněna).


Kaskádové podmínky

Pokud je některá z proměnných nerelevantní, bude nerelevantní (nepravdivá) celá rovnice. Například v následující tabulce N/A znamená, že jedna z proměnných nebyla relevantní:


Operátor Příklad a b Výsledek
+ (unary) +a N/A false
! !a N/A false
== (or eq) a == b N/A 5 false
== (or eq) a == b N/A 0 false
== (or eq) a == b N/A N/A false
!= (or ne) a != b N/A 5 false
!= (or ne) a != b N/A N/A false
!= (or ne) a != b N/A 0 false
> (or gt) a > b N/A 5 false
>= (or ge) a >= b N/A 5 false
< (or lt) a < b N/A 5 false
<= (or le) a <= b N/A 5 false
and a and b N/A 5 false
and a and b N/A N/A false
or a or b N/A N/A false
or a or b N/A 5 false
+ a + b N/A 5 false
* a * b N/A 5 false
/ a / b 5 N/A false
() (a) N/A false
(exp) (a && b) N/A 5 false
(exp) op (exp) (b + b) > (a && b) N/A 5 false
function sum(a,b,b) N/A 5 false
function max(a,b) N/A 5 false
function min(a,b) N/A 5 false
function implode(', ',a,b,a,b) N/A 5 false
function if(a,a,b) N/A 5 false
function is_empty(a) N/A false
function is_empty(a) 0 (or blank) true
function !is_empty(a) N/A false


Přepsání kaskádových podmínek

Řekněme, že chcete zobrazit průběžný součet všech relevantních odpovědí. Můžete zkusit použít rovnici {sum(q1,q2,q3,...,qN)}. Ta se však interně přeloží na LEMif(LEManyNA("q1","q2","q3",...,"qN"),"",sum(LEMval("q1"),LEMval("q2"),LEMval("q3"),...,LEMval("qN"))). Pokud je tedy některá z hodnot q1-qN nerelevantní, rovnice vždy vrátí false. V tomto případě bude sum() zobrazovat „0“, dokud nebude zodpovězeny všechny otázky.

Abyste se tomu vyhnuli, můžete ke každé proměnné přidat suffix „.NAOK“ (což znamená, že Not Applicable je OK). V takovém případě nastane následující chování. Řekněme, že máte proměnnou q1.NAOK:

  1. q1 se nepřidá do klauzule LEManyNA()
  2. LEMval('q1') bude nadále kontrolovat, zda je odpověď relevantní, a pokud není, vrátí "" (jednotlivé nerelevantní odpovědi tedy budou ignorovány, ale neznehodnotí celý výraz).

Řešením problému s průběžným součtem je tedy použít rovnici sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).

Použití suffixu .NAOK také umožňuje autorům navrhovat průzkumy, které mají několik možných cest, ale později se opět sbíhají do společných cest. Řekněme například, že respondenti odpoví na průzkum způsobem, který je mimo běžný rozsah odpovědí. Autor může respondenty upozornit, že nemusí získat platné výsledky, a zeptat se jich, zda opravdu chtějí v průzkumu pokračovat. Pokud odpoví „Ano“, zobrazí se zbývající otázky. Podmínka pro „zbývající otázky“ by kontrolovala, zda počáteční odpovědi byly v běžném rozsahu NEBO zda respondent odpověděl „Ano“ na otázku, která je relevantní pouze tehdy, pokud odpověděl mimo běžný rozsah.

Jak ExpressionScript podporuje podmíněné mikro-přizpůsobení?

Zde je příklad mikro-přizpůsobení (kde Question Type=='expr' znamená rovnici):


Kód otázky Relevance Typ otázky Otázka
name 1 text Jak se jmenujete?
age 1 text Kolik je vám let?
badage !is_empty(age) expr {(age<16) or (age>80)}
agestop badage message Je nám líto, {name}, na tento test jste příliš {if( (age<16),'mladý',if( (age>80),'starý','středního věku') ) }.
kids !badage yesno Máte děti?
parents 1 expr {!badage && kids=='Y'}
numKids parents text Kolik máte dětí?
kid1 parents && numKids >= 1 text Kolik let je vašemu prvnímu dítěti?
kid2 parents && numKids >= 2 text Kolik let je vašemu druhému dítěti?
kid3 parents && numKids >= 3 text Kolik let je vašemu třetímu dítěti?
kid4 parents && numKids >= 4 text Kolik let je vašemu čtvrtému dítěti?
kid5 parents && numKids >= 5 text Kolik let je vašemu pátému dítěti?
sumage 1 expr {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
report parents text {name}, uvedli jste, že je vám {age} a že máte {numKids} dětí. Součet věku vašich prvních {min(numKids,5)} dětí je {sumage}


Chcete-li si stáhnout výše uvedený příklad průzkumu, klikněte na následující odkaz: Příklad průzkumu s počtem dětí.

Všechny tyto otázky mohou být na jedné stránce (např. ve stejné skupině) a zobrazí se pouze relevantní otázky. Navíc se při zadávání věku dětí bude výraz sum() v poslední otázce dynamicky aktualizovat.

ExpressionScript tuto funkci poskytuje tak, že každý výraz obalí pojmenovaným prvkem <span>. Při každé změně hodnoty znovu vypočítá výraz, který se má v tomto prvku <span> zobrazit, a obnoví zobrazení. Na jedné stránce můžete mít desítky nebo dokonce stovky takto přizpůsobených výrazů.


Zvýraznění syntaxe

Pro usnadnění zadávání a ověřování výrazů nabízí EM zvýraznění syntaxe s následujícími vlastnostmi:

Typy a významy zvýraznění syntaxe

Barva Ukázka Význam Popisek Poznámky
béžové pozadí Sample celá rovnice žádný Cokoli ve složených závorkách, co je rozpoznáno jako rovnice (např. není na začátku ani na konci mezera), bude barevně označeno béžovým pozadím, aby se odlišilo od okolního textu
tučný červený text Sample chyba Vysvětlení chyby Může jít o neznámou proměnnou nebo chybu ve funkci. Průzkum je nefunkční a otázky závislé na příslušném výrazu nebudou respondentům zobrazeny.
modrý text Sample název funkce význam a povolená syntaxe Označuje názvy funkcí nebo věci, které by měly být funkcemi, protože za nimi následuje otevírací závorka. Zobrazují se tučným modrým textem. Popisky zobrazují význam a povolenou syntaxi funkce.
šedý text Sample řetězec žádný Řetězce v jednoduchých a dvojitých uvozovkách se zobrazují šedým textem.
azurový text Sample proměnná nastavená na stejné stránce [name]: otázka; hodnota; answerList zobrazující kódy pro každou hodnotu Jakákoli proměnná nastavená na stejné stránce jako otázka, kterou právě upravujete, se zobrazuje azurovým textem (lze ji aktualizovat v JavaScriptu). Popisek zobrazuje její název, samotnou otázku a její současnou hodnotu (nebo prázdné, pokud není nastavena). Pokud typ otázky očekává odpovědi z výčtu hodnot, zobrazí se mapování kódů na zobrazované hodnoty.
zelený text Sample proměnná nastavená na předchozí stránce [name]: otázka; hodnota; answerList zobrazující kódy pro každou hodnotu Jakákoli proměnná nastavená na předchozí stránce se zobrazuje tučným zeleným textem. Popisek zobrazuje její název, samotnou otázku a její současnou hodnotu (nebo prázdné, pokud není nastavena). Pokud typ otázky očekává odpovědi z výčtu hodnot, zobrazí se mapování kódů na zobrazované hodnoty.
tučný růžový text Sample proměnná nastavená na pozdější stránce obecně: na začátku průzkumu prázdná, ale může být vyplněna pomocí indexu nebo návratu zpět [name nebo kód SGQA]: otázka; hodnota; answerList zobrazující kódy pro každou hodnotu Jakákoli proměnná nastavená na pozdější stránce se zobrazuje tučným růžovým textem. Popisek zobrazuje její název, samotnou otázku a její současnou hodnotu (nebo prázdné, pokud není nastavena). Pokud typ otázky očekává odpovědi z výčtu hodnot, zobrazí se mapování kódů na zobrazované hodnoty.
tučný hnědý text Sample náhradní hodnota LimeSurvey hodnota Náhradní řetězce LimeSurvey (např. {TOKEN:xxx}, {PRIVACY_MESSAGE}) se zobrazují tučným hnědým textem.
červený text Sample operátor přiřazení (=) varovná zpráva Pokud použijete některý z operátorů přiřazení (=), bude tento operátor zobrazen červeným textem. Má to pomoci předejít nechtěnému přepsání hodnot, když jste ve skutečnosti chtěli zkontrolovat, zda a == b, místo nastavení hodnoty a = b.
normální černý text Sample interpunkce žádný Všechna ostatní interpunkční znaménka ve výrazu se zobrazují normálním černým textem.
text v červeném rámečku tučná červená čára obklopuje chybu syntaktická chyba popis chyby Jakékoli zjištěné syntaktické chyby se zobrazují v červených rámečcích. Popisek zobrazuje chybu. Příklady zahrnují nespárované závorky, použití nedefinovaných funkcí, předání nesprávného počtu argumentů funkcím, špatně strukturované výrazy (např. chybějící operátory mezi proměnnými), pokus o přiřazení nové hodnoty proměnné pouze pro čtení, pokus o přiřazení hodnot neproměnným nebo použití nepodporované syntaxe. Všimněte si, že systém detekce syntaktických chyb může ve výrazu nahlásit pouze jednu chybu, i když jich je více; pokud však jsou zjištěny nějaké chyby, bude zobrazena alespoň jedna.


Popiskem rozumíme vyskakovací zprávu, která se zobrazí, když najedete myší na určité funkce a proměnné.


Další četba

Ukázkové průzkumy ExpressionScript

Případy použití a návody

Příklady krok za krokem

Reference pro vývojáře

Plán vývoje, stav, seznam úkolů