ExpressionScript példák
From LimeSurvey Manual
Struktúra
A cikk első része leírja, hogy mire használhatók a kifejezések, és hol találhat/adhat hozzá kifejezést. A második rész példákat mutat be az Expression használatára.
Kifejezések kategóriái
A LimeSurvey a következő célokra használja a kifejezéseket:
Relevancia
Cél: kérdéscsoportok/kérdések elrejtése
A relevancia határozza meg, hogy egy kérdéscsoport vagy kérdés megjelenjen-e vagy rejtve legyen. Ha a kifejezés eredménye "igaz" (azaz 1), akkor az elem megjelenik. Ellenkező esetben (ha a kifejezés eredménye "false" (azaz 0)), az elem el lesz rejtve.
Típus | Megjelenít/rejti | Hol található | Képernyőkép |
---|---|---|---|
Kérdéscsoport Relevancia | Kérdéscsoport | Kérdéscsoport létrehozása/szerkesztése -> "Relevanciaegyenlet:" | 30px |
Kérdés Relevancia | question | Kérdés létrehozása/szerkesztése -> "Relevanciaegyenlet:" | File:Question Relevance equation screenshot.png |
Alkérdés Relevancia | Subquestion | Alkérdések szerkesztése -> "Relevanciaegyenlet:" | 30px |
Érvényesítés
Cél: A kérdések/alkérdések/válaszok bemenetének/műveleteinek ellenőrzése
Az érvényesítés szabályozza, hogy a válaszadó kérdéshez vagy művelethez való hozzájárulása érvényes-e vagy sem. Ha a kifejezés eredménye "igaz" (azaz 1), akkor a "jó" osztály kerül alkalmazásra az elemre és az érvényesítési üzenetre. Ellenkező esetben, ha a kifejezés eredménye "false" (azaz 0), akkor az "error" osztály kerül alkalmazásra az elemre és az érvényesítési üzenetre. Ezekhez az osztályokhoz stílust deklarálhat a 'template.css fájlban.
Szövegkimenet
Célok: (Csinálj valamit) és írj ki szöveget
Egy kifejezés használható szöveg kiírásához. Például tesztelhet vagy kiszámíthat valamit, és megadhatja a kimenetet a teszt vagy számítás eredményétől függően. Használható a Kifejezés használata előtt használt kérdés szövegének, válaszainak, kérdéstípusainak, ... beszúrására is. A szövegkimenet mindenhol használható, ahol szöveg jelenik meg, és mindenféle eredményt visszaadhat.
Use Case | Leírás |
---|---|
Mikroszabás | Szöveg módosítása, pl.: "Mr" vagy "Mrs" a korábban feltett nemi kérdéstől függően |
Számítás | Számítson ki egy értéket, és írja ki, pl.: "Család jövedelme xxx" |
Referencia | Szöveg beszúrása egy elemből, pl. "A neved xxx. Hány éves vagy?" |
A válaszok tárolása
Célok: (Csinálj valamit,) (írj ki egy kis szöveget) és tárolj valamit az adatbázisban
A Az egyenlet kérdéstípusa használható valaminek az adatbázisban való tárolására. Egy kifejezéssel csinálhatsz valamit, megjelenítheted az Egyenletkérdést (ami hasonló a szöveges megjelenítés), és a kifejezés eredményét eltárolhatod az adatbázisban. A választ a választáblázatban tárolja. Ezután az eredmény felhasználható a statisztikai szolgáltatáson belül, vagy importálható a LimeSurvey exportálási funkciója által biztosított formátumok valamelyikébe.
Példák kifejezésekre
Szúrjon be egy korábbi kérdésre adott választ
Cél | Egy korábbi kérdés válaszának beszúrása |
Típus | Hivatkozás |
Példa | Első kérdés (kérdéskód " Q00"): Melyik városban élsz? Második kérdés (kérdéskód "Q01") Mióta él a CITY-ben? Teendő: A második kérdés "VÁROS" helyett az első kérdés válaszát kell használni. |
Kifejezés | {QOO} |
Leírás | A Q00-ban megadott válasz a második kérdés Q00 mezőjét helyettesíti |
Lépések | Kettes kérdés létrehozása/szerkesztése Illessze be a "Mennyi ideig élt {QOO} (év)" szöveggel? a kérdés szövegmezőjébe |
Fájl:Egyszerű kifejezés városnév.png |
Rejtett egyenletkérdés használata a válasz automatikus kitöltéséhez
Probléma: Képzeld el, hogy két kérdése van: Q1 és Q2. Q1 megkérdezi a válaszadók életkorát. A Q2 három csoportra osztja a válaszadókat: életkor 20 év alatti, 20 év feletti, 20 év feletti. Tehát a Q2-nek az "1", "2", "3" értékeket kell használnia, amelyek megfelelnek a a fenti feltételeket. Nem szabad megfeledkeznünk a Q2 láthatatlanná tételéről sem (a kérdés nem jelenik meg a kérdőívben, hanem az értékek a választáblázaton belüli "háttérfolyamat"-on keresztül).
Az adatbázis kitöltéséhez az Egyenlet kérdéstípus használatával:
- Először hozzon létre egy kérdést Q1 kóddal numerikus beviteli kérdésként.
- Ezután hozzon létre egy másik kérdést Q2 kóddal egyenletkérdésként .
- A Q2:
- "Megjelenítési beállítások" lapfejezetében állítsa a "Mindig elrejteni ezt a kérdést" mezőt "Be" értékre
- írja be az "Egyenlet" mezőbe a következő kifejezést:
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}
Összefoglaló oldal létrehozása helyőrzők használatával
Ez az oktatóanyag bemutatja, hogyan hozhat létre áttekintést a felmérés végén, felsorolva az összes kérdést és választ a ExpressionScript helyőrzők segítségével. Azt is bemutatja, hogyan korlátozza az ilyen áttekintést a megválaszolt kérdésekre.
Példánk innen tölthető le: Survey placeholders survey example.
'Az itt használt kérdéstípusok:'
1. Egyválasztós kérdések / egyetlen szöveges/numerikus kérdések
- Lista (legördülő)
- Lista (rádió) [L]
- Igen/Nem [I]
- Hosszú szabad szöveg [T ]
- Rövid szabad szöveg [S]
- Numerikus bevitel [N]
- Egyenlet [*]
'2. Kérdés alkérdésekkel
- Több rövid szöveg [Q]
- Többszörös választás [M]
- Tömb [F]
- Tömb (Igen/Nem/Bizonytalan) [C]
- Tömb (10 pontos választás) [B]
'3. Kérdések 2 skálával
- Kettős skálájú tömb [1]
'4. Kérdések X és Y skálákkal
- Tömb (számok) [:]
'5. Maszk kérdések
- Szöveg megjelenítése [X]
Ebben az egyszerű példában az áttekintésünk egy egyszerű lista lesz:
- Kérdés szövege: Felhasználó válasza
Egyválasztós kérdések / egyetlen szöveges/numerikus kérdések
A Limesurvey az összes ilyen típusú kérdésre egyetlen választ tárol:
- Lista (legördülő)
- Lista (rádió)
- Lista megjegyzéssel
- 5 pontos választás
- Igen/Nem
- Rövid szabad szöveg
- Hosszú szabad szöveg
- Hatalmas szabad szöveg
- Numerikus bevitel
- Egyenlet
- Dátum
- Nem
Feltételezve, hogy a kérdés kérdéskódja q1, akkor a kérdés szövegére hivatkozhatunk és válaszolhatunk:
- {q1.question}: {q1.shown}
Példa:
- Hány éves vagy?: 25
Ha ellenőrizni szeretné, hogy a kérdés megválaszolásra került-e, a kimenet köré írhat egy IF utasítást:
{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}
Ez a következőre "fordítható": HA a q1 kódú kérdés nem üres, "- " ÉS a kérdés szövege ÉS ": " ÉS a válaszszöveg (a join() függvény új karakterláncként kapcsolja össze az elemeket; ELSE: nem ad ki semmit (" " üres karakterláncot jelent).
Kérdés alkérdésekkel
A LimeSurvey az összes ilyen kérdéstípushoz alkérdéseket használ:
- Több rövid szöveg
- Több választási lehetőség
- Többszörös választási lehetőség megjegyzésekkel
- Tömb
- Tömb (5 pontos választás)
- Tömb (10 pontos választás)
- Tömb (Igen /Nem/Bizonytalan)
- Tömb (Növekedés/Azonos/Csökkentés)
- Oszloponkénti tömb
Feltételezve, hogy a kérdés kérdéskódja q2, és az alkérdések számozása SQ001, SQ002, (az automatikus számozást a LimeSurvey végzi), akkor a kérdés szövegére és a válaszadásra a következő módon hivatkozhatunk:
- {q2_SQ001.question}: {q2_SQ001.shown}
- {q2_SQ002.question}: {q2_SQ002.shown}
A feleletválasztós kérdéseknél érdemes most a bejelölt részkérdés szövegét megjeleníteni, de minden kiválasztott opciónál Y-t kell mutatni:
- {q2_SQ001.question}: {q2_SQ001}
- {q2_SQ002.question}: {q2_SQ002}
...
Vegye figyelembe, hogy jelenleg nem lehetséges az alkérdéseket tartalmazó kérdések kérdésszövege kiadni, lásd ez a szolgáltatáskérés.
1. példa (feltéve, hogy a kérdés típusa feleletválasztós)
- Ismeri ezeket az autómárkákat?
-- Mercedes: Y
-- Audi: N
-- Volvo: Y
Ha csak a bejelölt elemeket szeretné kiadni, akkor a kimenet köré helyezhet egy IF utasítást, és ellenőrizze a jelölőnégyzet értékét:
{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }
Használja a listifop funkciót, ha csak a kiválasztott elemeket szeretné megjeleníteni, pl.: Mercedes, Volvo
{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }
Ahol az.q2 kiterjeszti a q2 összes részkérdését. További részletekért lásd: self, this and that.
2. példa (feltételezve, hogy a kérdés típusa Array (10 pontos választás))
- Kérjük, értékelje az alábbi autómárkák minőségét egy 1=nagyon rossz és 10=nagyon jó közötti skálán?
-- Mercedes: 7
-- Audi: 9
-- Volvo: 9
Ha csak minősített tételeket szeretne kiadni, akkor a kimenet köré írhat egy IF utasítást, és ellenőrizze, hogy az aktuális alkérdésre a következő használatával válaszolt-e:
{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }
Használja a listifop funkciót, ha például csak nyolcnál nagyobb kiválasztott elemek listáját szeretné megjeleníteni, pl.: Audi / Volvo
{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }
Két skálájú kérdés
Tegyük fel, hogy a következő kódok használatban vannak:
- Kérdéskód: q4
- Kérdéskódok: SQ001, SQ002, ...
- Válaszkódok 1-es skála: A1, A2, ...
- A válaszkódok skála 2: B1, B2, ...
Adjuk ki mindkét skála és az első két részkérdés eredményeit:
- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}
- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}
Az alkérdés szövegének kiadásához hozzá kell adni a skálaazonosítót a helyőrzőhöz (bár a szövegek mindkét skála esetében azonosak). Tehát a {q4_SQ001.question} helyett a {q4_SQ001_0.question} vagy a {q4_SQ001_1.question} kifejezést kell használnunk.
Ha csak legalább egy választ tartalmazó alkérdések eredményeit szeretné exportálni/megjeleníteni, használja ezt a szintaxist minden alkérdésnél:
{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}
Kérdés X és Y skálával
Ez vonatkozik minden olyan mátrixkérdésre, amely minden cellára választ ad (nem csak minden sorra, ahogyan korábban látható):
- Tömbszövegek
- Tömbszámok
Felhasznált feltételezett kódok:
- Kérdéskód: q5
- Alkérdési kódok: SQ001, SQ002, ...
- Válaszkódok: A1, A2, ...
Ha egy adott oszlopból egy bizonyos alkérdés eredményére szeretne hivatkozni, akkor a QuestionCode-ot kell használnia. '_' . SubQuestionCode. '_' . Válaszkód. Példa a harmadik részkérdés és a második oszlop válaszára való hivatkozásra: q5_SQ003_A2.
Adjuk ki az első két részkérdés 1-3. oszlopának eredményeit:
- {q5_SQ001_A1.question}: {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown}
- {q5_SQ002_A1.question}: {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown}
Mivel ezeknél a kérdéstípusoknál minden cella (X tengely és Y tengely kombinációja) egy válaszlehetőséget jelent, minden cellánál el kell végezni a meglévő adatok tesztelését. Példa:
{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}
Template:Megjegyzés kifejezést kell használnunk.
Kérdés elrejtése, ha az előző kérdésre adott válasz üres
Cél | Kérdés elrejtése, ha az előző kérdésre adott válasz üres |
Típus | Kérdés relevanciája |
Példa | Kérdés az egyik: kérdéskód "név", kérdés szövege "Mi a neved?" Második kérdés: kérdés szövege "{name}, hány éves vagy?" Teendő: Ha az első kérdés szövegmezője üres! üresnek számít. A "!" tagadja az eredményt. Tehát ha a változó nem üres, a kifejezés igaz lesz, és megjelenik a kérdés |
Lépések | Kettes kérdés létrehozása/szerkesztése Szúrja be az "!is_empty(name)" értéket a "Relevanciaegyenlet:" |
Mintafájlba | Hide_question_if_empty_question_group.zipN |
A kérdéscsoport elrejtése, ha az előző kérdésre adott válasz igen vagy nem
Cél | Kérdéscsoport elrejtése, ha az előző kérdésre adott válasz igen vagy nem |
Típus | Kérdéscsoport Relevancia |
Példa | Első oldal, első kérdéscsoport, első kérdés: kérdéskód "PET", kérdés szövege "Van házi kedvence?" -Igen nem Második oldal, 2. kérdéscsoport: Cím "Kisállatairól" Teendő: A második kérdéscsoport megjelenítése/elrejtése, ha az első kérdés válasza Igen/Nem |
Kifejezés | PET == "I" |
Leírás | PET a kérdés kódja, amelyre a választ ellenőrizni szeretné. Ha nem használ utótagot, az EM a „Qcode.code” kódot fogja használni. Tehát összehasonlítja a PET-kérdés válaszkódját az "Y" értékkel. Ha a résztvevő "Igen" választ ad, a kifejezés igaz, és megjelenik a "Kisállatairól" kérdéscsoport. |
Lépések | Kettes kérdéscsoport létrehozása/szerkesztése Illessze be a "PET == "Y"" értéket a "Relevanciaegyenlet:" |
Mintafájl | Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip |
Több válasz beviteli kérdésmező értékének megjelenítése
Cél | Több válasz beviteli kérdésmező értékének megjelenítése |
Típus | Referencia |
Példa | Első kérdés : kérdéskód "AskChildAge", kérdés szövege "Hány évesek a gyermekei?". Alkérdések kódjai -Gyermek1 -Gyermek2 -Child3 - ChildXXX Második kérdés: kérdés kódja "ReportChildAge" kérdés szövege "Az első gyermekedről: - A GYERMEK1 1. ÉRTÉK." |
Kifejezés | {Kérdezzen gyermekkor_gyermek1.kérdés}, {Kérdezzen gyermekkor_1.érték} |
Leírás | Egy részkérdés értékét szeretné használni egy következő kérdésben. A részkérdés értékét ezzel a kifejezéssel érheti el: QcodeQuestion_QcodeSubquestion.value |
Steps | A második kérdés létrehozása/szerkesztése Illessze be ezt a szöveget a leírásba: "Az első gyermekéről: - A {AskChildAge_Child1.question} a következő: {AskChildAge_Child1.value}." |
Mintafájl | put_question_field. zip |
A "Tömb (számok) jelölőnégyzet" kérdéshez soronként bejelölt négyzetek számának érvényesítése
Cél | A soronként bejelölt négyzetek számának érvényesítése |
Típus | Érvényesítés |
Példa | " típusú kérdés Tömbszámok (Checkbox Layout)" |
Kifejezés | összeg(...) |
Leírás | (összeg(Teszt_A_1, Teszt_A_2, Teszt_A_3, Teszt_A_4, Teszt_A_5) <= X) meghatározza, hogy az A sorban legalább X jelölőnégyzet be van-e jelölve. Ha mindhárom sort (A, B, C) ellenőrizni szeretné, a kifejezést az "&&" használatával kapcsolhatja össze: (sum(Teszt_A_1, Teszt_A_2, Teszt_A_3, Teszt_A_4, Teszt_A_5) <= X) && (összeg(Teszt_B_1, Teszt_B_2, Teszt_B_3, Teszt_B_4, Teszt_B_5) <= X) && (sum(Teszt_C_1, Teszt_C_2, Teszt_C_3, Teszt_C_4, Teszt_C_5) <= X) |
Lépések | Tömbszámok (Checkbox Layout) típusú kérdés létrehozása/szerkesztése. Illessze be a fenti kifejezést a "Kérdésérvényesítési egyenlet" mezőbe a speciális kérdésbeállításoknál (lehet, hogy módosítania kell a változók elnevezését!). |
Mintafájl | Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss |
Két dátum közötti különbség kiszámítása
Cél | Két dátum közötti különbség kiszámítása |
Típus | Relevancia / Egyenlet kérdéstípusa / Érvényesítés |
Példa | Első kérdés (dátum/idő, kód: DOB): Mi a születési dátuma? Második kérdés (dátum/idő, kód: datetoday): Mi a dátum ma? Harmadik kérdés (kazán): Ön XXXX napos. Teendő: Számolja ki és jelenítse meg az 1. kérdésben megadott dátum és a 2. kérdés között eltelt napok számát. |
Kifejezés | {(strtotime(datetoday)-strtotime(DOB))/60/60 /24} |
Leírás | Az strtotime kiszámítja, hogy 1970. január 1. és az adott dátum között hány másodperc van. A fenti kifejezés a két megadott dátum közötti másodpercek számát számítja ki. A "/60/60/24" kifejezés csak a napok számát számítja ki a másodpercek számából. A "datetoday" kérése helyett használhatja a strtotime('now') vagy egyszerűen a time() függvényt is, amely közvetlenül visszaadja az 1970 januárjától máig tartó másodpercek számát (azaz a felmérés időpontját). Így gyorsan megtudhatja egy személy életkorát években a {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} egyenlettel. Minden ilyen esetben kritikus a dátum megadása. megfelelő formátumban, különben az strtotime() függvény nem fog megfelelően működni. |
Lépések | Hozzon létre két dátumra vonatkozó kérdést (a születési dátumhoz és a mai dátumhoz) és egy általános kérdést. A kérdésfelirat kérdésszövegében: "{datetoday} napon {(strtotime(today)-strtotime(dob))/60/60/24} napos voltál." Megjegyzés: Az strtotime függvény SOK, de nem minden dátumformátummal működik. Ha problémákba ütközik, állítsa be a felmérés dátumformátumát hh/nn/éééé vagy éééé-hh-nn vagy nn.hh.yyyy" |
Mintafájl | Date_difference.zip |
Fájl:Date_difference_example.png |
ExpressionScript használata értékelésekhez
Íme egy másik példa az ExpressionScript használatára Tömb típusú kérdések és értékelések:</ br>
Tegyük fel, hogy 2 tömbkérdése van, és a számítási adatok eredményét szeretné elmenteni az adatbázisába. Valójában egyszerű, létre kell hoznia és tesztelnie kell a tömböket, és be kell küldenie egy álválaszt, hogy megbizonyosodjon arról, hogy működik-e, és az elkészült oldalon megadja az eredményeket.
Megvalósítási részletek:
- adjon hozzá egy kérdéstípusú egyenletet
- adja hozzá a következő sort, feltételezve, hogy Q1 a tömb kérdéskódja, míg Q2 a második:
{összeg(Q1_SQ001.érték,Q2_SQ001.érték)}
Vegye figyelembe, hogy az SQ001 minden alkérdés alapértelmezett kódja. Ha megváltoztatja az alkérdés kódját, akkor ennek megfelelően módosítsa a fenti egyenletet.
Az em_validation_q használata a tömbben
A question validation equation segítségével bármilyen feltétellel vezérelhet egy tömböt.
Megvalósítási részletek:
- az első tömbhöz : egyválasztású tömb
- A kérdés kódja: ARRAY
- Az alkérdés kódja: SQ01,SQ02,SQ03 és SQ04
** Frissítse az egész kérdés érvényesítési egyenletét, és tegye
!is_empty(ARRAY_SQ01) és !is_empty(ARRAY_SQ03)
- a második tömbhöz : szövegtömb
- A kérdés kódja ARRAYTEXT
- Az Y tengely kódjának alkérdése: SY01, SY02, SY03 és SY04
- Frissítse a teljes kérdést érvényesítési egyenlet és tedd
count(self.sq_SY01 >= 1) és count(self.sq_SY03 >= 3)