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

Expression Manager

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

Rychlý úvodní návod

Přehled

Při přizpůsobování průzkumů obvykle potřebujete určit následující:

  1. Navigace/větvení - odpovědi respondenta mění pořadí, v jakém se otázky zobrazují
  2. Přizpůsobení textu/piping - jak formulovat otázku (například odkazem na předchozí odpovědi nebo skloňováním vět podle počtu či pohlaví respondentů) nebo jak vytvářet vlastní zprávy (například hodnocení či přizpůsobené rady).
  3. Ověření - zajištění, že odpovědi splňují určitá kritéria, například minimální a maximální hodnoty nebo shodu se vzorem vstupu

Expression Manager (EM) nabízí intuitivní způsob zadávání logiky pro každou z těchto funkcí. Téměř cokoli, co lze zapsat jako běžnou matematickou rovnici, je platný výraz, i když v něm voláte funkce. EM v současnosti nabízí 80 funkcí a lze jej snadno rozšířit o další. Také umožňuje přistupovat k proměnným pomocí lidsky čitelných názvů (místo názvů SGQA).

Následující části ukazují hlavní místa, kde se Expression Manager používá.

Relevance (řízení navigace/větvení)

Některé průzkumy používají „Goto logiku“, například pokud na otázku 1 odpovíte možností C, přeskočí se na otázku 5. Tento přístup je velmi omezující, protože se špatně ověřuje a snadno se rozbije, když je potřeba změnit pořadí otázek. EM používá booleovskou rovnici relevance, která určuje všechny podmínky, za kterých může být otázka platná. Pokud je otázka relevantní, zobrazí se, jinak je nepoužitelná (Not Applicable) a do databáze se uloží hodnota NULL. Je to podobné tomu, co lze provést v editoru podmínek, ale EM umožňuje snadno zadat mnohem složitější a výkonnější kritéria (a umožňuje používat název proměnné místo pojmenování SGQA).

Tento obrázek ukazuje jeden ze způsobů, jak zkontrolovat logiku relevance v průzkumu. Počítá index tělesné hmotnosti (BMI). Rovnice relevance je zobrazena v hranatých závorkách hned za názvem proměnné (který je zelený). Relevance proměnných weight, weight_units, height a height_units je tedy vždy 1, což znamená, že se tyto otázky zobrazují vždy. Relevance pro BMI je však {!is_empty(height) and !is_empty(weight)}, což znamená, že BMI se vypočítá, pouze pokud respondent zadá hodnotu výšky i hmotnosti (čímž se předejde riziku dělení nulou). Otázka Report se také zobrazí, pouze pokud respondent odpoví na všechny čtyři hlavní otázky (height, height_units, weight, weight_units).

Relevance se zobrazuje a lze ji upravit na následujících místech:

Zobrazení / úprava relevance na úrovni otázky

Tato rovnice počítá index tělesné hmotnosti (BMI). Otázka se zobrazí, pouze pokud osoba nejprve zadá svou výšku a hmotnost.

Toto je obrazovka pro úpravu otázky BMI.

Všimněte si, že při zadávání rovnice relevance se složené závorky nepoužívají.

Zobrazení / úprava relevance na úrovni skupiny

Toto je ukázkový průzkum sčítání lidu. První stránka se ptá, kolik lidí s vámi bydlí, a ukládá to do proměnné „cohabs“. Tato stránka se zobrazí, pouze pokud s vámi bydlí více než jedna osoba (zobrazí se tedy pro druhou osobu, která s vámi bydlí), a také pouze pokud jste uvedli, v jakém vztahu k vám je osoba číslo jedna (p1_rel).

Jak vidíte, skupina má také kritéria relevance na úrovni otázek, takže se každá otázka zobrazí, až když odpovíte na otázku před ní (např. {!is_empty(p1_sex)}). EM relevanci skupiny a relevanci otázek kombinuje za vás. Otázky ve skupině se zobrazují, pouze pokud je relevantní skupina jako celek. Poté se zobrazí jen ta podmnožina otázek ve skupině, které jsou relevantní.

Zde je obrazovka pro úpravu relevance na úrovni skupiny pro danou otázku:

Všimněte si, že při zadávání rovnice relevance se složené závorky nepoužívají.

Přizpůsobení textu/piping

EM umožňuje snadno provádět jednoduché i složité podmíněné přizpůsobení otázek. Někdy potřebujete jen jednoduchou substituci, například: „Uvedli jste, že jste koupili [Produkt]. Co se vám na něm líbilo nejvíce?“. Jindy potřebujete podmíněnou substituci, například „[Pane/Paní] [Příjmení], byli byste ochotni vyplnit náš průzkum?“. V tomto případě chcete použít oslovení pan nebo paní podle pohlaví dané osoby. Jindy potřebujete ještě složitější substituci (například na základě matematického výpočtu). EM podporuje všechny tyto typy přizpůsobení textu/pipingu.

Podmíněné rovnice

Příklad s indexem tělesné hmotnosti ukazuje možnost vypočítat BMI osoby, i když jí umožníte zadat výšku a hmotnost v metrických i nemetrických jednotkách.

Zde je weight_kg {if(weight_units == 'kg', weight, weight * .453592)}. Tato funkce if() znamená, že pokud respondent zadal hmotnost v kilogramech, použije se tato hodnota, jinak se zadaná hodnota (v librách) vynásobí číslem .453592, aby se převedla na kilogramy. Proměnná height_m používá podobný postup k výpočtu výšky osoby v metrech, i když svou výšku zadala v palcích.

BMI vypočítá vzorec hmotnosti jako {weight_kg / (height_m * height_m)}.

Nakonec zpráva podmíněně přizpůsobí text pro respondenta a sdělí mu, co zadal. ("Uvedl jste, že měříte 2 metry a vážíte 70 kg.")

Ačkoli to na obrázku výše není dobře vidět, weight_status používá vnořené příkazy if() k zařazení osoby od podváhy po těžkou obezitu. Její rovnici můžete vidět v zobrazení Zobrazit logiku.

V okně úprav této otázky můžete vidět dvě věci:

  1. Při přizpůsobení textu musí být výrazy uzavřeny ve složených závorkách.
  2. Výrazy mohou zabírat více řádků, pokud chcete, jako v tomto případě, usnadnit čtení vnořené podmíněné logiky.

Přizpůsobené otázky, odpovědi a reporty

Poznámka: Dynamické přizpůsobení nemusí fungovat, pokud jsou možnosti odpovědí na stejné stránce otázky zobrazeny ve výběrových polích. Důvodem je, že přizpůsobení vkládá značku <span>, která není uvnitř možností výběru platná.

Tento příklad ukazuje report BMI.

Zde je okno úprav stejné otázky.

Jak vidíte, vše ve složených závorkách je považováno za výraz, a proto je na předchozím obrázku zvýrazněno (barevně odlišeno). Pokud byste udělali překlep (například chybně napsané nebo nedefinované názvy proměnných či funkcí), EM zobrazí chybu, například tuto: height_unit je nedefinovaný název proměnné (správně je height_units) a rnd() je nedefinovaná funkce (správný název funkce je round()). V obou případech jsou chyby orámovány červeným rámečkem, aby bylo snazší je najít a opravit.

Také vidíte, že můžete rychle vytvářet složité reporty, například tabulku zadaných hodnot nebo přizpůsobené rady.

Pamatujte, že při přizpůsobení musí být všechny výrazy uzavřeny ve složených závorkách, aby LimeSurvey věděl, které části otázky jsou volný text a které se mají zpracovat pomocí Expression Manageru.

Ověření

EM řídí fungování většiny pokročilých možností otázek. Ty ovládají například minimální a maximální počet odpovědí, minimální a maximální jednotlivé hodnoty, minimální a maximální součet hodnot a kontrolu, zda zadané hodnoty odpovídají zadaným řetězcovým vzorům. Tyto pokročilé možnosti otázek zadáváte nadále jako obvykle. Nyní je však každá hodnota v těchto polích považována za výraz, takže můžete mít kritéria minima a maxima se složitými podmíněnými vztahy k jiným otázkám.

Ve všech těchto případech se při zadávání nepoužívají složené závorky, protože pokročilá možnost otázky je vždy považována za výraz.

Stránky Ukázkové průzkumy obsahují mnoho funkčních příkladů použití výrazů pro ověření.

Úvod

LimeSurvey používá nový modul Expression Manager (EM), který umožní LimeSurvey podporovat složitější větvení, hodnocení, ověření a přizpůsobení textu. Nahradí způsob, jakým LimeSurvey na pozadí spravuje náhrady, podmínky a hodnocení. Také výrazně zrychlí zpracování, protože odstraňuje většinu čtení z databáze za běhu. EM vyvinul Dr. Thomas White (TMSWhite).

Tato wiki stránka je definitivní referencí k syntaxi a funkcím Expression Manageru.

Klíčové definice

  1. Výraz: Cokoli uzavřené ve složených závorkách
    • Pokud bezprostředně za levou složenou závorkou ani před pravou složenou závorkou není mezera
    • Obsah výrazů vyhodnocuje EM, takže mohou obsahovat matematické vzorce, funkce a složité zpracování řetězců a dat.
  2. Přizpůsobení textu (tailoring): Někdy nazývané „piping“, jde o proces podmíněné úpravy textu
    • Máte přístup ke všem „náhradním polím“, údajům o respondentovi 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 řídící viditelnost otázky
    • Pokud existuje rovnice relevance, otázka se zobrazí pouze tehdy, když 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. Rovnice (typ otázky): Nový typ otázky, který ukládá výpočty nebo reporty do databáze
    • Je podobný otázce Boilerplate, ale jeho obsah se ukládá do databáze, i když nastavíte „Vždy skryje tuto otázku“
  5. Kód otázky: Toto je preferovaný 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 pokud kód otázky používáte k číslování otázek, použijte jednoduše „q1“, „q1a“ nebo „g1q2“.
    • Toto se aktuálně stává názvem proměnné, pokud exportujete data do SPSS nebo R, takže pokud provádíte statistickou analýzu, pravděpodobně jste jej již učinili jedinečným.

Musím EM používat?

Stručná odpověď zní ne (ale zároveň ano).

EM je plně zpětně kompatibilní se stávajícími průzkumy. Pokud tedy chcete nadále používat podmínky a hodnocení ve stylu verzí LimeSurvey <= 1.91+, můžete tak činit i dál.

EM však zcela nahrazuje způsob, jakým LimeSurvey interně pracuje s podmínkami. Ačkoli můžete stále používat editor podmínek k vytváření a správě podmínek, LimeSurvey 1.92 je převede na ekvivalentní rovnice relevance. V rámci aktualizace LimeSurvey 1.92 automaticky převede všechny existující podmínky na rovnice relevance.

To by vám mělo poskytnout to nejlepší z obou světů - LimeSurvey můžete nadále používat, jak jste zvyklí, ale uvidíte ekvivalentní rovnici relevance, takže můžete postupně přecházet přímo na rovnice relevance, kdykoli uznáte za vhodné.

Mohu kombinovat použití podmínek a relevance?

Ano. Pro některé otázky můžete použít editor podmínek a pro jiné editor relevance. Podmínky se při uložení otázky automaticky převedou na relevanci.

Upozorňujeme, že pokud používáte editor podmínek, předpokládáme, že chcete, aby tyto podmínky přepsaly jakoukoli ručně zadanou rovnici relevance. Pokud tedy máte existující podmínky a chcete relevanci upravit ručně, nejprve podmínky pro danou otázku smažte. Konkrétně zkopírujte vygenerovanou rovnici relevance do textového editoru, v menu Podmínky smažte všechny podmínky dané otázky (tím se smaže i relevance), poté otázku upravte a vloženou rovnici relevance z textového editoru vložte zpět do pole relevance dané otázky (a otázku uložte). Pokud bude dostatečný zájem o mazání podmínek bez smazání vygenerované rovnice relevance, mohli bychom přidat hromadný proces převodu.

Jak se mám rozhodnout 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říjemné grafické rozhraní pro vytváření jednoduchých podmínek
2. Grafické rozhraní je dobře zdokumentované a tým podpory mu rozumí
1. Podporuje pouze jednoduchá porovnání a špatně zvládá podmínky AND/OR
2. Kaskádové podmínky fungují nespolehlivě
3. Pomalé - zatěžuje databázi, takže může zpomalovat dlouhé průzkumy
4. Hlášené problémy s opětovným načítáním podmínek
5. Grafické rozhraní se špatně škáluje při desítkách, stovkách nebo tisících otázek
6. Převod papírových průzkumů může být pomalý, protože se musí používat názvy SGQA
7. Pro složité větvení je často potřeba programátor, který logiku napíše na míru
Relevance 1. Podporuje velmi složitou logiku, včetně 80+ funkcí a matematických/řetězcových operátorů
2. Perfektní podpora kaskádové logiky
3. Rychlé - žádná další volání databáze, takže podporuje průzkumy s 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 1000+ otázkami
6. Snadné a rychlé použití pro skupiny, které chtějí zdigitalizovat stávající papírové průzkumy.
7. Snadno podporuje polostrukturované rozhovory a epidemiologické průzkumy bez nutnosti programátora
1. Žádné grafické rozhraní pro jednoduché podmínky - místo toho použijte zvýraznění syntaxe
2. Je nové, takže týmy podpory EM ještě plně neovládly.

Shrnuto: pokud jste spokojeni s tím, jak LimeSurvey 1.91+ funguje, není důvod cokoli měnit.

Jaké jsou další výhody používání EM?

Zde je několik dalších důvodů, proč můžete chtít používat EM.

  1. Výpočty - můžete vytvořit jakýkoli výpočet, který si dokážete představit:
    • Máte k dispozici všechny běžné matematické operátory a funkce
    • Máte k dispozici 70+ matematických funkcí, funkcí pro práci s daty a řetězci
    • Vývojáři mohou poměrně snadno přidat nové funkce, pokud je uživatelé potřebují
  2. Ukládání výpočtů do databáze
    • Nyní můžete provádět jednoduché i složité výpočty a/nebo skóre škál A ukládat je do databáze bez nutnosti JavaScriptu.
    • K tomu použijete typ otázky Rovnice.
  3. Hodnocení
    • Nyní můžete vytvářet hodnocení nebo skóre škál z libovolného typu otázky, nejen z podmnožiny, která byla dříve podporována
    • Pomocí tailoringu můžete zobrazit průběžné nebo celkové skóre hodnocení kdekoli je potřeba - dokonce i na stejné stránce
    • Máte větší kontrolu nad zprávami generovanými na základě těchto skóre hodnocení
    • Skóre hodnocení můžete ukládat do databáze bez nutnosti JavaScriptu
    • Skóre hodnocení můžete skrýt bez nutnosti JavaScriptu nebo CSS
  4. Nahrazovací pole
    • Pomocí kódu otázky vkládejte hodnoty z odpovědí na předchozí otázky - usnadňuje to čtení i ověřování.
  5. Tailoring - text můžete podmíněně zobrazovat na základě jiných hodnot
    • Použijte vhodné oslovení respondenta, např. "Dobrý den, [pane/paní] Nováková"
    • Vytvářejte gramaticky správné věty, kdy záleží na jednotném/množném čísle: (např. "Máte 1 dítě" vs. "Máte 2 děti")
    • Správně časujte slovesa a skloňujte podstatná jména podle pohlaví a čísla respondenta.
  6. Nové atributy proměnných - pro tailoring máte k dispozici následující:
    • (bez přípony) - alias pro qcode.code
    • .code - vybraný kód odpovědi na otázku, pokud je relevantní (jinak prázdný), nebo textová hodnota, pokud nejde o otázku s kódovanými odpověďmi
    • .NAOK - stejné jako .code, ale může být součástí výpočtů nebo seznamů i když je nerelevantní
    • .value - číselná hodnota hodnocení pro otázku, pokud je relevantní (jinak prázdná), nebo textová hodnota, pokud nejde o otázku s kódovanými odpověďmi -- dostupné, pokud jsou pro průzkum povolena hodnocení, jinak vždy nula
    • .valueNAOK - stejné jako .value, ale může být součástí výpočtů nebo seznamů i když je nerelevantní
    • .shown - odpověď tak, jak je zobrazena uživateli
    • .qid - ID otázky
    • .gid - ID skupiny
    • .sgqa - hodnota SGQA pro otázku
    • .jsName - správný název javascriptové proměnné pro otázku, bez ohledu na to, zda je definována na této nebo jiné stránce
    • .qseq - pořadí otázky (počínaje 0)
    • .gseq - pořadí skupiny (počínaje 0)
    • .mandatory - zda je otázka povinná (Y/N)
    • .question - text otázky
    • .relevance - rovnice relevance pro otázku
    • .grelevance - rovnice relevance pro skupinu
    • .relevanceStatus - zda je otázka aktuálně relevantní (boolean (může se lišit v PHP a JS))
    • .type - typ otázky (jednoznakový kód)
  7. Dynamické změny na stránce
    • Veškerá relevance, výpočty a tailoring fungují na stránce dynamicky - změny hodnot okamžitě aktualizují stránku
    • Otázky se tedy dynamicky zobrazují/skrývají podle toho, zda jsou relevantní
    • Otázky jsou také dynamicky upravovány na základě odpovědí na stránce, takže můžete vidět průběžné součty, přizpůsobené věty a vlastní zprávy.
  8. Nová obrazovka pro vstup dat
    • Kromě stávajícího systému pro vstup dat můžete použít také režim Survey-All-In-One.
    • Ten podporuje relevanci a tailoring přímo na stránce, takže pracovníci zadávající data mohou rychle procházet pomocí tabulátoru a zadávat pouze relevantní odpovědi
    • To může být zásadní, pokud osoba zadávající data potřebuje vidět tailoring, který je rovněž dynamický.
  9. Odpadá potřeba většiny vlastního JavaScriptu
    • EM snadno podporuje složité výpočty, skórování, tailoring a podmíněnou logiku.
    • Některé věci stále budou vyžadovat JavaScript (například vlastní rozvržení a podmíněné skrývání dílčích prvků otázky), ale váš JavaScript může používat funkce EM, takže můžete k otázkám přistupovat pomocí jejich Qcode místo SGQA a získat jakoukoli z výše uvedených vlastností otázky.

Jaké další užitečné nové funkce EM umožňuje?

Bez ohledu na to, zda nadále používáte editor podmínek, nebo ručně vytváříte rovnice relevance, získáte tyto další výhody:

  1. Můžete vytvářet složitější kritéria ověření
    • Všechny pokročilé atributy otázky (například max_answers, min_num_value_n, max_num_value) mohou používat výrazy. Kritéria minima a maxima tak můžete snadno upravovat na základě předchozích odpovědí, i když jsou na stejné stránce.
    • EM také zpracovává veškerá ověření založená na regulárních výrazech, takže můžete spolehlivě kombinovat atributy otázek založené na preg a na rovnicích.
  2. Snadná změna pořadí (nebo mazání) otázek a skupin
    • Před verzí 1.92 nebylo možné měnit pořadí otázek nebo skupin, pokud LimeSurvey usoudil, že by taková změna pořadí mohla porušit podmínky, ve kterých byly použity. Stejně tak nebylo možné smazat otázky, pokud na nich závisely jiné otázky.
    • Díky zvýraznění syntaxe v EM snadno uvidíte a ověříte, zda se nepokoušíte použít otázky dříve, než jsou deklarovány. Proto nyní umožňujeme měnit pořadí nebo mazat otázky a skupiny kdykoli budete chtít. EM aktualizuje zvýraznění syntaxe tak, aby vám ukázalo potenciální chyby.
    • Zobrazení změny pořadí otázek bylo vylepšeno, aby takovou kontrolu usnadnilo. Nyní zobrazuje rovnici relevance a tailoring otázky, takže okamžitě uvidíte, zda některé proměnné zrůžovějí (což znamená, že jsou použity před deklarací).
  3. Navigační rejstřík otázek/skupin je vždy k dispozici a přesný
    • Před verzí 1.92 nebyly tyto rejstříky k dispozici, pokud existovaly složité podmínky.
    • S EM můžeme zaručit, že jsou přesné.
    • Respondenti se dokonce mohou vrátit na předchozí otázku, změnit odpověď a poté skočit dopředu (nebo odeslat).
      • Při skoku dopředu EM znovu ověří všechny otázky/skupiny mezi nimi.
      • Pokud se některé otázky stanou irrelevantními, budou v databázi nastaveny na NULL, aby byla vaše data vnitřně konzistentní.
      • Pokud se některé otázky stanou relevantními nebo nově nesplní pravidla povinnosti či ověření, EM se na dané stránce zastaví a přinutí uživatele tyto otázky zodpovědět, než přejde do cílového místa.
  4. Automatický převod podmínek na relevanci
    • Při aktualizaci databáze budou pro všechny existující průzkumy s podmínkami vygenerovány rovnice relevance.
    • Při každém importu průzkumu budou podle potřeby vytvořeny rovnice relevance.
    • Kdykoli přidáte, smažete nebo upravíte podmínky, EM vygeneruje příslušnou rovnici relevance.
  5. Praktické zvýraznění syntaxe
    • Když EM zobrazí rovnici relevance, zobrazí Qcode, i když jste zadali kód SGQA, protože předpokládáme, že se bude lépe číst.
    • Všechny proměnné jsou barevně odlišeny, aby bylo vidět, zda byly deklarovány před aktuální otázkou nebo po ní (případně před aktuální skupinou nebo po ní). Díky tomu rychle odhalíte a opravíte případy, kdy se pokoušíte použít proměnné v relevanci (včetně array_filter), tailoringu nebo ověřovacích rovnicích dříve, než jsou deklarovány.
    • Kromě toho, pokud najedete myší na barevně zvýrazněnou proměnnou, zobrazí se nejdůležitější metadata o dané otázce. Patří sem pořadové číslo skupiny, pořadové číslo otázky, Qcode, text otázky a všechny dostupné možnosti odpovědí (pokud jde o typ otázky s vyjmenovanými možnostmi odpovědí).
      • Seznam možností odpovědí používá tuto syntaxi: 'answers':{key:val, ... }.
      • key má syntaxi 'scale~code', kde scale je škála odpovědi (např. u duální škály) a code je kód odpovědi.
      • val má syntaxi 'value~shown', kde value je číselná hodnota hodnocení (pokud používáte hodnocení, jinak code) (např. Qcode.value) a shown je zobrazená hodnota, kterou vidí respondent (např. Qcode.shown).
      • To znamená, že mnoho průzkumů může používat výpočty bez nutnosti režimu hodnocení. Pokud máte vyjmenované možnosti odpovědí, které jsou jedinečné, nedesetinné a nezáporné, můžete jednoduše provádět výpočty s hodnotami Qcode.code.
  6. Snadná kontrola celé logiky a obsahu průzkumu
    • Nová funkce Zobrazit logiku průzkumu umožňuje zobrazit vše o průzkumu (nebo skupině či otázce) na jedné stránce.
    • Zobrazuje podrobnosti na úrovni skupiny, otázky, dílčí otázky a odpovědi pro zvolený rozsah (průzkum vs. skupina vs. otázka).
    • Zobrazuje také relevanci, relevanci na úrovni dílčích otázek (pro array_filter a array_filter_exclude), vygenerovanou ověřovací rovnici (pro preg a jakákoli ověřovací pravidla, například min/max součet/počet hodnot) a všechny neprázdné atributy otázky.
    • Vše je zvýrazněno podle syntaxe, takže uvidíte potenciální syntaktické chyby (například nevyvážené závorky nebo použití proměnných před jejich deklarací).
    • Zvýraznění syntaxe podporuje rychlou navigaci a úpravy průzkumu.
      • Pokud kliknete na název proměnné, otevře se okno (nebo karta) prohlížeče, které zobrazí danou otázku a umožní vám ji upravit.
      • Pokud kliknete na název skupiny, otevře se okno (nebo karta) prohlížeče se zobrazením změny pořadí skupin, takže můžete snadno přesouvat otázky.
      • Všechny atributy otázky jsou také zvýrazněny podle syntaxe. Díky tomu můžete nastavovat a vidět výrazy v pokročilých možnostech otázky (například určit max/min počet/součet hodnot pomocí výrazu).
    • Autor EM použil podobné zobrazení (trochu přehlednější), aby jeho spolupracující epidemiologové a etická komise mohli ověřovat a schvalovat průzkumy s tisíci otázek ve vysoce větvených a přizpůsobených strukturovaných rozhovorech.

Začínáme

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

  • Nainstalujte nejnovější stabilní verzi z http://www.limesurvey.org/en/download
  • Importujte a prozkoumejte ukázkové průzkumy.
  • Prozkoumejte případy použití a návody a příklady krok za krokem.
  • Prostudujte dokumentaci k EM (tuto stránku).
  • Vyzkoušejte vestavěnou testovací sadu EM
    • V libovolném průzkumu vyberte v nabídce nástrojů možnost EM.
    • Funkce k dispozici uvádí více než 70 funkcí a jejich syntaxi.
    • Jednotkové testy izolovaných výrazů
      • ukazují příklady použití všech funkcí a operátorů EM a výsledky v PHP a JavaScriptu
      • všimněte si, ž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 podle toho.

Jakou funkcionalitu Expression Manager rozšiřuje/nahrazuje? (LimeSurvey <= 1.91+)

Podmínky => Relevance

Podmínky řídily, které otázky jsou viditelné. Obecná syntaxe byla SGQA operátor Hodnota, například 111X2X3 == "Y". Podmínky bylo možné spojovat pomocí AND nebo OR, ale kombinace AND a OR byla obtížná. Samotné podmínky byly uloženy v samostatné tabulce a velká část kódu LimeSurvey byla věnována správě podmínek. Kvůli rozsáhlému přístupu k databázi mohlo zpracování velkého počtu podmínek způsobit znatelné problémy s výkonem. Navíc, jakmile byly k otázkám nebo skupinám přiřazeny podmínky, často nebylo dovoleno měnit jejich pořadí ani je mazat.

Hodnocení => Rovnice a mikro-tailoring

Hodnocení umožňovala uživatelům vytvářet škálová skóre ze souboru otázek. Nemohla se však dynamicky měnit na aktuální stránce a jejich hodnoty se neukládaly do databáze.

Nahrazení => Mikro-tailoring

Uživatelé mohli přizpůsobit některé zprávy a otázky na základě předchozích odpovědí. Například otázka mohla znít {TOKEN:FIRSTNAME}, uvedl(a) jste, že {SPORT.shown} je váš oblíbený sport. Podmíněné přizpůsobení (například oslovení „pane“ nebo „paní“ podle pohlaví osoby) nebo časování sloves či skloňování podstatných jmen však nebylo možné bez nákladného JavaScriptu. Autoři mohli vytvářet průzkumy, které působily, jako by otázky přizpůsobovaly, ale vyžadovalo to samostatné otázky pro každou variantu a složité podmínky, které rozhodovaly, jaké otázky zobrazit.

Ověření

Otázky bylo možné ověřovat pomocí regulárních výrazů, minimálních/maximálních hodnot, nebo nechat odpověď sloužit jako minimální či maximální hodnotu. Ověření však nemohla být založena na výpočtech z jiných proměnných bez nákladného JavaScriptu.

Rovnice

Rovnice nebyly bez nákladného JavaScriptu podporovány.

Typ otázky Rovnice

Rovnice nebylo možné bez nákladného JavaScriptu ukládat do databáze (např. konečné skóre hodnocení).

Jak Expression Manager nahradí/rozšíří tuto funkcionalitu?

Expression Manager je nový základní modul v LimeSurvey, který výrazně usnadňuje podporu složité funkcionality, jež dříve vyžadovala vlastní JavaScript. Také nahrazuje způsob, jakým LimeSurvey dosud spravuje podmínky a hodnocení.

Nová terminologie při odkazování na Expression Manager (EM)

EM „uvažuje“ o své funkcionalitě v následujících pojmech:

  • Větvení založené na relevanci - pokud je otázka relevantní, zobrazí se, jinak ne (tj. je neviditelná a v databázi je označena jako NULL). Pro všechny typy otázek je nové pole Relevance, a také pro každou skupinu (takže můžete použít sadu podmínek na celou skupinu, aniž byste museli kopírovat stejnou podmínku ke každé otázce, nebo můžete kombinovat podmíněnou logiku na úrovni skupiny a otázky).
  • Tailoring - Jakmile víte, které otázky se mají zobrazit, tailoring (někdy nazývaný piping) určuje, jak má být otázka položena. Díky tomu můžete podporovat nejen jednoduché nahrazování (například {TOKEN:FIRSTNAME}), ale také časování sloves a skloňování podstatných jmen podle pohlaví nebo počtu respondentů. Také můžete měnit sdělení, které respondentovi předkládáte, podle toho, zda (nebo jak) odpověděl na jiné otázky.
  • Rovnice - EM přidává nový typ otázky zvaný Rovnice, který ukládá výsledek výrazu. Výsledky těchto rovnic se vypočítají a zapíší do databáze, i když je na stránce skryjete. Jsou tedy užitečné pro skryté výpočty skóre, navigaci založenou na složitých rovnicích, hodnocení a sestavy, které by měly být vygenerovány a snadno dostupné 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í. EM zpracovává jednotlivé rovnice relevance v pořadí, v jakém se mají v průzkumu objevit. Pokud je výraz pravdivý (nebo chybí - kvůli podpoře starších průzkumů), otázka se zobrazí. Pokud není relevantní, otázka se skryje a hodnota v databázi se nastaví na NULL. Pokud ve skupině nejsou žádné relevantní otázky, celá skupina se přeskočí.

Navíc, pokud je kterákoli proměnná ve výrazu irelevantní, výraz se vždy vyhodnotí jako nepravda. To umožňuje kaskádovou relevanci, takže nemusíte psát velmi dlouhé rovnice relevance pro každou otázku.

Řekněme, že máte 5 otázek Q1-Q5 a chcete zobrazit Q2 pouze tehdy, pokud byla zodpovězena Q1, Q3 pouze tehdy, pokud byla zodpovězena Q2 atd. Rovnice relevance mohou 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 je vám {Q2} let. Jste ženatý/vdaná?
Q4 Q3 == "Y" {Q1}, jak dlouho jste v manželství?
Q5 Q4 Kolik máte dětí, {Q1}?

Výpočty relevance fungují také v JavaScriptu - takže byste mohli všechny výše uvedené otázky umístit na jednu stránku a stále by to fungovalo podle očekávání. EM ve skutečnosti zcela nahrazuje způsob zpracování formátů průzkumu po celém průzkumu, po skupinách a po jedné otázce. Nyní všechny používají úplně stejný navigační modul, takže fungují shodně bez ohledu na styl průzkumu.

Dokud se nacházíte na stejné stránce, všechna zadaná data tam stále zůstávají, jen jsou skrytá. Pokud tedy zadáte nějaké informace, poté zvolíte možnost, která je učiní irelevantními, a poté je opět učiníte relevantními, vaše odpovědi budou stále k dispozici. Jakmile ale přejdete na jinou stránku, všechny irelevantní odpovědi budou kvůli integritě datové sady ztraceny.

Relevance na úrovni skupiny

Expression Manager podporuje také relevanci na úrovni skupiny. Díky tomu je snazší implementovat cyklení. Předpokládejme, že chcete shromáždit informace až o 10 entitách (například o produktech nebo osobách v domácnosti), přičemž nejprve zjistíte, u kolika entit je potřeba navazující dotazování (například otázkou, kolik osob žije v domácnosti, nebo tím, že respondenti zaškrtnou, které produkty z dlouhého seznamu se jim líbí). Jakmile znáte počet entit, které vyžadují navazující dotazování, můžete pro každou z 10 skupin navazujících otázek použít relevanci na úrovni skupiny, například {count >= 1}, {count >=2}, ... {count >= 10}. V rámci každé skupiny můžete mít podmíněnou logiku na úrovni otázky (např. navazující otázky specifické pro pohlaví nebo věk každého subjektu). Rovnice relevance na úrovni otázky a skupiny jsou spojeny operátorem AND, aby se určilo, co se má zobrazit.

Přizpůsobení / Piping

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

Pomocí těchto rovnic můžete dělat například následující:

  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 či zobrazovat zprávy), a to zcela bez použití samotného modulu Hodnocení
  3. Časovat slovesa a skloňovat podstatná jména v otázkách, odpovědích a zprávách.
  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. Je podobný otázce typu Boilerplate, 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í, tato hodnota se uloží do databáze do proměnné, kterou lze zobrazit ve veřejných nebo soukromých statistikách.

Tím se řeší častý požadavek na ukládání skóre hodnocení do databáze.

Syntaxe

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

Upozornění: výrazy mohou zabírat více řádků, 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',
               ''
             )
           )
         )
       )
     )
   )
 )
)}
Expression Manager podporuje následující syntaxi:
  • Všechny standardní matematické operátory (např. +,-,*,/,!)
  • Všechny standardní porovnávací operátory (např. <,<=,==,!=,>,>=, plus tyto ekvivalenty: lt,le,eq,ne,gt,ge)
  • Závorky (umožňují seskupovat podvýrazy)
  • Podmíněné operátory (např. &&,| | a tyto ekvivalenty: and,or)
  • Řetězce v jednoduchých i dvojitých uvozovkách (do každého lze vložit řetězec s uvozovkami druhého typu)
  • Operátor čárka (lze mít seznam výrazů a vrátit pouze poslední výsledek)
  • Operátor přiřazení (=)
  • Předdefinované proměnné (odkazující na otázky, atributy otázek a odpovědi) - např. všechny kódy SGQA
  • Předdefinované funkce (už jich je 70+ 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 seskupování 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 čárka

Upozornění k operátoru plus (+)

Kvůli konzistenci mezi JavaScriptem a PHP provádí operátor plus (+) sčítání, pokud jsou oba operandy číselné, ale řetězení, pokud jsou obě části nečíselné řetězce. Doporučujeme však pro řetězení používat funkci join() a pro sčítání funkci sum(), protože tím je váš záměr jasnější a vyhnete se neočekávaným výsledkům, pokud jste očekávali řetězce, ale dostali jste čísla (nebo naopak).

Upozornění k nesouladu mezi číslem a řetězcem a k abecednímu 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 vybraný kód odpovědi lze použít jako číslo, pokud je to zjevně číslo. Pokud jednu z hodnot uzavřete do ", vynutí se porovnání jako text (abecední porovnání). Pokud chcete porovnávat číselně, nikdy číslo neuzavírejte do uvozovek, ".

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í, a nikoli číselné.

Chcete-li mít jistotu, že se porovnává celočíselná hodnota, můžete použít intval(Q0.NAOK) > 50, jen nezapomeňte, že pokud Q0.NAOK není číslo (je prázdné nebo je to řetězec), pak intval(Q0.NAOK) == 0. K porovnání řetězcových hodnot ("A" < "B") použijte přímo strcmp: strcmp(Q0.NAOK,"B") nebo strcmp(Q0.NAOK,"A5").

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

Operátorům přiřazení byste se měli vyhnout, 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 nepřepočí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 její hodnotu nastavit pomocí výrazu. Existují však výjimečné případy, kdy lidé tento operátor skutečně potřebují, proto jsme jej zpřístupnili.

Aby vás tento operátor upozornil na opatrnost, je v syntaxi rovnic zobrazen červeným písmem (abyste jej nezaměnili s „==“).

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

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

  • Potřebujete nastavit výchozí hodnotu otázky, která nepřijímá výchozí hodnoty pomocí rovnice (například seznam s přepínači, kde 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
  • Potřebujete složitou kvótu: použijete jednu skrytou otázku s jednou volbou pro kvótu a nastavíte ji pomocí přiřazení
  • atd...

K tomuto účelu můžete využít celý systém Expression Manager.

  Přiřazení se provádí pouze v PHP. Neaktualizuje žádné hodnoty na stejné stránce, ale pouze při navigaci uživatele pomocí tlačítek další, předchozí, uložit ….


  Pokud k tomuto účelu nepoužijete typ otázky Rovnice: přiřazení se provede až po dokončení logiky aktuální stránky. Doporučenou metodou je vždy použít otázku Rovnice.


Několik příkladů:

  • Nastavení odpovědi na otázku typu krátký text na malá písmena : {QCODE=strtolower(QCODE.NAOK)}
  • Nastavení výchozí 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í 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é funkce 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 URL.

Příklad a řešení

  • {if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")} při zabezpečení XSS nefunguje, 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

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

  • TOKEN:xxx - hodnota TOKENu (např. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (pouze pro NEanonymní průzkumy).
  • QCODE.shown - zobrazená hodnota odpovědi (např. "Ano") pomocí Expression Manageru.
  • Všechny hodnoty {XXX} používané šablonami.
  • V textu otázky můžete použít {QID}, které se nahradí ID otázky, a {SGQ}, které se nahradí hodnotou SGQA dané otázky.

Expression Manager navíc umožňuje odkazovat na proměnné pomocí kódu otázky (sloupec 'title' v tabulce otázek v databázi). Jedná se také o popisek proměnné, který se používá 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 namísto 12345X13X22, 12345X13X23 a 12345X13X24. Díky tomu se rovnice snáze čtou a lze ověřit jejich logiku. Zároveň je možné otázky libovolně přesouvat, aniž byste museli sledovat čísla skupin nebo otázek.

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

Expression Manager 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 se nejedná o otázku s kódovanými odpověďmi {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK stejné jako Qcode - viz popis NAOK {gender.NAOK} 'M'
Qcode.value číselná hodnota hodnocení otázky, pokud je relevantní (jinak prázdné), nebo textová hodnota, pokud se nejedná o otázku s kódovanými odpověďmi {gender.value} '1'
Qcode.valueNAOK stejné 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 (nikoli pořadové číslo) {gender.qid} 337
Qcode.type typ otázky {gender.type} 'G'
Qcode.jsName správný název proměnné v JavaScriptu pro otázku, bez ohledu na to, zda je deklarována na této stránce či jinde {gender.jsName} 'java1827X3X337'
Qcode.gid interní číslo skupiny (nikoli 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 pro tuto otázku {gender.sgqa} '1827X3X337'

Problém s HTML editorem

  Tento problém je opraven od verze 2.05 build 140803


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 místo &
  • lt místo <
  • le místo <=
  • gt místo >
  • ge místo >=

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 . '_' . SubQuestionCode . '_' . ScaleId

Kód dílčí otázky a ID škály je nutné použít, nebo ne, podle typu otázky - viz tabulka níže. Pro comment a other jsou 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ícenásobné flexibilní) 1 až 10 Q8 ls1,todo,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Pole (vícenásobné flexibilní) 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 Otázka s pevným textem 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í seznam 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'}

Rezervované proměnné 'this', 'self' a 'that'

Často potřebujete vyhodnotit všechny části otázky, například spočítat, kolik dílčích otázek bylo zodpově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é to výrazně usnadňují.

Proměnná 'this' se používá výhradně v pokročilých nastaveních otázky "Rovnice k ověření celé otázky" a "Rovnice k ověření dílčí otázky". Rozvine se na názvy proměnných všech buněk v těchto otázkách. Pokud tedy chcete zajistit, aby každá hodnota byla větší než tři, nastavte "Rovnici k ověření dílčí otázky" na (this > 3).

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

  • self
  • self.suffix
  • self.sub-selector
  • self.sub-selector.suffix

suffix je kterýkoli z běžných suffixů qcode (např. NAOK, value, shown)

sub-selector je jedno z následujících:

  • comments - pouze dílčí otázky, které jsou komentáři (např. z typu 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í se provádí v úplném identifikátoru kódu, poté se shoduje sq_X a zahrnuje dílčí otázky nX, X, Xn (např. pokud použijete sq_1, budou zahrnuty dílčí otázky a1, 1a, 1, 11 nebo 001). Dejte pozor na typ otázky s dvojitou škálou, kde jsou kódy dílčích otázek QCODE_SQCODE_1 a QCODE_SQCODE_1, a na typ otázky Pořadí, kde jsou kódy dílčích otázek QCODE_1, QCODE_2 ....
  • nosq_X - kde X je identifikátor řádku nebo sloupce. Vybrány jsou pouze dílčí otázky, které neodpovídají vzoru X. Vyhledávání se provádí v úplném identifikátoru kódu, poté se shoduje nosq_X a nezahrnuje dílčí otázky nX, X, Xn

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

Můžete je také použít k získání součtů řádků a sloupců. Řekněme, ž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' 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 rozšíření dílčích otázek. Pokud tedy vytvoříte otázku 'q1', je to 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 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 tailoringu.

Jediným upozorněním je, že když použijete funkci Zobrazit soubor logiky, zobrazí se rozvinutá hodnota 'self' a 'that'. Díky tomu uvidíte skutečnou rovnici, která bude vygenerována, a vy (i Expression Manager) můžete ověřit, že proměnné existují. Může to působit nepřehledně, protože můžete vidět velmi dlouhé rovnice. Pokud však otázku upravíte, uvidíte původní rovnici s použitím 'self' a/nebo 'that'.

Také mějte na paměti, že tyto proměnné byste neměli používat, pokud (a) chcete v rovnici výslovně pojmenovat každou použitou proměnnou, nebo (b) 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 hrozí, že získáte neočekávané výsledky.

Použití NAOK

NAOK --> „Not Applicable“ (NA) 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)).

Pokud do jakékoli rovnice vložíte proměnnou z otázky a tato otázka (nebo dílčí otázka) je skrytá kvůli podmínce, celá rovnice se zneplatní.

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

Bez NAOK: pokud je skrytá jedna otázka nebo jedna dílčí otázka, Expression Manager vždy vrátí prázdný řetězec, což odpovídá hodnotě false.

.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 za kód otázky .NAOK. Výjimkou je případ, kdy to potřebujete a víte, co děláte.

Další příklad a informace naleznete v části Přepsání kaskádových podmínek

Přístup k funkcím

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

Implementované funkce

V současnosti jsou k dispozici následující funkce:

Funkce Význam Syntaxe
abs Absolutní hodnota number abs(number)
acos Arkus kosinus number acos(number)
addslashes Escapovat řetězec 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), jde-li 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 Zobrazí čísla s čárkou jako oddělovačem desetinných míst, je-li to potřeba 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 (Updated in 3.0.2 ) if 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 čárkou string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) Vrátí seznam oddělený zadaným oddělovačem ('glue') s uvedenou vlastností otázky (retProp) z otázek v seznamu, které splňují kritérium (cmpProp op value) string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
log Logaritmus čísla o základu base, je-li zadán, jinak přirozený logaritmus. number log(number,base=e)
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í řádků před všechny konce řádků 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 quoted-printable na 8bitový řetězec string quoted_printable_decode(string)
quoted_printable_encode Převede 8bitový řetězec na řetězec 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 nahrazující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, vrátí 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, vrátí 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 Změní 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)

Funkce plánované nebo zvažované

Mezi další funkce, které jsou plánované (nebo zvažované), ale zatím nejsou implementovány, patří následující. Některé z nich slouží ke zpětné kompatibilitě s jiným nástrojem pro tvorbu průzkumů.

Syntaxe Význam Komentáře
e() vrací hodnotu e
formatDate(X,PAT) vrací řetězcovou hodnotu data X formátovanou podle vzoru formátu data Java PAT
formatNumber(X,PAT) vrací řetězcovou hodnotu čísla X formátovanou podle vzoru formátu čísla Java PAT
getAnsOption(X) Základní zásuvný modul ExpressionAnswerOptions
getAnsOption(X,Y) Základní zásuvný modul ExpressionAnswerOptions
getRelevance(X) vrací rovnici relevance otázky X
getStartTime() vrací datum odpovídající systémovému času zahájení dotazování
getType(X) vrací řetězcový název datového typu – např. *NA*, pokud isNA()
gotoFirst() přeskočí na první relevantní sadu otázek – narušuje běžný tok systému
gotoNext() přeskočí na další relevantní sadu otázek – narušuje běžný tok systému
gotoPrevious() přeskočí na předchozí relevantní sadu otázek – narušuje běžný tok systému
isAsked(X) vrací true, pokud odpověď není *NA*, *INVALID* ani *UNASKED*
isInvalid(X) vrací true, pokud je odpověď typu *INVALID*
isNA(X) vrací true, pokud je odpověď typu *NA*
isNotUnderstood(X) vrací true, pokud je odpověď typu *HUH*
isRefused(X) vrací true, pokud je odpověď typu *REFUSED*
isSpecial(X) vrací true, pokud je odpověď typu *UNASKED*, *NA*, *REFUSED*, *INVALID*, *UNKNOWN* nebo *HUH*
isUnknown(X) vrací true, pokud je odpověď typu *UNKNOWN*
jumpTo(X) přeskočí na skupinu obsahující pojmenovanou otázku – narušuje běžný tok systému
jumpToFirstUnasked() přeskočí na první nezodpovězenou otázku thus bypassing previous answered questions narušuje běžný tok systému
lastIndexOf(X,Y) vrací poslední index (od 0) řetězce Y v řetězci X. Pokud X neobsahuje Y, vrací -1
list(X,...) řetězec obsahující seznam kladných hodnot oddělených čárkami, přičemž poslední dvě jsou spojeny slovem „a“
mean(X,...) vrací průměr seznamu hodnot
numAnsOptions(X) vrací počet možností odpovědí, které má otázka X
orlist(X,...) řetězec obsahující seznam kladných hodnot oddělených čárkami, přičemž poslední dvě jsou spojeny slovem „nebo“
parseDate(X,PAT) vrací hodnotu data z řetězce X zpracovaného podle vzoru formátu data Java PAT
parseNumber(X,PAT) vrací číselnou hodnotu řetězce X zpracovaného podle vzoru formátu čísla Java PAT
showAllResponsesExcept( questionList,attributeList,attributeTitleList) questionList = seznam identifikátorů otázek oddělených znakem svislice; attributeList = seznam atributů oddělených znakem svislice (např. číslo otázky, název, text, typ – můžete tak určit, co se zobrazí); attributeTitleList = seznam záhlaví tabulky oddělených znakem svislice, aby bylo možné přehled lokalizovat.
showTheseResponses( questionList,attributeList,attributeTitleList) questionList = seznam identifikátorů otázek oddělených znakem svislice; attributeList = seznam atributů oddělených znakem svislice (např. číslo otázky, název, text, typ – můžete tak určit, co se zobrazí); attributeTitleList = seznam záhlaví tabulky oddělených znakem svislice, aby bylo možné přehled lokalizovat.

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

Aby mohl Expression Manager správně sestavit JavaScript pro stránku, musí 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 zajistil, že potřebná pole <input type='hidden' value='x'> existují a jsou vyplněna).

Kaskádové podmínky

Pokud je některá z proměnných irelevantní, bude irelevantní (false) celá rovnice. V následující tabulce například 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
== (nebo eq) a == b N/A 5 false
== (nebo eq) a == b N/A 0 false
== (nebo eq) a == b N/A N/A false
!= (nebo ne) a != b N/A 5 false
!= (nebo ne) a != b N/A N/A false
!= (nebo ne) a != b N/A 0 false
> (nebo gt) a > b N/A 5 false
>= (nebo ge) a >= b N/A 5 false
< (nebo lt) a < b N/A 5 false
<= (nebo 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
funkce sum(a,b,b) N/A 5 false
funkce max(a,b) N/A 5 false
funkce min(a,b) N/A 5 false
funkce implode(', ',a,b,a,b) N/A 5 false
funkce if(a,a,b) N/A 5 false
funkce is_empty(a) N/A false
funkce is_empty(a) 0 (nebo prázdné) true
funkce !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í. Mohli byste zkusit použít rovnici {sum(q1,q2,q3,...,qN)}. Ta se však interně převede 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 irelevantní, rovnice vždy vrátí false. V tomto případě bude sum() zobrazovat 0, dokud nebudou zodpovězeny všechny otázky.

Abyste to obešli, můžete ke každé proměnné přidat příponu „.NAOK“ (znamená, že Not Applicable je v pořádku). 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é irelevantní odpovědi tak budou ignorovány, ale nezneplatní 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í přípony .NAOK také umožňuje autorům navrhovat průzkumy s několika možnými cestami, které se později sbíhají do společných cest. Řekněme například, že respondent odpoví na průzkum způsobem, který je mimo běžný rozsah odpovědí. Autor může respondenta upozornit, že nemusí získat platné výsledky, a zeptat se ho, zda opravdu chce 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 byly počáteční odpovědi v běžném rozsahu NEBO zda respondent odpověděl Ano na otázku, která je relevantní pouze v případě, že odpověděl mimo běžný rozsah.

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

Zde je příklad mikro-přizpůsobení (kde Typ otázky == '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}, pro tento test jste příliš {if( (age<16),'young',if( (age>80),'old','middle-aged') ) }.
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 yesno {name}, uvedl(a) jste, že vám je {age} let a že máte dětí: {numKids}. Součet věku vašich prvních {min(numKids,5)} dětí je {sumage}

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 přímo na stránce.

Expression Manager tuto funkci zajišťuje tak, že každý výraz obalí pojmenovaným elementem <span>. Při každé změně hodnoty přepočítá výraz, který se má v tomto elementu <span> zobrazit, a znovu vykreslí zobrazení. Na jedné stránce můžete mít desítky, nebo dokonce stovky takto přizpůsobených výrazů a stránka je všechny překreslí jedním obnovením obrazovky.

Mapování funkcí LimeSurvey 1.91+ na Expression Manager

Stará funkce Nová funkce Komentáře
Podmínky Relevance Můžete používat velmi složité podmíněné rovnice a přistupovat k širšímu rozsahu proměnných
Hodnocení Rovnice Jakékoli skóre hodnocení lze přestrukturovat do rovnice. Tím je zajištěno, že se skóre zapíše do databáze, a také můžete na aktuální stránce sledovat dynamické změny hodnoty skóre
Náhrady Expression Manager Základní jádro přijme vstupní řetězec a vše ve složených závorkách považuje za výraz – zpracovává tak všechny historické typy náhrad. Aby nedošlo k narušení vloženého JavaScriptu, Expression Manager zpracovává obsah mezi složenými závorkami, pouze pokud (a) uvnitř složených závorek není žádná úvodní ani koncová mezera – např. {expr} je výraz, ale { expr}, {expr } a { expr } výrazy nejsou. Expression Manager také nezpracovává obsah uvnitř vlastních řetězců (např. {list('hi','there {braces}')} vygeneruje "hi there {braces}"). Ignoruje také escapované složené závorky (např. \{this is not an expression\})
Ověření Expression Manager Plán je převzít stávající atributy otázky min/max a nechat je zpracovat Expression Managerem. Hodnoty min/max tak mohou být samy výrazy

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 funkcemi:

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

Barva Ukázka Význam Nápověda Poznámky
světle hnědé pozadí Ukázka celá rovnice žádná Cokoli ve složených závorkách, co je rozpoznáno jako rovnice (tedy bez mezer na začátku a na konci), je zvýrazněno světle hnědým pozadím, aby se odlišilo od okolního textu.
tučný červený text Ukázka chyba vysvětlení chyby Může jít o neznámou proměnnou nebo chybu ve funkci apod. Průzkum může být zcela nefunkční, veřejným uživatelům se to však nezobrazuje.
modrý text Ukázka název funkce význam a povolená syntaxe Názvy funkcí, nebo věci, které by funkcemi měly být, protože za nimi následuje otevírací závorka, jsou zobrazeny tučným modrým textem. Nápověda zobrazuje význam a povolenou syntaxi funkce.
šedý text Ukázka řetězec žádná Řetězce v jednoduchých i dvojitých uvozovkách jsou zobrazeny šedým textem.
azurový text Ukázka proměnná nastavená na stejné stránce [název nebo kód SGQA]: otázka; hodnota; seznam odpovědí s kódy pro jednotlivé hodnoty Každá proměnná nastavená na stejné stránce jako aktuální otázka je zobrazena azurovým textem, což znamená, že ji lze aktualizovat v JavaScriptu. Nápověda zobrazuje její název, samotnou otázku a její současnou hodnotu (nebo nic, pokud není nastavena). Pokud typ otázky očekává odpovědi z výčtu hodnot, zobrazí se přiřazení kódů ke zobrazovaným hodnotám.
zelený text Ukázka proměnná nastavená na předchozí stránce [název nebo kód SGQA]: otázka; hodnota; seznam odpovědí s kódy pro jednotlivé hodnoty Každá proměnná nastavená na předchozí stránce je zobrazena tučným zeleným textem. Nápověda zobrazuje její název, samotnou otázku a její současnou hodnotu (nebo nic, pokud není nastavena). Pokud typ otázky očekává odpovědi z výčtu hodnot, zobrazí se přiřazení kódů ke zobrazovaným hodnotám.
tučný růžový text Ukázka proměnná nastavená na pozdější stránce obecně: na začátku průzkumu prázdná, ale může být vyplněna pomocí rejstříku nebo návratu zpět [název nebo kód SGQA]: otázka; hodnota; seznam odpovědí s kódy pro jednotlivé hodnoty Každá proměnná nastavená na další stránce je zobrazena tučným růžovým textem. Nápověda zobrazuje její název, samotnou otázku a její současnou hodnotu (nebo nic, pokud není nastavena). Pokud typ otázky očekává odpovědi z výčtu hodnot, zobrazí se přiřazení kódů ke zobrazovaným hodnotám.
tučný hnědý text Ukázka náhradní hodnota LimeSurvey hodnota Náhradní řetězce LimeSurvey (například {TOKEN:xxx}, {PRIVACY_MESSAGE}) jsou zobrazeny tučným hnědým textem.
červený text Ukázka operátor přiřazení (=) varovná zpráva Pokud použijete operátor přiřazení (=), bude 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 Ukázka interpunkce žádná Veškerá ostatní interpunkce uvnitř výrazu je zobrazena normálním černým textem.
text v červeném rámečku a bold red line surrounds the error syntaktická chyba popis chyby Všechny zjištěné syntaktické chyby jsou zobrazeny tak, že je chyba orámována červeným rámečkem. Nápověda 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 nečemu, co není proměnná, nebo použití nepodporované syntaxe. Systém detekce syntaktických chyb může u výrazu nahlásit pouze jednu chybu, i když jich je více; pokud je však zjištěna jakákoli chyba, bude zobrazena alespoň jedna.

Další četba

Ukázkové průzkumy Expression Manageru

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

Příklady krok za krokem

Statistické funkce Expression Manageru

Reference pro vývojáře

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