Contoh ExpressionScript
From LimeSurvey Manual
Struktur
Bahagian pertama artikel ini menerangkan kegunaan Ungkapan dan tempat untuk mencari/menambah Ungkapan. Bahagian kedua menyediakan contoh cara menggunakan Ungkapan.
Kategori Ungkapan
LimeSurvey menggunakan Ungkapan untuk tujuan berikut:
Kaitan
Tujuan: Menyembunyikan kumpulan soalan/soalan
Kaitan mengawal sama ada sesuatu kumpulan soalan atau soalan dipaparkan atau disembunyikan. Jika hasil Ungkapan ialah "true" (iaitu 1), elemen tersebut akan dipaparkan. Jika tidak (jika hasil Ungkapan ialah "false" (iaitu 0)), elemen tersebut akan disembunyikan.
Validasi
Tujuan: Mengesahkan input/tindakan pada soalan/subsoalan/jawapan
Validasi mengawal sama ada input responden ke dalam sesuatu soalan atau tindakan adalah sah atau tidak. Jika hasil ungkapan ialah "true" (iaitu 1), kelas "good" akan dikenakan pada elemen dan mesej pengesahan. Jika tidak, iaitu jika hasil ungkapan ialah "false" (iaitu 0)), kelas "error" akan dikenakan pada elemen dan mesej pengesahan. Anda boleh mengisytiharkan gaya untuk kelas-kelas ini dalam template.css.
Output teks
Tujuan: (Melakukan sesuatu) dan menulis sebahagian teks
Ungkapan boleh digunakan untuk menulis sebahagian teks. Sebagai contoh, anda boleh menguji atau mengira sesuatu dan menentukan output bergantung pada hasil ujian atau pengiraan tersebut. Ia juga boleh digunakan untuk memasukkan teks soalan, jawapan, jenis soalan, ... bagi soalan yang digunakan sebelum Ungkapan digunakan. Output teks boleh digunakan di mana-mana sahaja teks dipaparkan dan boleh memulangkan pelbagai jenis hasil.
| Kes penggunaan | Keterangan |
|---|---|
| Penyesuaian mikro | Melaraskan teks, cth., menulis "Encik" atau "Puan" bergantung pada soalan jantina yang ditanya sebelumnya |
| Pengiraan | Mengira nilai dan menulisnya, cth., "Pendapatan keluarga anda ialah xxx" |
| Rujukan | Memasukkan teks daripada sesuatu elemen, cth., "Nama anda ialah xxx. Berapakah umur anda?" |
Penyimpanan jawapan
Tujuan: (Melakukan sesuatu,) (menulis sebahagian teks) dan menyimpan sesuatu dalam pangkalan data
Jenis soalan Persamaan boleh digunakan untuk menyimpan sesuatu dalam pangkalan data. Anda boleh melakukan sesuatu dengan Ungkapan, memaparkan soalan Persamaan (yang serupa dengan paparan teks) dan menyimpan hasil Ungkapan dalam pangkalan data. Ia menyimpan jawapan ke dalam jadual respons. Kemudian, hasil tersebut boleh digunakan dalam ciri statistik atau diimport ke dalam salah satu format yang disediakan oleh fungsi eksport LimeSurvey.
Contoh Ungkapan
Memasukkan jawapan daripada soalan sebelumnya
Menggunakan soalan persamaan tersembunyi untuk mengisi jawapan secara automatik
Masalah: Bayangkan anda mempunyai dua soalan Q1 dan Q2. Q1 bertanya umur responden. Q2 membahagikan responden kepada tiga kumpulan: umur di bawah 20 tahun, umur 20 tahun, umur lebih besar daripada 20 tahun. Jadi, Q2 harus menggunakan nilai "1", "2", "3", yang sepadan dengan syarat di atas. Selain itu, jangan lupa menjadikan Q2 tidak kelihatan (soalan tidak akan dipaparkan dalam tinjauan, tetapi nilainya akan disimpan melalui "proses latar belakang" dalam jadual respons).
Untuk mengisi pangkalan data menggunakan jenis soalan Persamaan:
- Pertama, cipta soalan dengan kod Q1 sebagai soalan Input berangka.
- Kemudian cipta soalan lain dengan kod Q2 sebagai soalan persamaan.
- Dalam bahagian tab "Tetapan paparan" bagi Q2:
- tetapkan medan "Sentiasa sembunyikan soalan ini" kepada "Dihidupkan"
- taip ungkapan dalam medan "Persamaan":
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}
Mencipta halaman ringkasan menggunakan pemegang tempat
Tutorial ini menunjukkan cara anda boleh mencipta gambaran keseluruhan pada akhir tinjauan, yang menyenaraikan semua soalan dan jawapan melalui pemegang tempat ExpressionScript. Ia juga menunjukkan cara menghadkan gambaran keseluruhan tersebut kepada soalan yang telah dijawab sahaja.
Contoh kami boleh dimuat turun di sini: Contoh tinjauan pemegang tempat tinjauan.
Jenis soalan yang digunakan di sini:
1. Soalan pilihan tunggal / soalan teks/numerik tunggal
- Senarai (Senarai Kebawah)
- Senarai (Radio) [L]
- Ya/Tidak [Y]
- Teks bebas panjang [T]
- Teks percuma pendek [S]
- Input berangka [N]
- Persamaan [*]
2. Soalan dengan subsoalan
- Teks pendek berbilang [Q]
- Pelbagai pilihan [M]
- Tatasusunan [F]
- Pilihan (Ya/Tidak/Tidak pasti) [C]
- Tatasusunan (pilihan 10 poin) [B]
3. Soalan dengan 2 skala
- Skala dwi tatasusunan [1]
4. Soalan dengan skala X dan Y
- Tatasusunan (Nombor) [:]
5. Topeng soalan
- Paparan teks [X]
Dalam contoh mudah ini, gambaran keseluruhan kita ialah senarai ringkas yang mengandungi:
- Teks soalan: Jawapan pengguna
Soalan pilihan tunggal / soalan teks/numerik tunggal
Bagi semua jenis soalan ini, LimeSurvey akan menyimpan satu jawapan:
- Senarai (Senarai Kebawah)
- Senarai (Radio)
- Senaraikan dengan komen
- Pilihan 5 poin
- Ya/Tidak
- Teks percuma pendek
- Teks bebas panjang
- Teks percuma besar
- Input berangka
- Persamaan
- Tarikh
- Jantina
Dengan andaian kod soalan bagi soalan tersebut ialah q1, kita boleh merujuk teks soalan dan jawapan menggunakan:
- {q1.question}: {q1.shown}
Contoh:
- Berapakah umur anda?: 25
Jika anda ingin menyemak sama ada soalan tersebut telah dijawab, anda boleh meletakkan pernyataan IF di sekeliling output anda:
{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}
Ini "diterjemahkan" sebagai: JIKA soalan dengan kod q1 tidak kosong, keluarkan "- " DAN teks soalan DAN ": " DAN teks jawapan (fungsi join() menggabungkan elemen sebagai rentetan baharu); SELAIN ITU: tidak keluarkan apa-apa ("" bermaksud rentetan kosong).
Soalan dengan subsoalan
Bagi semua jenis soalan ini, LimeSurvey menggunakan subsoalan:
- Teks pendek berbilang
- Pelbagai pilihan
- Pelbagai pilihan dengan komen
- Tatasusunan
- Tatasusunan (pilihan 5 poin)
- Tatasusunan (pilihan 10 poin)
- Pilihan (Ya/Tidak/Tidak pasti)
- Tatasusunan (Naik/Sama/Turun)
- Tatasusunan mengikut lajur
Dengan andaian kod soalan bagi soalan tersebut ialah q2 dan subsoalan dinomborkan SQ001, SQ002, (penomboran automatik dilakukan oleh LimeSurvey), kita boleh merujuk teks soalan dan jawapan menggunakan:
- {q2_SQ001.question}: {q2_SQ001.shown}
- {q2_SQ002.question}: {q2_SQ002.shown}
Bagi soalan pelbagai pilihan, adalah lebih sesuai untuk tidak memaparkan teks subsoalan yang ditanda, sebaliknya memaparkan Y bagi setiap pilihan yang dipilih:
- {q2_SQ001.question}: {q2_SQ001}
- {q2_SQ002.question}: {q2_SQ002}
...
Perhatikan bahawa pada masa ini tidak mungkin mengeluarkan teks soalan bagi soalan yang mempunyai subsoalan, lihat permintaan ciri ini.
Contoh 1 (andaikan jenis soalan ialah pelbagai pilihan)
- Adakah anda mengenali jenama kereta ini?
-- Mercedes: Y
-- Audi: N
-- Volvo: Y
Jika anda mahu memaparkan item yang ditandakan sahaja, anda boleh meletakkan pernyataan IF pada output anda dan menyemak nilai kotak semak:
{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }
Gunakan fungsi listifop jika anda mahu memaparkan senarai item yang dipilih sahaja, cth: Mercedes, Volvo
{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }
Di sini that.q2 dikembangkan kepada semua subsoalan q2. Lihat self, this dan that untuk butiran lanjut.
Contoh 2 (andaikan jenis soalan ialah Tatasusunan (pilihan 10 poin))
- Sila nilaikan kualiti jenama kereta di bawah pada skala daripada 1=sangat buruk hingga 10=sangat baik?
-- Mercedes: 7
-- Audi: 9
-- Volvo: 9
Jika anda mahu memaparkan item yang dinilai sahaja, anda boleh meletakkan pernyataan IF pada output anda dan menyemak sama ada subsoalan semasa telah dijawab dengan menggunakan:
{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }
Gunakan fungsi listifop jika anda, sebagai contoh, mahu memaparkan senarai item yang dipilih dengan nilai lebih daripada lapan sahaja, cth: Audi / Volvo
{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }
Soalan dengan dua skala
Andaikan bahawa kod berikut digunakan:
- Kod soalan: q4
- Kod subsoalan: SQ001, SQ002, ...
- Kod jawapan skala 1: A1, A2, ...
- Kod jawapan skala 2: B1, B2, ...
Contoh untuk merujuk kepada jawapan subsoalan ketiga dan skala kedua: q4_SQ003_1 - Soalan 4, subsoalan 3, skala kedua.
Mari kita paparkan hasil untuk kedua-dua skala dan dua subsoalan pertama:
- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}
- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}
Untuk memaparkan teks subsoalan, anda perlu menambah ID skala pada pemegang tempat (walaupun teksnya sama untuk kedua-dua skala). Jadi, sebagai ganti {q4_SQ001.question}, kita perlu menggunakan {q4_SQ001_0.question} atau {q4_SQ001_1.question}.
Jika anda mahu mengeksport/memaparkan hasil subsoalan yang mempunyai sekurang-kurangnya satu jawapan sahaja, gunakan sintaks ini untuk setiap subsoalan:
{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}
Soalan dengan skala X dan Y
Ini terpakai untuk semua soalan matriks yang membenarkan jawapan bagi setiap sel (bukan hanya setiap baris seperti yang ditunjukkan sebelum ini):
- Teks Tatasusunan
- Nombor Tatasusunan
Kod yang diandaikan digunakan:
- Kod soalan: q5
- Kod subsoalan: SQ001, SQ002, ...
- Kod jawapan: A1, A2, ...
Untuk merujuk kepada hasil subsoalan tertentu daripada lajur tertentu, anda perlu menggunakan QuestionCode . '_' . SubQuestionCode . '_' . AnswerCode. Contoh merujuk kepada jawapan subsoalan ketiga dan lajur kedua: q5_SQ003_A2.
Mari kita keluarkan hasil bagi lajur 1-3 untuk dua subsoalan pertama:
- {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}
Memandangkan bagi jenis soalan ini setiap sel (gabungan paksi X dan paksi Y) bersamaan dengan satu pilihan jawapan, ujian untuk data sedia ada perlu dilakukan bagi setiap sel. Contoh:
{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}
Sembunyikan soalan jika jawapan daripada soalan sebelumnya kosong
| Tujuan | Sembunyikan soalan jika jawapan daripada soalan sebelumnya kosong |
| Jenis | Kaitan soalan |
| Contoh | Soalan satu: kod soalan "name", teks soalan "Siapakah nama anda?" Soalan dua: teks soalan "{name}, berapakah umur anda?" Tugasan: Sembunyikan soalan dua jika medan teks soalan satu kosong |
| Ungkapan | !is_empty(name) |
| Keterangan | is_empty() menentukan sama ada sesuatu pemboleh ubah dianggap kosong. Tanda "!" menafikan hasilnya. Jadi, jika pemboleh ubah tidak kosong, Ungkapan itu akan benar dan soalan dipaparkan |
| Langkah | Cipta/edit soalan dua Masukkan "!is_empty(name)" ke dalam "Persamaan kaitan" |
| Fail contoh | Hide_question_if_empty_question_group.zip |
![]()
| |
Sembunyikan kumpulan soalan jika jawapan daripada soalan sebelumnya ialah Ya atau Tidak
| Tujuan | Sembunyikan kumpulan soalan jika jawapan daripada soalan sebelumnya ialah Ya atau Tidak |
| Jenis | Kaitan kumpulan soalan |
| Contoh | Halaman satu, Kumpulan soalan satu, Soalan satu: kod soalan "PET", teks soalan "Adakah anda mempunyai haiwan peliharaan?" -Ya -Tidak Halaman dua, Kumpulan soalan dua: Tajuk "Tentang haiwan peliharaan anda" Tugasan: Paparkan/sembunyikan kumpulan soalan dua jika jawapan daripada soalan satu ialah Ya/Tidak |
| Ungkapan | PET == "Y" |
| Keterangan | PET ialah kod soalan bagi soalan yang jawapannya ingin anda semak. Jika anda tidak menggunakan akhiran, EM akan menggunakan "Qcode.code". Jadi, anda membandingkan kod jawapan daripada soalan PET dengan nilai "Y". Jika peserta menjawab "Ya", Ungkapan itu benar dan kumpulan soalan "Tentang haiwan peliharaan anda" akan dipaparkan. |
| Langkah | Cipta/edit kumpulan soalan dua Masukkan "PET == "Y"" ke dalam "Persamaan kaitan" |
| Fail contoh | Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip |
![]()
| |
Paparkan nilai medan soalan input berbilang jawapan
| Tujuan | Paparkan nilai medan soalan input berbilang jawapan |
| Jenis | Rujukan |
| Contoh | Soalan satu: kod soalan "AskChildAge", teks soalan "Berapakah umur anak-anak anda?". Kod subsoalan -Child1 -Child2 -Child3 - ChildXXX Soalan dua: kod soalan "ReportChildAge" teks soalan "Tentang anak pertama anda: - CHILD1 berumur AGE1." |
| Ungkapan | {AskChildAge_Child1.question}, {AskChildAge_Child1.value} |
| Keterangan | Anda ingin menggunakan nilai subsoalan dalam soalan berikutnya. Anda boleh mengakses nilai subsoalan dengan ungkapan seperti ini: QcodeQuestion_QcodeSubquestion.value |
| Langkah | Cipta/edit soalan kedua Masukkan teks ini dalam keterangan: "Tentang anak pertama anda: - {AskChildAge_Child1.question} berumur {AskChildAge_Child1.value}." |
| Fail contoh | Display_value_of_a_multiple_answer_input_question_field.zip |
| |
Sahkan bilangan kotak yang ditanda bagi setiap baris untuk soalan "Tatasusunan (Nombor) Kotak pilihan"
| Tujuan | Sahkan bilangan kotak yang ditanda bagi setiap baris |
| Jenis | Pengesahan |
| Contoh | Soalan berjenis "Tatasusunan Nombor (Susun atur kotak pilihan)" |
| Ungkapan | sum(...) |
| Keterangan | (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) menentukan sama ada sekurang-kurangnya X kotak pilihan dalam baris A ditanda. Jika anda ingin menyemak ketiga-tiga baris (A, B, C), anda boleh menyambungkan ungkapan menggunakan "&&": (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) |
| Langkah | Cipta/edit soalan berjenis "Tatasusunan Nombor (Susun atur kotak pilihan)". Masukkan ungkapan di atas ke dalam "Persamaan pengesahan soalan" pada tetapan soalan lanjutan (anda mungkin perlu melaraskan penamaan pemboleh ubah!). |
| Fail contoh | Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss |
![]()
| |
Kira perbezaan antara dua tarikh
| Tujuan | Kira perbezaan antara dua tarikh |
| Jenis | Kaitan / Jenis soalan persamaan / Pengesahan |
| Contoh | Soalan satu (tarikh/masa, kod: DOB): Apakah tarikh lahir anda? Soalan dua (tarikh/masa, kod: datetoday): Apakah tarikh hari ini? Soalan tiga (boilerplate): Anda berumur XXXX hari. Tugasan: Kira dan paparkan bilangan hari antara tarikh yang diberikan dalam soalan 1 dan soalan 2. |
| Ungkapan | {(strtotime(datetoday)-strtotime(DOB))/60/60/24} |
| Keterangan | strtotime mengira bilangan saat antara 1 Januari 1970 dan tarikh yang diberikan. Ungkapan di atas mengira bilangan saat antara dua tarikh yang diberikan. Sebutan "/60/60/24" hanya mengira bilangan hari daripada bilangan saat. Sebagai ganti bertanya "datetoday", anda juga boleh menggunakan strtotime('now') atau sekadar time(), yang terus memulangkan bilangan saat dari Januari 1970 sehingga sekarang (iaitu masa tinjauan diambil). Dengan itu, anda boleh mengetahui umur seseorang dalam tahun dengan pantas menggunakan persamaan {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} Dalam mana-mana kes ini, adalah penting tarikh dimasukkan dalam format yang betul, jika tidak fungsi strtotime() tidak akan berfungsi dengan betul. |
| Langkah | Cipta dua soalan tarikh (untuk tarikh lahir dan untuk tarikh hari ini) dan satu soalan boilerplate. Dalam teks soalan bagi soalan boilerplate, masukkan: "Pada {datetoday} anda berumur {(strtotime(today)-strtotime(dob))/60/60/24} hari." Sila ambil perhatian: Fungsi strtotime boleh berfungsi dengan BANYAK tetapi bukan semua format tarikh. Jika anda menghadapi masalah, tetapkan Format tarikh tinjauan anda kepada mm/dd/yyyy atau yyyy-mm-dd atau dd.mm.yyyy" |
| Fail contoh | Date_difference.zip |
| |
Menggunakan ExpressionScript untuk Penilaian
Berikut ialah satu lagi contoh cara menggunakan ExpressionScript dengan soalan jenis tatasusunan dan penilaian:</ br>
Katakan anda mempunyai 2 soalan tatasusunan dan anda ingin menyimpan hasil data pengiraan ke dalam pangkalan data anda. Ia sebenarnya mudah, anda perlu mencipta dan menguji tatasusunan anda serta menghantar jawapan palsu untuk melihat sama ada ia berfungsi dan memberikan hasilnya pada halaman selesai.
Butiran pelaksanaan:
- tambah soalan berjenis persamaan
- tambah baris berikut dengan andaian Q1 ialah kod soalan tatasusunan anda manakala Q2 ialah yang kedua:
{sum(Q1_SQ001.value,Q2_SQ001.value)}
Perhatikan bahawa SQ001 ialah kod lalai bagi mana-mana subsoalan. Jika anda menukar kod subsoalan, laraskan persamaan di atas dengan sewajarnya.
Menggunakan em_validation_q dalam tatasusunan
Anda boleh menggunakan persamaan pengesahan soalan untuk mengawal tatasusunan dengan sebarang syarat.
Butiran pelaksanaan:
- untuk tatasusunan pertama : tatasusunan pilihan tunggal
- Kod soalan ialah ARRAY
- Kod subsoalan ialah SQ01,SQ02,SQ03 dan SQ04
- kemas kini Persamaan pengesahan keseluruhan soalan dan masukkan
!is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03)
- untuk tatasusunan kedua : tatasusunan teks
- Kod soalan ialah ARRAYTEXT
- Kod subsoalan pada paksi Y ialah SY01,SY02,SY03, dan SY04
- Kemas kini Persamaan pengesahan keseluruhan soalan dan masukkan
count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)








