Mga halimbawa ng ExpressionScript
From LimeSurvey Manual
Istruktura
Inilalarawan ng unang bahagi ng artikulo kung para saan magagamit ang mga Expression at kung saan makikita/idadagdag ang isang Expression. Ang ikalawang bahagi ay nagbibigay ng mga halimbawa kung paano gamitin ang Expression.
Mga kategorya ng Expression
Ginagamit ng LimeSurvey ang mga Expression para sa mga sumusunod na layunin:
Relevance
Layunin: Pagtatago ng mga pangkat ng tanong/mga tanong
Kinokontrol ng relevance kung ipapakita o itatago ang isang pangkat ng tanong o tanong. Kung ang resulta ng Expression ay "true" (ibig sabihin, 1), ipapakita ang elemento. Kung hindi (kung ang resulta ng Expression ay "false" (ibig sabihin, 0)), itatago ang elemento.
Pag-validate
Layunin: I-validate ang input/mga aksyon sa mga tanong/subquestion/sagot
Kinokontrol ng pag-validate kung balido o hindi ang input ng respondent sa isang tanong o aksyon. Kung ang resulta ng expression ay "true" (ibig sabihin, 1), ilalapat ang class na "good" sa elemento at sa mensahe ng pag-validate. Kung hindi, kung ang resulta ng expression ay "false" (ibig sabihin, 0)), ilalapat ang class na "error" sa elemento at sa mensahe ng pag-validate. Maaari kayong magtakda ng style para sa mga class na ito sa template.css.
Text output
Mga layunin: (Gumawa ng isang bagay at) magsulat ng ilang text
Maaaring gamitin ang isang expression upang magsulat ng text. Halimbawa, maaari kayong mag-test o mag-compute ng isang bagay at tukuyin ang output depende sa resulta ng test o computation. Magagamit din ito upang ipasok ang text ng tanong, mga sagot, mga uri ng tanong, ... ng isang tanong na ginamit bago ang Expression. Magagamit ang text output saanman may ipinapakitang text at maaari itong magbalik ng anumang uri ng resulta.
| Gamit | Paglalarawan |
|---|---|
| Micro tailoring | Isaayos ang isang text, hal., isulat ang "Mr" o "Mrs" depende sa naunang tanong tungkol sa kasarian |
| Kalkulasyon | Mag-compute ng isang value at isulat ito, hal., "Ang kita ng inyong pamilya ay xxx" |
| Reference | Magpasok ng text mula sa isang elemento, hal., "Ang pangalan mo ay xxx. Ilang taon ka na?" |
Pag-iimbak ng mga sagot
Mga layunin: (Gumawa ng isang bagay,) (magsulat ng ilang text) at mag-imbak ng isang bagay sa database
Magagamit ang uri ng tanong na Equation upang mag-imbak ng isang bagay sa database. Maaari kayong gumawa ng isang bagay gamit ang Expression, ipakita ang tanong na Equation (na katulad ng display ng text) at i-imbak ang resulta ng Expression sa database. Iniimbak nito ang sagot sa talahanayan ng mga response. Pagkatapos, magagamit ang resulta sa tampok na istatistika o maaari rin itong i-import sa isa sa mga format na ibinibigay ng export functionality ng LimeSurvey.
Mga halimbawa para sa mga Expression
Magpasok ng sagot mula sa nakaraang tanong
Paggamit ng nakatagong tanong na equation upang awtomatikong punan ang sagot
Problema: Isipin na mayroon kayong dalawang tanong, Q1 at Q2. Tinatanong ng Q1 ang edad ng mga respondent. Hinahati ng Q2 ang mga respondent sa tatlong grupo: ang edad ay wala pang 20 taon, ang edad ay 20, ang edad ay higit sa 20. Kaya, dapat gamitin ng Q2 ang mga value na "1", "2", "3", na tumutugma sa mga kondisyon sa itaas. Huwag din nating kalimutang gawing hindi nakikita ang Q2 (hindi ipapakita ang tanong sa survey, ngunit ang mga value ay mapupunta sa talahanayan ng mga response sa pamamagitan ng "background process").
Upang punan ang database gamit ang uri ng tanong na Equation:
- Una, gumawa ng tanong na may code na Q1 bilang numerical input na tanong.
- Pagkatapos, gumawa ng isa pang tanong na may code na Q2 bilang equation na tanong.
- Sa seksyon ng tab na "Display settings" ng Q2:
- itakda ang field na "Palaging itago ang tanong na ito" sa "Naka-on"
- i-type sa field na "Equation" ang expression:
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}
Gumawa ng pahina ng buod gamit ang mga placeholder
Ipinapakita ng tutorial na ito kung paano kayo makakagawa ng overview sa dulo ng survey, na naglilista ng lahat ng tanong at sagot sa pamamagitan ng mga placeholder ng ExpressionScript. Ipinapakita rin nito kung paano limitahan ang gayong overview sa mga natugunang tanong lamang.
Maaaring i-download ang aming halimbawa mula rito: Halimbawang survey para sa mga placeholder ng survey.
Mga uri ng tanong na ginamit dito:
1. Mga tanong na may isang opsyon / mga tanong na may isang text/numeric na sagot
- Listahan (Drop-down)
- Listahan (Radio) [L]
- Oo/Hindi [Y]
- Mahabang free text [T]
- Maikling free text [S]
- Numerical input [N]
- Equation [*]
2. Tanong na may mga subquestion
- Maraming maikling text [Q]
- Multiple choice [M]
- Array [F]
- Array (Oo/Hindi/Hindi sigurado) [C]
- Array (opsyong may 10 point) [B]
3. Mga tanong na may 2 scale
- Dual scale ng array [1]
4. Mga tanong na may X at Y na scale
- Array (Numero) [:]
5. Mga mask question
- Display ng text [X]
Sa simpleng halimbawang ito, ang aming overview ay isang simpleng listahan na may:
- Text ng tanong: Sagot ng user
Mga tanong na may isang opsyon / mga tanong na may isang text/numeric na sagot
Para sa lahat ng uri ng tanong na ito, mag-iimbak ang LimeSurvey ng isang tugon:
- Listahan (Drop-down)
- Listahan (Radio)
- Listahang may komento
- Opsyong may 5 point
- Oo/Hindi
- Maikling free text
- Mahabang free text
- Malaking free text
- Numerical input
- Equation
- Petsa
- Kasarian
Kung ang code ng tanong ay q1, maaari nating i-reference ang text ng tanong at ang sagot gamit ang:
- {q1.question}: {q1.shown}
Halimbawa:
- Ilang taon ka na?: 25
Kung nais mong tiyakin kung nasagot ang tanong na iyon, maaari kang maglagay ng IF statement sa paligid ng iyong output:
{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}
Ang ibig sabihin nito: KUNG hindi walang laman ang tanong na may code na q1, i-output ang "- " AT ang text ng tanong AT ": " AT ang text ng sagot (pinagsasama ng join() function ang mga elemento bilang isang bagong string); KUNG HINDI: walang i-output (ang "" ay nangangahulugang walang lamang string).
Tanong na may mga subquestion
Para sa lahat ng uri ng tanong na ito, gumagamit ang LimeSurvey ng mga subquestion:
- Maraming maikling text
- Multiple choice
- Multiple choice na may komento
- Array
- Array (opsyong may 5 point)
- Array (opsyong may 10 point)
- Array (Oo/Hindi/Hindi sigurado)
- Array (Dagdagan/Walang pinagbago/Bawasan)
- Array ayon sa column
Kung ang code ng tanong ay q2 at ang mga subquestion ay may numerong SQ001, SQ002, (awtomatikong pagnunumero ng LimeSurvey), maaari nating i-reference ang text ng tanong at ang sagot gamit ang:
- {q2_SQ001.question}: {q2_SQ001.shown}
- {q2_SQ002.question}: {q2_SQ002.shown}
Para sa mga tanong na multiple choice, mas makabubuting huwag ipakita ang text ng na-tick na subquestion kundi magpakita ng Y para sa bawat napiling opsyon:
- {q2_SQ001.question}: {q2_SQ001}
- {q2_SQ002.question}: {q2_SQ002}
...
Tandaan na sa kasalukuyan, hindi pa posibleng i-output ang text ng tanong ng mga tanong na may mga subquestion, tingnan ang feature request na ito.
Halimbawa 1 (ipagpalagay na ang uri ng tanong ay multiple choice)
- Kilala mo ba ang mga brand ng kotse na ito?
-- Mercedes: Y
-- Audi: N
-- Volvo: Y
Kung nais mong i-output lamang ang mga napiling item, maaari kang maglagay ng IF statement sa paligid ng iyong output at suriin ang halaga ng checkbox:
{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }
Gamitin ang function na listifop kung nais mong mag-output ng listahan ng mga napiling item lamang, hal.: Mercedes, Volvo
{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }
Kung saan ang that.q2 ay lumalawak sa lahat ng subquestion ng q2. Tingnan ang self, this at that para sa karagdagang detalye.
Halimbawa 2 (ipagpalagay na ang uri ng tanong ay Array (opsyong may 10 point))
- Pakibigyan ng rating ang kalidad ng mga brand ng kotse sa ibaba sa scale na 1=napakasama hanggang 10=napakahusay?
-- Mercedes: 7
-- Audi: 9
-- Volvo: 9
Kung nais mong i-output lamang ang mga item na may rating, maaari kang maglagay ng IF statement sa paligid ng iyong output at suriin kung nasagot ang kasalukuyang subquestion gamit ang:
{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }
Gamitin ang function na listifop kung, halimbawa, nais mong mag-output ng listahan ng mga napiling item na mas malaki sa walo, hal.: Audi / Volvo
{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }
Tanong na may dalawang scale
Ipagpalagay nating ginagamit ang mga sumusunod na code:
- Code ng tanong: q4
- Mga code ng subquestion: SQ001, SQ002, ...
- Mga code ng sagot sa scale 1: A1, A2, ...
- Mga code ng sagot sa scale 2: B1, B2, ...
Halimbawa ng pagtukoy sa sagot ng ikatlong subquestion at ikalawang scale: q4_SQ003_1 - Tanong 4, subquestion 3, ikalawang scale.
I-output natin ang mga resulta para sa parehong scale at sa unang dalawang subquestion:
- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}
- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}
Upang i-output ang text ng subquestion, kailangan mong idagdag ang scale ID sa placeholder (bagaman pareho ang text para sa dalawang scale). Kaya sa halip na {q4_SQ001.question}, kailangan nating gamitin ang {q4_SQ001_0.question} o {q4_SQ001_1.question}.
Kung nais mong i-export/ipakita ang mga resulta ng mga subquestion na may kahit isang sagot lamang, gamitin ang syntax na ito para sa bawat subquestion:
{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}
Tanong na may X at Y na scale
Naaangkop ito sa lahat ng matrix na tanong na nagpapahintulot ng sagot sa bawat cell (hindi lamang sa bawat row gaya ng ipinakita kanina):
- Array Texts
- Array Numbers
Mga code na ipinapalagay:
- Code ng tanong: q5
- Mga code ng subquestion: SQ001, SQ002, ...
- Mga code ng sagot: A1, A2, ...
Para tukuyin ang resulta ng isang partikular na subquestion mula sa isang partikular na column, kailangan mong gamitin ang QuestionCode . '_' . SubQuestionCode . '_' . AnswerCode. Halimbawa para tukuyin ang sagot ng ikatlong subquestion at ikalawang column: q5_SQ003_A2.
I-output natin ang mga resulta para sa column 1-3 ng unang dalawang subquestion:
- {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}
Dahil sa mga uri ng tanong na ito, ang bawat cell (kombinasyon ng X axis at Y axis) ay katumbas ng isang opsyon sa sagot, kailangang gawin ang pagsusuri para sa umiiral na data sa bawat cell. Halimbawa:
{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}
Itago ang tanong kung walang laman ang sagot mula sa nakaraang tanong
| Layunin | Itago ang tanong kung walang laman ang sagot mula sa nakaraang tanong |
| Uri | Relevance ng tanong |
| Halimbawa | Unang tanong: code ng tanong "name", text ng tanong "Ano ang pangalan mo?" Ikalawang tanong: text ng tanong "{name}, ilang taon ka na?" Gagawin: Itago ang ikalawang tanong kung walang laman ang textfield ng unang tanong |
| Expression | !is_empty(name) |
| Paglalarawan | Tinutukoy ng is_empty() kung ang isang variable ay itinuturing na walang laman. Binabaligtad ng "!" ang resulta. Kaya kung hindi walang laman ang variable, magiging true ang Expression at ipapakita ang tanong |
| Mga hakbang | Gumawa/i-edit ang ikalawang tanong Ilagay ang "!is_empty(name)" sa "Relevance equation:" |
| Sample na file | Hide_question_if_empty_question_group.zip |
![]()
| |
Itago ang pangkat ng tanong kung Oo o Hindi ang sagot mula sa nakaraang tanong
| Layunin | Itago ang pangkat ng tanong kung Oo o Hindi ang sagot mula sa nakaraang tanong |
| Uri | Relevance ng pangkat ng tanong |
| Halimbawa | Unang pahina, Unang pangkat ng tanong, Unang tanong: code ng tanong "PET", text ng tanong "May alaga ka bang hayop?" -Oo -Hindi Ikalawang pahina, Ikalawang pangkat ng tanong: Pamagat "Tungkol sa iyong alagang hayop" Gagawin: Ipakita/Itago ang ikalawang pangkat ng tanong depende kung Oo/Hindi ang sagot sa unang tanong |
| Expression | PET == "Y" |
| Paglalarawan | Ang PET ay ang code ng tanong na gusto mong suriin ang sagot. Kung hindi ka gagamit ng suffix, gagamitin ng EM ang "Qcode.code". Kaya ikinukumpara mo ang code ng sagot mula sa tanong na PET sa halagang "Y". Kung sumagot ng "Oo" ang kalahok, magiging true ang Expression at ipapakita ang pangkat ng tanong na "Tungkol sa iyong alagang hayop". |
| Mga hakbang | Gumawa/i-edit ang ikalawang pangkat ng tanong Ilagay ang "PET == "Y"" sa "Relevance equation:" |
| Sample na file | Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip |
![]()
| |
Ipakita ang halaga ng field ng tanong na may maraming input ng sagot
| Layunin | Ipakita ang halaga ng field ng tanong na may maraming input ng sagot |
| Uri | Reference |
| Halimbawa | Unang tanong: code ng tanong "AskChildAge", text ng tanong "Ilang taon na ang mga anak mo?". Mga code ng subquestion -Child1 -Child2 -Child3 - ChildXXX Ikalawang tanong: code ng tanong "ReportChildAge" text ng tanong "Tungkol sa iyong unang anak: - CHILD1 ay AGE1." |
| Expression | {AskChildAge_Child1.question}, {AskChildAge_Child1.value} |
| Paglalarawan | Gusto mong gamitin ang halaga ng isang subquestion sa susunod na tanong. Maa-access mo ang halaga ng subquestion gamit ang ganitong uri ng expression: QcodeQuestion_QcodeSubquestion.value |
| Mga hakbang | Gumawa/i-edit ang ikalawang tanong Ilagay ang text na ito sa paglalarawan: "Tungkol sa iyong unang anak: - {AskChildAge_Child1.question} ay {AskChildAge_Child1.value}." |
| Sample na file | Display_value_of_a_multiple_answer_input_question_field.zip |
| |
I-validate ang bilang ng mga kahong may tsek sa bawat row para sa tanong na "Array (Numero) Checkbox"
| Layunin | I-validate ang bilang ng mga kahong may tsek sa bawat row |
| Uri | Pag-validate |
| Halimbawa | Tanong na may uri na "Array Numbers (Checkbox Layout)" |
| Expression | sum(...) |
| Paglalarawan | Tinutukoy ng (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) kung may tsek ang hindi bababa sa X na checkbox sa row A. Kung gusto mong suriin ang lahat ng tatlong row (A, B, C), maaari mong pagdugtungin ang expression gamit ang "&&": (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= X) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= X) |
| Mga hakbang | Gumawa/i-edit ang tanong na may uri na "Array Numbers (Checkbox Layout)". Ilagay ang expression sa itaas sa "Equation sa pag-validate ng tanong" sa mga advanced na setting ng tanong (maaaring kailanganin mong ayusin ang mga pangalan ng variable!). |
| Sample na file | Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss |
![]()
| |
Kalkulahin ang pagkakaiba ng dalawang petsa
| Layunin | Kalkulahin ang pagkakaiba ng dalawang petsa |
| Uri | Relevance / Uri ng tanong na Equation / Pag-validate |
| Halimbawa | Unang tanong (petsa/oras, code: DOB): Kailan ang petsa ng kapanganakan mo? Ikalawang tanong (petsa/oras, code: datetoday): Anong petsa ngayon? Ikatlong tanong (boilerplate): XXXX araw ka na. Gagawin: Kalkulahin at ipakita ang bilang ng mga araw sa pagitan ng petsang ibinigay sa tanong 1 at tanong 2. |
| Expression | {(strtotime(datetoday)-strtotime(DOB))/60/60/24} |
| Paglalarawan | Kinakalkula ng strtotime ang bilang ng segundo sa pagitan ng ika-1 ng Enero 1970 at ng ibinigay na petsa. Kinakalkula ng expression sa itaas ang bilang ng segundo sa pagitan ng dalawang ibinigay na petsa. Ang terminong "/60/60/24" ay kumukuha lamang ng bilang ng mga araw mula sa bilang ng segundo. Sa halip na itanong ang "datetoday", maaari mo ring gamitin ang strtotime('now') o simpleng time(), na direktang nagbabalik ng bilang ng segundo mula Enero 1970 hanggang ngayon (ibig sabihin, ang oras kung kailan sinagutan ang survey). Kaya mabilis mong malalaman ang edad ng isang tao sa taon gamit ang equation na {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} Sa alinman sa mga kasong ito, mahalagang tama ang format ng ipinasok na petsa, kung hindi ay hindi gagana nang maayos ang function na strtotime(). |
| Mga hakbang | Gumawa ng dalawang tanong na petsa (para sa petsa ng kapanganakan at para sa petsa ngayon) at isang boilerplate na tanong. Sa text ng tanong ng boilerplate na tanong, ilagay ang: "Noong {datetoday} ay {(strtotime(today)-strtotime(dob))/60/60/24} araw ka na." Pakitandaan: Maraming format ng petsa ang kayang gamitin ng function na strtotime ngunit hindi lahat. Kung magkaproblema, itakda ang format ng petsa ng iyong survey sa mm/dd/yyyy o yyyy-mm-dd o dd.mm.yyyy" |
| Sample na file | Date_difference.zip |
| |
Paggamit ng ExpressionScript para sa mga Assessment
Narito ang isa pang halimbawa kung paano gamitin ang ExpressionScript sa mga tanong na uri ng array at mga assessment:</ br>
Sabihin nating mayroon kang 2 tanong na array at gusto mong i-save sa iyong database ang mga resulta ng kalkulasyon. Simple lang ito: kailangan mong gumawa at subukan ang iyong mga array at magsumite ng dummy na tugon para makita kung gumagana ito at ibinibigay ang mga resulta sa pahina ng pagkumpleto.
Mga detalye ng implementasyon:
- magdagdag ng tanong na uri ng equation
- idagdag ang sumusunod na linya, ipinapalagay na ang Q1 ay ang code ng iyong tanong na array at ang Q2 ay ang ikalawa:
{sum(Q1_SQ001.value,Q2_SQ001.value)}
Tandaan na ang SQ001 ang default na code para sa anumang subquestion. Kung babaguhin mo ang code ng subquestion, ayusin nang naaayon ang equation sa itaas.
Paggamit ng em_validation_q sa array
Maaari mong gamitin ang equation sa pag-validate ng tanong para kontrolin ang isang array gamit ang anumang kondisyon.
Mga detalye ng implementasyon:
- para sa unang array : array ng single choice
- Ang code ng tanong ay ARRAY
- Ang mga code ng subquestion ay SQ01,SQ02,SQ03 at SQ04
- i-update ang Equation sa pag-validate ng buong tanong at ilagay ang
!is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03)
- para sa ikalawang array : array ng text
- Ang code ng tanong ay ARRAYTEXT
- Ang mga code ng subquestion sa Y axis ay SY01,SY02,SY03, at SY04
- I-update ang Equation sa pag-validate ng buong tanong at ilagay ang
count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)








