Expression Manager
From LimeSurvey Manual
Tutorial Permulaan Pantas
Gambaran Keseluruhan
Apabila menyesuaikan tinjauan anda, anda biasanya memerlukan cara untuk menentukan perkara berikut:
- Navigasi/Percabangan - membenarkan jawapan subjek mengubah susunan soalan yang ditanya
- Penyesuaian/Piping - cara menyusun ayat soalan (seperti merujuk jawapan terdahulu, atau mengubah ayat berdasarkan bilangan atau jantina subjek anda), atau cara menjana laporan tersuai (seperti skor penilaian atau nasihat yang disesuaikan).
- Validasi - memastikan jawapan memenuhi kriteria tertentu, seperti nilai minimum dan maksimum, atau sepadan dengan corak input
Expression Manager (EM) menyediakan cara yang intuitif untuk menentukan logik bagi setiap ciri tersebut. Hampir apa sahaja yang boleh anda tulis sebagai persamaan matematik standard ialah ungkapan yang sah, walaupun anda memanggil fungsi. EM kini menyediakan akses kepada 80 fungsi, dan boleh dilanjutkan dengan mudah untuk menyokong lebih banyak lagi. EM juga membolehkan anda mengakses pemboleh ubah anda menggunakan nama pemboleh ubah yang mudah dibaca (bukannya nama SGQA).
Bahagian berikut menunjukkan tempat utama Expression Manager digunakan
Sesetengah tinjauan menggunakan "Logik Goto", iaitu jika anda menjawab Soalan 1 dengan pilihan C, maka lompat ke Soalan 5. Pendekatan ini sangat terhad, kerana sukar disahkan dan mudah rosak apabila anda perlu menyusun semula soalan. EM menggunakan persamaan kaitan Boolean untuk menentukan semua syarat di mana sesuatu soalan mungkin sah. Jika soalan itu relevan, soalan tersebut dipaparkan; jika tidak, ia Tidak Berkenaan, dan nilai NULL disimpan dalam pangkalan data. Ini serupa dengan apa yang boleh dilakukan melalui editor Syarat, tetapi EM membolehkan anda menentukan kriteria yang jauh lebih kompleks dan berkuasa dengan mudah (dan membolehkan anda menggunakan nama pemboleh ubah dan bukannya penamaan SGQA).
Imej ini menunjukkan satu cara untuk menyemak logik kaitan bagi sesuatu tinjauan. Ia mengira Indeks Jisim Badan. Persamaan kaitan ditunjukkan dalam kurungan siku tepat selepas nama pemboleh ubah (yang berwarna hijau). Jadi, kaitan bagi weight, weight_units, height dan height_units semuanya ialah 1, bermakna soalan-soalan tersebut sentiasa ditanya. Namun, kaitan bagi BMI ialah {!is_empty(height) and !is_empty(weight)}, yang bermaksud BMI hanya akan dikira jika subjek memasukkan nilai bagi kedua-dua height dan weight (sekali gus mengelakkan risiko ralat pembahagian dengan sifar). Selain itu, soalan Report hanya dipaparkan jika subjek menjawab keempat-empat soalan utama (height, height_units, weight, weight_units).
Kaitan dipaparkan dan boleh diedit di tempat berikut:
Melihat / Mengedit Kaitan Peringkat Soalan
Persamaan ini mengira Indeks Jisim Badan (BMI). Ia hanya ditanya jika seseorang itu memasukkan ketinggian dan beratnya terlebih dahulu.
Ini ialah skrin edit bagi soalan BMI.
Perhatikan bahawa anda tidak menggunakan kurungan kerawang apabila memasukkan Persamaan kaitan.
Melihat / Mengedit Kaitan Peringkat Kumpulan
Ini ialah contoh tinjauan banci. Halaman pertama bertanya berapa ramai orang tinggal bersama anda dan menyimpannya dalam pemboleh ubah "cohabs". Halaman ini hanya dipaparkan jika anda mempunyai lebih daripada seorang penghuni bersama (jadi ia dipaparkan untuk orang kedua yang tinggal bersama anda), dan juga hanya dipaparkan jika anda telah menyatakan hubungan Orang Pertama dengan anda (p1_rel).
Seperti yang anda lihat, kumpulan tersebut juga mempunyai kriteria kaitan peringkat soalan, supaya setiap soalan hanya muncul selepas anda menjawab soalan sebelumnya (cth. {!is_empty(p1_sex)}). EM menggabungkan kaitan peringkat Kumpulan dan Soalan untuk anda. Soalan dalam sesuatu kumpulan hanya ditanya jika kumpulan secara keseluruhan relevan. Kemudian, hanya subset soalan dalam kumpulan yang relevan akan ditanya.
Berikut ialah skrin untuk mengedit kaitan peringkat kumpulan bagi soalan tersebut:
Perhatikan bahawa anda tidak menggunakan kurungan kerawang apabila memasukkan Persamaan kaitan.
Penyesuaian/Piping
EM membolehkan anda melakukan penyesuaian bersyarat yang ringkas dan kompleks pada soalan anda dengan mudah. Kadangkala anda hanya memerlukan penggantian mudah, seperti menyatakan, "Anda berkata anda membeli [Produk]. Apakah yang paling anda suka tentangnya?". Kadangkala anda memerlukan penggantian bersyarat seperti "[Encik/Puan] [NamaAkhir], sudikah anda melengkapkan tinjauan kami?". Dalam kes ini, anda mahu menggunakan Encik atau Puan berdasarkan jantina orang tersebut. Pada masa lain anda memerlukan penggantian yang lebih kompleks (seperti berdasarkan pengiraan matematik). EM menyokong setiap jenis penyesuaian/piping ini.
Persamaan Bersyarat
Contoh Indeks Jisim Badan menunjukkan keupayaan mengira BMI seseorang, walaupun membenarkan mereka memasukkan ketinggian dan berat dalam unit metrik atau bukan metrik.
Di sini weight_kg ialah {if(weight_units == 'kg', weight, weight * .453592)}. Fungsi if() ini bermaksud jika subjek memasukkan berat dalam kilogram, gunakan nilai tersebut; jika tidak, darabkan nilai yang dimasukkan (dalam paun) dengan .453592 untuk menukarnya kepada kilogram. Pembolehubah height_m menggunakan pendekatan yang serupa untuk mengira ketinggian seseorang dalam meter, walaupun dia memasukkan ketinggiannya dalam inci.
BMI mengira formula berat sebagai {weight_kg / (height_m * height_m)}.
Akhir sekali, laporan menyesuaikan mesej untuk subjek secara bersyarat, dengan memberitahunya apa yang telah dimasukkan. ("Anda menyatakan bahawa anda setinggi 2 meter dan berat 70 kg.")
Walaupun tidak jelas ditunjukkan dalam imej di atas, weight_status menggunakan penyataan if() bersarang untuk mengkategorikan seseorang daripada kekurangan berat badan hingga obes teruk. Anda boleh melihat persamaannya dalam Show Logic View
Daripada tetingkap edit untuk soalan ini, anda dapat melihat dua perkara:
- Penyesuaian (tailoring) mesti mengelilingi ungkapan dengan kurungan kerawang
- Ungkapan boleh merentangi beberapa baris jika, seperti dalam kes ini, anda mahu memudahkan pembacaan logik bersyarat bersarang.
Soalan, Jawapan dan Laporan yang Disesuaikan
Contoh ini menunjukkan laporan BMI.
Berikut ialah tetingkap edit untuk soalan yang sama.
Seperti yang anda lihat, apa-apa sahaja dalam kurungan kerawang dianggap sebagai ungkapan, jadi ia diserlahkan sintaksnya (berkod warna) dalam imej sebelum ini. Jika terdapat sebarang kesilapan menaip (seperti nama pembolehubah atau fungsi yang salah eja atau tidak ditakrif), EM akan memaparkan ralat, seperti ini, yang menunjukkan bahawa height_unit ialah nama pembolehubah yang tidak ditakrif (sebenarnya ia height_units), dan rnd() ialah fungsi yang tidak ditakrif (nama fungsi yang betul ialah round()). Dalam kedua-dua kes, ralat dikelilingi kotak merah untuk memudahkan anda mengesan dan membetulkannya.
Anda juga dapat melihat bahawa anda boleh mencipta laporan yang kompleks dengan pantas, seperti jadual nilai yang dimasukkan atau nasihat yang disesuaikan.
Sila ingat bahawa semua penyesuaian mesti mengelilingi ungkapan dengan kurungan kerawang, supaya LimeSurvey tahu bahagian soalan yang manakah teks bebas dan yang manakah perlu diproses melalui Expression Manager.
Pengesahan
EM mengawal cara kebanyakan pilihan soalan lanjutan berfungsi. Pilihan ini mengawal aspek seperti bilangan jawapan minimum/maksimum; nilai individu minimum/maksimum; nilai jumlah minimum/maksimum; dan menyemak sama ada nilai yang dimasukkan sepadan dengan corak rentetan yang ditetapkan. Anda terus memasukkan pilihan soalan lanjutan tersebut seperti biasa. Namun, kini sebarang nilai dalam medan tersebut dianggap sebagai ungkapan, jadi anda boleh mempunyai kriteria minimum/maksimum dengan hubungan bersyarat yang kompleks dengan soalan lain.
Dalam semua kes ini, memandangkan pilihan soalan lanjutan sentiasa dianggap sebagai ungkapan, anda tidak menggunakan kurungan kerawang semasa menentukannya.
Halaman Tinjauan Contoh menunjukkan banyak contoh berfungsi penggunaan ungkapan untuk pengesahan.
Pengenalan
LimeSurvey menggunakan modul Expression Manager (EM) yang baharu, yang membolehkan LimeSurvey menyokong percabangan, penilaian, pengesahan dan penyesuaian yang lebih kompleks. Ia akan menggantikan cara LimeSurvey menguruskan Replacements, Conditions dan Assessments di bahagian belakang. Ia juga akan mempercepatkan pemprosesan dengan ketara kerana ia menghapuskan kebanyakan bacaan pangkalan data semasa larian. EM dibangunkan oleh Dr. Thomas White (TMSWhite).
Halaman wiki ini ialah rujukan muktamad untuk sintaks dan fungsi Expression Manager.
Takrifan Utama
- Ungkapan: Apa-apa sahaja yang dikelilingi kurungan kerawang
- Selagi tiada ruang kosong serta-merta selepas kurungan pembuka atau sebelum kurungan penutup
- Kandungan Ungkapan dinilai oleh EM, jadi ia boleh mengandungi formula matematik, fungsi, dan pemprosesan rentetan serta tarikh yang kompleks.
- Penyesuaian (Tailoring): Kadangkala dipanggil "piping", ini ialah proses mengubah suai teks secara bersyarat
- Anda mempunyai akses kepada semua 'medan gantian', data peserta dan data jawapan.
- Anda juga mempunyai akses yang lebih mudah kepada soalan, jawapan dan sifatnya.
- Persamaan kaitan: Atribut soalan baharu yang mengawal keterlihatan soalan
- Jika terdapat persamaan kaitan, maka soalan hanya dipaparkan jika kaitan dinilai sebagai benar.
- Secara dalaman, semua arahan array_filter dan array_filter_exclude menjadi kaitan peringkat subsoalan
- Jenis soalan Persamaan: Jenis soalan baharu yang menyimpan pengiraan atau laporan ke pangkalan data
- Ia seperti soalan Boilerplate, tetapi kandungannya disimpan ke pangkalan data walaupun anda menetapkan "Sentiasa sembunyikan soalan ini"
- Kod Soalan: Ini ialah nama pembolehubah pilihan untuk EM
- Ini boleh menjadi nama deskriptif yang menunjukkan tujuan soalan, memudahkan pembacaan logik yang kompleks
- Kod soalan yang sah TIDAK boleh bermula dengan nombor, jadi apabila menggunakan kod soalan untuk menomborkan soalan anda, gunakan sahaja "q1", atau "q1a" atau "g1q2".
- Ini ialah apa yang kini menjadi nama pembolehubah jika anda mengeksport data ke SPSS atau R, jadi jika anda melakukan analisis statistik, anda mungkin sudah menjadikannya unik.
Adakah saya perlu menggunakan EM?
Jawapan ringkasnya ialah Tidak (tetapi juga Ya).
EM serasi ke belakang sepenuhnya dengan tinjauan sedia ada. Jadi, jika anda berpuas hati menggunakan Conditions dan Assessments dengan gaya yang digunakan LimeSurvey dalam versi <= 1.91+, anda boleh terus berbuat demikian.
Walau bagaimanapun, EM menggantikan sepenuhnya cara LimeSurvey menguruskan Conditions secara dalaman. Walaupun anda masih boleh menggunakan Conditions Editor untuk mencipta dan mengurus syarat, LimeSurvey 1.92 akan menukarkannya kepada Persamaan kaitan yang setara. Sebagai sebahagian daripada peningkatan, LimeSurvey 1.92 akan menukar secara automatik semua Conditions sedia ada kepada Persamaan kaitan.
Ini sepatutnya memberi anda yang terbaik daripada kedua-duanya - anda boleh terus menggunakan LimeSurvey seperti biasa, tetapi akan melihat persamaan kaitan yang setara supaya anda boleh berhijrah secara beransur-ansur terus kepada persamaan kaitan apabila anda rasa sesuai.
Bolehkah saya menggunakan Syarat dan Kaitan secara bercampur?
Ya. Anda boleh menggunakan editor Syarat untuk sesetengah soalan dan editor Kaitan untuk soalan yang lain. Syarat ditukar secara automatik kepada Kaitan apabila anda menyimpan soalan.
Perhatikan bahawa kami menganggap jika anda menggunakan editor Syarat, anda mahu Syarat tersebut menggantikan sebarang persamaan kaitan yang dimasukkan secara manual. Oleh itu, jika anda mempunyai Syarat sedia ada dan ingin mengedit Kaitan secara manual, sila hapus Syarat bagi soalan tersebut terlebih dahulu. Secara khusus, salin persamaan kaitan yang dijana ke dalam editor teks, gunakan menu Syarat untuk menghapus semua syarat bagi soalan tersebut (yang juga akan menghapus kaitan), kemudian edit soalan itu dan tampal semula persamaan kaitan yang dijana daripada editor teks ke dalam medan kaitan bagi soalan tersebut (dan simpan soalan). Jika terdapat permintaan yang mencukupi untuk menghapus syarat tanpa menghapus persamaan kaitan yang dijana, kami boleh menambah proses penukaran pukal.
Bagaimanakah saya perlu memilih antara Syarat dan Kaitan?
Berikut ialah senarai kelebihan dan kekurangan bagi setiap gaya:
| Gaya | Kelebihan | Kekurangan |
|---|---|---|
| Syarat | 1. GUI yang baik untuk mencipta syarat mudah 2. GUI didokumenkan dengan baik dan difahami oleh pasukan sokongan |
1. Hanya menyokong perbandingan mudah dan tidak mengendalikan syarat AND/OR dengan baik 2. Syarat berlata berfungsi secara tidak menentu 3. Perlahan - bergantung banyak pada pangkalan data, jadi boleh melambatkan tinjauan yang panjang 4. Terdapat laporan masalah semasa memuat semula syarat 5. GUI tidak berskala dengan baik apabila terdapat berpuluh-puluh, beratus-ratus atau beribu-ribu soalan 6. Mungkin perlahan untuk menukar tinjauan berasaskan kertas kerana mesti menggunakan nama SGQA 7. Selalunya memerlukan pengaturcara untuk menulis logik tersuai bagi percabangan yang kompleks |
| Kaitan | 1. Menyokong logik yang sangat kompleks, termasuk 80+ fungsi dan operator matematik/rentetan 2. Sokongan sempurna untuk logik berlata 3. Pantas - tiada panggilan pangkalan data tambahan, jadi menyokong tinjauan dengan 1000+ soalan 4. Tiada masalah memuat semula logik kerana tidak memerlukan kod SGQA 5. Penyerlahan sintaks berskala kepada tinjauan dengan 1000+ soalan 6. Mudah dan pantas digunakan oleh kumpulan yang ingin mengkomputerkan tinjauan berasaskan kertas sedia ada. 7. Menyokong temu bual separa berstruktur dan tinjauan epidemiologi dengan mudah tanpa memerlukan pengaturcara |
1. Tiada GUI untuk syarat mudah - gunakan penyerlahan sintaks sebagai ganti 2. Baharu, jadi pasukan sokongan belum menguasai EM lagi. |
Kesimpulannya, jika anda berpuas hati dengan cara LimeSurvey 1.91+ berfungsi, tiada sebab untuk mengubah cara anda bekerja.
Apakah beberapa manfaat lain menggunakan EM?
Berikut ialah beberapa sebab lain anda mungkin ingin menggunakan EM.
- Pengiraan - anda boleh mencipta sebarang pengiraan yang anda fikirkan:
- Anda mempunyai akses kepada semua operator dan fungsi matematik biasa
- Anda mempunyai akses kepada 70+ fungsi pemprosesan matematik, tarikh dan rentetan
- Agak mudah bagi pembangun untuk menambah fungsi baharu jika pengguna memerlukannya
- Menyimpan Pengiraan ke Pangkalan Data
- Anda kini boleh mengira pengiraan mudah dan kompleks dan/atau skor skala DAN menyimpannya dalam pangkalan data tanpa memerlukan JavaScript.
- Anda menggunakan jenis soalan Persamaan untuk mencapainya.
- Penilaian
- Anda kini boleh mencipta penilaian atau skor skala daripada mana-mana jenis soalan, bukan hanya subset yang disokong sebelum ini
- Anda boleh menggunakan Penyesuaian (Tailoring) untuk memaparkan skor penilaian berjalan atau jumlah di mana-mana sahaja yang diperlukan - malah pada halaman yang sama
- Anda mempunyai kawalan lebih terhadap laporan yang dijana berdasarkan skor penilaian tersebut
- Anda boleh menyimpan skor penilaian dalam pangkalan data tanpa memerlukan JavaScript
- Anda boleh menyembunyikan skor penilaian tanpa memerlukan JavaScript atau CSS
- Medan Gantian
- Gunakan Kod Soalan untuk memasukkan nilai daripada jawapan kepada soalan sebelumnya - ini menjadikannya lebih mudah dibaca dan disahkan.
- Penyesuaian (Tailoring) - anda boleh memaparkan teks secara bersyarat berdasarkan nilai lain
- Gunakan gelaran yang sesuai untuk subjek, seperti (cth. "Helo [Encik/Puan] Smith")
- Hasilkan ayat yang betul dari segi tatabahasa apabila bentuk tunggal/jamak penting: (cth. "Anda mempunyai 1 anak" berbanding "Anda mempunyai 2 anak")
- Konjugasikan kata kerja dan ubah kata nama dengan sewajarnya berdasarkan jantina dan bilangan subjek.
- Atribut Pemboleh Ubah Baharu - anda boleh mengakses yang berikut untuk membuat penyesuaian:
- (tiada akhiran) - alias bagi qcode.code
- .code - kod jawapan yang dipilih untuk soalan jika ia berkaitan (jika tidak, kosong), atau nilai teks jika ia bukan soalan berkod
- .NAOK - sama seperti .code, tetapi boleh menjadi sebahagian daripada pengiraan atau senarai walaupun tidak berkaitan
- .value - nilai penilaian untuk soalan jika ia berkaitan (jika tidak, kosong), atau nilai teks jika ia bukan soalan berkod -- tersedia jika penilaian didayakan untuk tinjauan, jika tidak sentiasa sifar
- .valueNAOK - sama seperti .value, tetapi boleh menjadi sebahagian daripada pengiraan atau senarai walaupun tidak berkaitan
- .shown - jawapan seperti yang dipaparkan kepada pengguna
- .qid - ID soalan
- .gid - ID kumpulan
- .sgqa - nilai SGQA bagi soalan
- .jsName - nama pemboleh ubah javascript yang betul bagi soalan, tidak kira sama ada ditakrifkan pada halaman ini atau halaman lain
- .qseq - urutan soalan (bermula dari 0)
- .gseq - urutan kumpulan (bermula dari 0)
- .mandatory - sama ada soalan wajib (Y/N)
- .question - teks soalan
- .relevance - persamaan kaitan bagi soalan
- .grelevance - persamaan kaitan bagi kumpulan
- .relevanceStatus - sama ada soalan sedang berkaitan atau tidak (boolean (boleh berbeza dalam PHP dan JS))
- .type - jenis soalan (kod satu aksara)
- Perubahan Dinamik Pada Halaman
- Semua Kaitan, Pengiraan dan Penyesuaian berfungsi secara dinamik pada halaman - jadi perubahan nilai mengemas kini halaman serta-merta
- Jadi, soalan muncul/hilang secara dinamik berdasarkan sama ada ia berkaitan
- Soalan juga disesuaikan secara dinamik berdasarkan jawapan pada halaman, jadi anda boleh melihat jumlah berjalan, ayat yang disesuaikan dan laporan tersuai.
- Skrin Kemasukan Data Baharu
- Selain menggunakan sistem kemasukan data semasa, anda boleh menggunakan Survey-All-In-One.
- Ini menyokong kaitan dan penyesuaian pada halaman, jadi kerani kemasukan data boleh bergerak dengan pantas menggunakan tab dan hanya perlu memasukkan jawapan yang berkaitan
- Ini boleh menjadi kritikal jika pemasuk data anda perlu melihat penyesuaian, yang juga dinamik.
- Menghapuskan keperluan untuk kebanyakan JavaScript tersuai
- EM menyokong pengiraan yang rumit, pemarkahan, penyesuaian dan logik bersyarat dengan mudah.
- Sesetengah perkara masih memerlukan JavaScript (seperti susun atur tersuai dan menyembunyikan sub-elemen soalan secara bersyarat), tetapi JavaScript anda boleh menggunakan fungsi EM supaya anda boleh mengakses soalan melalui Qcode dan bukannya SGQA, serta mengakses mana-mana sifat soalan yang disenaraikan di atas.
Apakah beberapa ciri baharu berguna lain yang didayakan oleh EM?
Sama ada anda terus menggunakan Editor Syarat atau menulis Persamaan Kaitan secara manual, anda mendapat faedah tambahan berikut:
- Anda boleh mencipta kriteria pengesahan yang lebih kompleks
- Semua atribut soalan lanjutan (seperti max_answers, min_num_value_n, max_num_value) boleh menggunakan Ungkapan. Oleh itu, kriteria minimum/maksimum anda boleh diselaraskan dengan mudah berdasarkan jawapan sebelumnya, walaupun berada pada halaman yang sama.
- EM juga mengendalikan semua pengesahan berasaskan ungkapan nalar (regular expression), jadi anda boleh menggabungkan atribut soalan berasaskan preg dan persamaan dengan mantap.
- Susun semula (atau hapus) Soalan dan Kumpulan dengan mudah
- Sebelum versi 1.92, anda tidak boleh menyusun semula soalan atau kumpulan jika LimeSurvey menganggap penyusunan semula tersebut boleh merosakkan syarat yang menggunakannya. Begitu juga, anda tidak boleh menghapus soalan jika terdapat soalan lain yang bergantung padanya.
- Dengan penyerlahan sintaks EM, mudah untuk melihat dan mengesahkan sama ada anda cuba menggunakan soalan sebelum ia diisytiharkan. Oleh itu, kini kami membenarkan anda menyusun semula atau menghapus soalan dan kumpulan pada bila-bila masa. EM akan mengemas kini semua penyerlahan sintaks untuk menunjukkan ralat yang mungkin berlaku.
- Paparan susun semula soalan telah dipertingkatkan untuk membantu semakan sedemikian. Ia kini menunjukkan persamaan kaitan dan penyesuaian (tailoring) soalan, jadi anda boleh melihat serta-merta sama ada mana-mana pemboleh ubah bertukar merah jambu (bermaksud ia digunakan sebelum diisytiharkan).
- Indeks Navigasi Soalan/Kumpulan sentiasa tersedia dan tepat
- Sebelum versi 1.92, indeks ini tidak tersedia jika terdapat syarat yang kompleks
- Dengan EM, kami boleh menjamin bahawa indeks ini tepat.
- Subjek malah boleh melompat kembali ke soalan sebelumnya, menukar jawapan, kemudian melompat ke hadapan (atau menghantar)
- Apabila melompat ke hadapan, EM akan mengesahkan semula semua soalan/kumpulan di antaranya.
- Jika mana-mana soalan menjadi tidak berkaitan, nilainya akan dijadikan NULL dalam pangkalan data supaya data anda konsisten secara dalaman.
- Jika mana-mana soalan menjadi berkaitan atau baru gagal memenuhi peraturan wajib atau pengesahan, EM akan berhenti pada halaman tersebut dan memaksa pengguna menjawab soalan tersebut sebelum melompat ke destinasi akhir mereka.
- Penukaran automatik Syarat kepada Kaitan
- Apabila anda menaik taraf pangkalan data anda, semua tinjauan sedia ada yang mempunyai syarat akan dijana persamaan kaitan untuknya
- Setiap kali anda mengimport tinjauan, persamaan kaitan akan dicipta mengikut keperluan
- Setiap kali anda menambah, menghapus atau mengubah syarat, EM akan menjana persamaan kaitan yang sesuai.
- Penyerlahan Sintaks yang Memudahkan
- Apabila EM menunjukkan persamaan kaitan, ia akan menunjukkan Qcode, walaupun anda memasukkan kod SGQA, kerana kami menganggap ini lebih mudah dibaca.
- Semua pemboleh ubah dikodkan warna untuk menunjukkan sama ada ia diisytiharkan sebelum atau selepas soalan semasa (atau sebelum atau selepas kumpulan semasa). Ini membolehkan anda mengesan dan membetulkan dengan cepat kes di mana anda cuba menggunakan pemboleh ubah untuk kaitan (termasuk array_filter), penyesuaian, atau persamaan pengesahan sebelum ia diisytiharkan.
- Selain itu, jika anda menuding tetikus ke atas pemboleh ubah berkod warna, anda akan melihat metadata terpenting tentang soalan tersebut. Ini termasuk # Jujukan Kumpulan, # Jujukan Soalan, Qcode, Teks soalan, dan semua pilihan jawapan yang ada (jika ia jenis soalan dengan pilihan jawapan terenumerasi).
- Senarai pilihan jawapan menggunakan sintaks ini: 'answers':{key:val, ... }.
- key mempunyai sintaks 'scale~code' dengan scale ialah skala jawapan (cth. untuk skala dwi), dan code ialah kod jawapan.
- val mempunyai sintaks 'value~shown' dengan value ialah nilai penilaian (jika menggunakan penilaian, jika tidak code)(cth. Qcode.value), dan shown ialah nilai paparan seperti yang dilihat oleh subjek (cth. Qcode.shown)
- Ini bermaksud banyak tinjauan boleh menggunakan pengiraan tanpa memerlukan mod penilaian. Jika anda mempunyai pilihan jawapan terenumerasi yang unik, bukan perpuluhan dan bukan negatif, anda boleh melakukan pengiraan terus pada nilai Qcode.code.
- Semakan mudah keseluruhan logik dan kandungan tinjauan
- Terdapat ciri Show Survey Logic baharu yang membolehkan anda melihat segala-galanya tentang tinjauan (atau kumpulan atau soalan) pada satu halaman.
- Ia menunjukkan butiran peringkat Kumpulan, Soalan, Subsoalan dan Jawapan untuk skop yang dipilih (tinjauan lwn. kumpulan lwn. soalan)
- Ia juga menunjukkan kaitan, kaitan peringkat subsoalan (untuk array_filter dan array_filter_exclude), dan persamaan pengesahan yang dijana (untuk preg dan sebarang peraturan pengesahan seperti jumlah/bilangan nilai minimum/maksimum), serta semua atribut soalan yang tidak kosong.
- Segala-galanya diserlahkan sintaksnya supaya anda boleh melihat ralat sintaks yang mungkin berlaku (seperti kurungan tidak seimbang atau penggunaan pemboleh ubah sebelum diisytiharkan)
- Penyerlahan sintaks menyokong navigasi dan penyuntingan tinjauan dengan pantas.
- Jika anda klik pada nama pemboleh ubah, ia membuka tetingkap pelayar (atau tab) yang menunjukkan soalan tersebut dan membolehkan anda mengeditnya.
- Jika anda klik pada nama kumpulan, ia membuka tetingkap pelayar (atau tab) yang menunjukkan paparan susun semula kumpulan supaya anda boleh memindahkan soalan dengan mudah.
- Semua atribut soalan juga diserlahkan sintaksnya. Ini membolehkan anda menetapkan dan melihat ungkapan dalam pilihan soalan lanjutan (seperti menjadikan jumlah/bilangan nilai maksimum/minimum berdasarkan ungkapan)
- Pengarang EM menggunakan paparan serupa (sedikit lebih kemas) untuk membolehkan rakan kerjasama beliau, iaitu ahli Epidemiologi dan Lembaga Semakan Institusi, mengesahkan dan meluluskan tinjauan dengan beribu-ribu soalan dalam temu bual berstruktur yang sangat bercabang dan disesuaikan
Bermula
Cara terbaik untuk bermula dengan EM ialah:
- Pasang versi stabil terkini dari http://www.limesurvey.org/en/download
- Import dan terokai tinjauan sampel.
- Terokai kes penggunaan dan panduan cara serta contoh langkah demi langkah.
- Terokai dokumentasi EM (halaman ini)
- Periksa suite ujian EM terbina dalam
- Dari mana-mana tinjauan, di bawah alatan, pilih pilihan EM
- Fungsi yang ada menyenaraikan 70+ fungsi dan sintaksnya
- Ujian Unit bagi Ungkapan Terpencil
- menunjukkan contoh penggunaan semua fungsi dan operator EM, serta keputusan PHP dan JavaScript
- perhatikan bahawa terdapat beberapa fungsi yang menghasilkan keputusan berbeza dalam versi PHP dan JavaScript, jadi halaman ini membolehkan anda merancang logik EM anda dengan sewajarnya.
Apakah Fungsi yang Dilanjutkan/Diganti oleh Expression Manager? (LimeSurvey <= 1.91+)
Syarat => Kaitan
Syarat mengawal soalan yang kelihatan. Sintaks umumnya ialah SGQA operator Nilai, seperti 111X2X3 == "Y". Syarat boleh digabungkan dengan AND atau OR, tetapi mencampurkan AND dan OR agak sukar. Syarat itu sendiri disimpan dalam jadual yang berasingan, dan sebahagian besar kod LimeSurvey ditumpukan untuk mengurus Syarat. Disebabkan akses pangkalan data yang meluas, memproses sejumlah besar syarat boleh menyebabkan masalah prestasi yang ketara. Tambahan pula, apabila syarat telah ditetapkan pada soalan atau kumpulan, anda selalunya tidak dibenarkan menyusun semula atau menghapusnya.
Penilaian => Persamaan dan Penyesuaian Mikro
Penilaian membolehkan pengguna mencipta skor skala daripada koleksi soalan. Namun, ia tidak boleh berubah secara dinamik pada halaman semasa, dan nilainya tidak disimpan dalam pangkalan data.
Penggantian => Penyesuaian Mikro
Pengguna boleh menyesuaikan sesetengah mesej dan soalan berdasarkan jawapan sebelumnya. Contohnya, soalan mungkin berbunyi, {TOKEN:FIRSTNAME}, you said {SPORT.shown} was your favorite sport. Namun, tidak mungkin untuk melakukan penyesuaian bersyarat (seperti menyebut "Mr." atau "Mrs." bergantung pada jantina seseorang), atau mengkonjugasi kata kerja atau menukar bentuk kata nama tanpa JavaScript yang rumit. Pengarang boleh melaksanakan tinjauan yang kelihatan menyesuaikan soalan, tetapi ia memerlukan soalan berasingan untuk setiap permutasi, dan syarat yang kompleks untuk menentukan soalan mana yang hendak dipaparkan.
Pengesahan
Soalan boleh disahkan dengan ungkapan nalar (regular expression), atau nilai minimum/maksimum, atau membenarkan satu jawapan berfungsi sebagai nilai minimum atau maksimum. Namun, pengesahan tidak boleh berdasarkan pengiraan pemboleh ubah lain tanpa JavaScript yang rumit.
Persamaan
Persamaan tidak disokong tanpa JavaScript yang rumit.
Jenis Soalan Persamaan
Persamaan tidak boleh disimpan dalam pangkalan data (cth. skor akhir bagi penilaian) tanpa JavaScript yang rumit.
Bagaimanakah Expression Manager Akan Menggantikan/Melanjutkan Fungsi Tersebut?
Expression Manager ialah modul teras baharu dalam LimeSurvey yang menjadikan lebih mudah untuk menyokong jenis fungsi kompleks yang dahulunya memerlukan JavaScript tersuai. Ia juga menggantikan cara LimeSurvey menguruskan Syarat dan Penilaian pada masa ini.
Istilah Baharu Apabila Merujuk kepada Expression Manager (EM)
EM "berfikir" tentang fungsinya dalam istilah berikut:
- Percabangan berasaskan Kaitan - jika sesuatu soalan berkaitan, maka tanyakannya, jika tidak jangan (cth. jadikan ia tidak kelihatan, dan tandakannya sebagai NULL dalam pangkalan data). Terdapat medan Kaitan baharu untuk semua jenis soalan, dan juga untuk setiap Kumpulan (supaya anda boleh menggunakan satu set syarat pada keseluruhan kumpulan tanpa perlu menyalin syarat yang sama ke setiap soalan, dan/atau menggabungkan logik bersyarat peringkat kumpulan dan soalan).
- Penyesuaian (Tailoring) - Setelah anda tahu soalan mana yang perlu ditanya, penyesuaian (kadangkala dipanggil piping) menentukan bagaimana soalan itu perlu ditanya. Ini membolehkan anda menyokong bukan sahaja penggantian ringkas (seperti {TOKEN:FIRSTNAME}), tetapi juga konjugasi kata kerja dan perubahan bentuk kata nama berdasarkan jantina atau bilangan subjek anda. Ia juga membolehkan anda menukar mesej yang anda sampaikan kepada subjek berdasarkan sama ada mereka menjawab (atau bagaimana mereka menjawab) soalan lain.
- Persamaan - EM menambah jenis soalan baharu yang dipanggil Persamaan yang menyimpan hasil sesuatu Ungkapan. Hasil persamaan ini dikira dan ditulis ke pangkalan data, walaupun anda menyembunyikannya pada halaman. Oleh itu, ia berguna untuk pengiraan skor tersembunyi, navigasi berdasarkan persamaan kompleks, penilaian, dan laporan yang perlu dijana dan mudah didapati dalam pangkalan data.
Kaitan dan Kaitan Lata (Cascading)
Setiap jenis soalan kini mempunyai pilihan Kaitan yang mengawal sama ada soalan dipaparkan. EM memproses setiap Persamaan Kaitan mengikut susunan ia sepatutnya muncul dalam tinjauan. Jika ungkapan itu benar (atau tiada - untuk menyokong tinjauan lama), soalan akan dipaparkan. Jika ia tidak berkaitan, soalan akan disembunyikan, dan nilainya akan dijadikan NULL dalam pangkalan data. Jika tiada soalan yang berkaitan dalam sesuatu kumpulan, keseluruhan kumpulan akan dilangkau.
Selain itu, jika mana-mana pemboleh ubah dalam ungkapan tidak berkaitan, maka ungkapan itu sentiasa bernilai palsu. Ini membolehkan Kaitan Lata supaya anda tidak perlu menulis persamaan Kaitan yang sangat panjang untuk setiap soalan.
Katakan anda mempunyai 5 soalan Q1-Q5, dan anda hanya mahu menunjukkan Q2 jika Q1 dijawab, dan Q3 jika Q2 dijawab, dan seterusnya. Persamaan kaitan mungkin seperti berikut:
| Kod Soalan | Kaitan | Soalan |
|---|---|---|
| Q1 | 1 | Siapakah nama anda? |
| Q2 | Q1 | {Q1}, berapakah umur anda? |
| Q3 | Q2 | Jadi, anda berumur {Q2} tahun. Adakah anda sudah berkahwin? |
| Q4 | Q3 == "Y" | {Q1}, sudah berapa lama anda berkahwin? |
| Q5 | Q4 | Berapa ramaikah anak anda, {Q1}? |
Pengiraan kaitan juga berfungsi dalam JavaScript - jadi anda boleh meletakkan semua soalan di atas pada satu halaman dan ia masih akan berfungsi seperti yang dijangkakan. Malah, EM menggantikan sepenuhnya cara EM memproses format tinjauan Tinjauan lwn. Kumpulan lwn. Satu Soalan pada satu masa. Semuanya kini menggunakan enjin navigasi yang sama sepenuhnya, jadi ia berfungsi dengan serupa tanpa mengira gaya tinjauan.
Selagi anda berada pada halaman yang sama, sebarang data yang anda masukkan akan kekal di situ, cuma tersembunyi. Jadi, jika anda memasukkan sedikit maklumat, kemudian memilih pilihan yang menjadikannya tidak berkaitan, kemudian menjadikannya berkaitan semula, jawapan anda masih akan tersedia. Namun, sebaik sahaja anda berpindah ke halaman lain, semua jawapan yang tidak berkaitan akan hilang demi integriti set data.
Kaitan Peringkat Kumpulan
Expression Manager juga menyokong kaitan peringkat kumpulan. Ini memudahkan pelaksanaan gelung. Katakan anda ingin mengumpul maklumat tentang sehingga 10 entiti (seperti produk atau ahli isi rumah), dengan anda menentukan dahulu berapa banyak entiti yang memerlukan susulan (contohnya dengan bertanya berapa orang tinggal dalam isi rumah, atau meminta responden menandakan produk yang mereka sukai daripada senarai yang panjang). Selepas mengetahui bilangan entiti yang memerlukan susulan, anda boleh menggunakan kaitan peringkat kumpulan seperti {count >= 1}, {count >=2}, ... {count >= 10} untuk setiap satu daripada 10 kumpulan soalan susulan. Dalam setiap kumpulan, anda boleh menggunakan logik bersyarat peringkat soalan (contohnya soalan susulan khusus jantina atau umur untuk setiap subjek). Persamaan kaitan peringkat soalan dan peringkat kumpulan digabungkan dengan AND untuk menentukan soalan yang patut dipaparkan.
Penyesuaian / Piping
Apa-apa sahaja di dalam kurungan kerinting kini dianggap sebagai Ungkapan (dengan satu pengecualian yang diterangkan di bawah). Ungkapan mempunyai akses kepada semua LimeReplacementFields, semua pemboleh ubah (melalui beberapa alias), semua operator persamaan biasa (matematik, logik dan perbandingan), serta berpuluh-puluh fungsi (yang berfungsi secara dinamik di sisi klien).
Dengan menggunakan persamaan ini, anda boleh melakukan perkara seperti:
- Memaparkan mesej yang disesuaikan secara bersyarat kepada responden berdasarkan jawapan sebelumnya
- Mencipta penilaian dan memaparkan keputusan penilaian (atau bercabang atau memaparkan mesej secara bersyarat) berdasarkan keputusan tersebut, tanpa menggunakan modul Penilaian itu sendiri
- Menukar bentuk kata kerja dan kata nama dalam soalan, jawapan dan laporan.
- Memaparkan ringkasan jawapan sebelum halaman "Show your answers" di penghujung tinjauan
Persamaan
Terdapat jenis soalan baharu yang dipanggil Persamaan. Ia seperti soalan Boilerplate, kecuali ia menyimpan nilai apa yang dipaparkan dalam pangkalan data. Jadi, jika teks soalan Persamaan mengandungi pengiraan penilaian, nilai tersebut akan disimpan dalam pangkalan data dalam satu pemboleh ubah yang boleh dipaparkan dalam statistik awam atau persendirian.
Ini menyelesaikan permintaan lazim untuk menyimpan skor penilaian dalam pangkalan data
Sintaks
Apa-apa sahaja yang terkandung di dalam kurungan kerinting kini dianggap sebagai Ungkapan (dengan satu pengecualian: tidak boleh ada ruang kosong di hadapan atau di belakang - ini diperlukan bagi memastikan Expression Manager tidak cuba memproses JavaScript yang tertanam).
Perhatikan bahawa ungkapan boleh merangkumi beberapa baris, selagi tiada ruang kosong selepas kurungan kerinting pembuka atau sebelum kurungan kerinting penutup. Ini amat berguna untuk pernyataan if() bersarang seperti ini:
{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',
''
)
)
)
)
)
)
)
)}
- Semua operator matematik standard (cth. +,-,*,/,!)
- Semua operator perbandingan standard (cth. <,<=,==,!=,>,>=, serta setara berikut: lt,le,eq,ne,gt,ge)
- Tanda kurung (supaya anda boleh mengumpulkan sub-ungkapan)
- Operator bersyarat (cth. &&,| | dan setara berikut: and,or)
- Rentetan berkutip tunggal dan berkutip ganda (yang masing-masing boleh menyisipkan rentetan dengan jenis kutip yang satu lagi)
- Operator koma (supaya boleh ada senarai ungkapan dan hanya hasil terakhir dikembalikan)
- Operator penetapan (=)
- Pemboleh ubah pratakrif (untuk merujuk soalan, atribut soalan dan jawapan) - cth. semua kod SGQA
- Fungsi pratakrif (sudah ada 70+, dan mudah untuk menambah lagi)
Operator
Sintaks EM mengikut keutamaan operator biasa:
| Tahap | Operator | Keterangan |
|---|---|---|
| 1 | () | tanda kurung untuk pengumpulan atau memanggil fungsi |
| 2 | ! - + | operator unari: not, penafian, tambah unari |
| 3 | * / | darab, bahagi |
| 4 | + - | tambah, tolak |
| 5 | < <= > >= lt le gt ge | perbandingan relatif |
| 6 | == != eq ne | perbandingan kesamaan |
| 7 | and | AND logik |
| 8 | or | OR logik |
| 9 | = | operator penetapan |
| 10 | , | operator koma |
Amaran tentang operator tambah (+)
Untuk konsistensi antara JavaScript dan PHP, operator tambah (+) melakukan penambahan jika kedua-dua operan ialah nombor, tetapi melakukan penyambungan jika kedua-dua bahagian ialah rentetan bukan nombor. Walau bagaimanapun, kami mengesyorkan penggunaan fungsi join() untuk penyambungan dan fungsi sum() untuk penambahan, kerana ini menjelaskan niat anda dan mengelakkan keputusan yang tidak dijangka jika anda menjangkakan rentetan tetapi mendapat nombor (atau sebaliknya).
Amaran tentang ketidakpadanan antara nombor dan rentetan serta perbandingan abjad
Apabila anda ingin membandingkan nilai dengan perbandingan relatif atau kesamaan, beri perhatian kepada ketidakpadanan jenis. Nilai yang dimasukkan oleh pengguna atau kod jawapan yang dipilih boleh digunakan sebagai nombor jika ia jelas ialah nombor.
Jika anda mengapit salah satu nilai dengan "ia akan memaksa perbandingan sebagai teks (perbandingan abjad). Jika anda ingin membandingkan secara berangka, jangan sekali-kali mengapit nombor dengan tanda petikan, ".
Contohnya Q0.NAOK > "50" adalah benar jika Q0.NAOK ialah soalan berangka dengan nilai 9. Ini kerana operator > akan menganggapnya sebagai perbandingan abjad dan bukan berangka.
Untuk memastikan perbandingan nilai integer, anda boleh menggunakan intval(Q0.NAOK) > 50, cuma ingat jika Q0.NAOK bukan nombor (kosong atau rentetan), maka intval(Q0.NAOK) == 0. Untuk membandingkan nilai rentetan ("A" < "B") gunakan strcmp secara terus : strcmp(Q0.NAOK,"B") atau strcmp(Q0.NAOK,"A5").
Berhati-hati semasa menggunakan Operator Penetapan (=)
Perhatikan bahawa anda harus mengelakkan penggunaan operator penetapan melainkan benar-benar perlu, kerana ia mungkin menyebabkan kesan sampingan yang tidak dijangka. Contohnya, jika anda menukar nilai jawapan sebelumnya, logik kaitan lata dan pengesahan antara soalan tersebut dan soalan semasa tidak dikira semula, maka anda mungkin mendapat data yang tidak konsisten secara dalaman (cth. soalan yang kekal berjawab tetapi sepatutnya di-NULL-kan, atau soalan yang dilangkau tetapi sepatutnya dijawab). Secara amnya, jika anda ingin menetapkan nilai kepada pemboleh ubah, anda harus mencipta soalan jenis Persamaan, dan menggunakan ungkapan untuk menetapkan nilainya. Walau bagaimanapun, ada kalanya yang jarang berlaku apabila orang benar-benar memerlukan operator ini, jadi kami menyediakannya.
Untuk mengingatkan anda tentang operator ini, ia dipaparkan dalam fon merah di dalam persamaan sintaks (supaya anda tidak mengelirukannya dengan "==")
Menggunakan Operator Penetapan
Alasan utama anda mungkin ingin menggunakan penetapan ialah:
- Anda perlu menetapkan nilai lalai bagi soalan yang tidak menerima nilai lalai melalui persamaan (seperti senarai radio, di mana antara muka pengguna membolehkan anda memilih salah satu pilihan jawapan, tetapi tidak membenarkan anda memasukkan persamaan). Walau bagaimanapun, berhati-hatilah, kerana LimeSurvey tidak dapat mengesahkan bahawa persamaan anda menghasilkan salah satu jawapan yang dibenarkan bagi soalan tersebut.
- Anda perlu menukar secara paksa jawapan kepada soalan sebelumnya berdasarkan jawapan kemudian
- Anda memerlukan kuota yang kompleks : menggunakan satu soalan pilihan tunggal tersembunyi untuk kuota dan menetapkannya menggunakan penetapan
- dsb...
Anda boleh menggunakan keseluruhan sistem Expression Manager untuk tujuan ini.
Beberapa contoh:
- Tetapkan jawapan kepada soalan teks pendek dalam huruf kecil :
{QCODE=strtolower(QCODE.NAOK)} - Tetapkan jawapan lalai kepada jenis soalan tatasusunan pada permulaan tinjauan :
{Q1_SQ1=((is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)} - Tetapkan jawapan lalai kepada jenis soalan tatasusunan teks pada permulaan tinjauan :
{Q1_SQY1_SQX1 = ((is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)} - Tetapkan jawapan dengan syarat :
{QCODE=if(YesNo="Y","A1","")}
Keselamatan XSS
Apabila XSS didayakan, sesetengah sistem Expression Manager tidak boleh digunakan :
- memulakan tag HTML dalam satu ungkapan tetapi menamatkannya dalam ungkapan lain
- menggunakan ungkapan kompleks dalam URL.
Contoh dan penyelesaian alternatif
{if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")}tidak berfungsi dengan keselamatan XSS, di sini anda boleh menggunakan{if(1,"<strong>information</strong>","information")}<a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a>, di sini anda boleh menggunakan soalan persamaan kerana penggunaan kod soalan yang lengkap dibenarkan :<a href="/script.php?value={EQUATION.NAOK}">next</a>
Akses kepada Pemboleh Ubah
Expression Manager menyediakan akses baca sahaja kepada mana-mana pemboleh ubah yang mungkin diperlukan. Untuk keserasian ke belakang, ia menyediakan akses kepada yang berikut:
- TOKEN:xxx - nilai sesuatu TOKEN (cth. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (Hanya untuk tinjauan yang BUKAN tanpa nama).
- QCODE.shown - nilai paparan bagi sesuatu jawapan (cth. "Ya") menggunakan Expression Manager.
- Semua nilai {XXX} yang digunakan oleh templat.
- Dalam teks soalan, anda boleh menggunakan {QID} yang digantikan dengan ID soalan dan {SGQ} yang digantikan dengan SGQA bagi soalan tersebut
Selain itu, Expression Manager membolehkan anda merujuk pemboleh ubah menggunakan Kod Soalan (lajur 'title' dalam jadual soalan di dalam pangkalan data). Ini juga merupakan label pemboleh ubah yang digunakan apabila anda mengeksport data anda ke SPSS, R atau SAS. Sebagai contoh, jika anda mempunyai soalan tentang nama, umur dan jantina, anda boleh menamakan pemboleh ubah tersebut name, age dan gender dan bukannya 12345X13X22, 12345X13X23 dan 12345X13X24. Ini menjadikan persamaan lebih mudah dibaca dan logiknya lebih mudah disahkan oleh semua orang, di samping membolehkan soalan disusun semula tanpa perlu menjejaki nombor kumpulan atau soalan.
Penting: Hanya selamat untuk merujuk pemboleh ubah yang terdapat dalam halaman atau soalan sebelumnya.
Selain itu, Expression Manager membolehkan anda mengakses banyak sifat bagi soalan:
| Sintaks | Maksud | Contoh | Hasil Contoh |
|---|---|---|---|
| Qcode | alias bagi Qcode.code | {implode(',',name,gender)} | 'Tom','M' |
| Qcode.code | kod jawapan yang dipilih bagi soalan jika soalan itu berkaitan (jika tidak, kosong), atau nilai teks jika ia bukan soalan berkod | {implode(',',name.code,gender.code)} | 'Tom','M' |
| Qcode.NAOK | sama seperti Qcode - lihat perbincangan tentang NAOK | {gender.NAOK} | 'M' |
| Qcode.value | nilai penilaian bagi soalan jika soalan itu berkaitan (jika tidak, kosong), atau nilai teks jika ia bukan soalan berkod | {gender.value} | '1' |
| Qcode.valueNAOK | sama seperti Qcode.value - lihat perbincangan tentang NAOK | {gender.valueNAOK} | '1' |
| Qcode.shown | nilai paparan bagi soalan | {implode(',',name.shown,gender.shown)} | 'Tom','Male' |
| Qcode.question | teks soalan | {gender.question} | 'What is your gender?' |
| Qcode.mandatory | sama ada soalan itu wajib (Y/N) | {gender.mandatory} | 'N' |
| Qcode.qid | nombor soalan dalaman (bukan nombor jujukan) | {gender.qid} | 337 |
| Qcode.type | jenis soalan | {gender.type} | 'G' |
| Qcode.jsName | nama javascript yang betul bagi soalan, sama ada diisytiharkan pada halaman ini atau tidak | {gender.jsName} | 'java1827X3X337' |
| Qcode.gid | nombor kumpulan dalaman (bukan nombor jujukan) | {gender.gid} | 3 |
| Qcode.qseq | nombor jujukan soalan, bermula dari 0 | {gender.qseq} | 5 |
| Qcode.gseq | nombor jujukan kumpulan, bermula dari 0 | {gender.gseq} | 1 |
| Qcode.relevanceStatus | sama ada soalan itu kini berkaitan (0 atau 1) | {gender.relevanceStatus} | 1 |
| Qcode.relevance | persamaan kaitan peringkat soalan | {gender.relevance} | '!is_empty(name)' |
| Qcode.grelevance | persamaan kaitan peringkat kumpulan | {gender.grelevance} | 'num_children >= 5' |
| Qcode.sgqa | nilai SGQA bagi soalan ini | {gender.sgqa} | '1827X3X337' |
Isu Editor HTML
Jika anda menggunakan Editor HTML, sesetengah aksara digantikan dengan entiti HTML.
- & dengan &
- < dengan <
- > dengan >
Jika anda menggunakan Editor HTML, anda perlu menggunakan :
- and untuk &
- lt untuk <
- le untuk <=
- gt untuk >
- ge untuk >=
Penamaan Pemboleh Ubah Qcode
Berikut ialah butiran cara membina Qcode (dan mengakses beberapa sifat) mengikut jenis soalan. Secara umum, Qcode dibina seperti berikut:
QuestionCode . '_' . SubQuestionCode . '_' . ScaleId
Kod Subsoalan & ID Skala perlu digunakan atau tidak bergantung pada jenis soalan - lihat jadual di bawah. Untuk comment dan other, kod soalan ialah QuestionCode_comment dan QuestionCode_other
| Jenis | Keterangan | Kod | Subsoalan | Pilihan jawapan | Skala | Kod jawapan | Jawapan dipaparkan | Kaitan |
|---|---|---|---|---|---|---|---|---|
| 5 | Butang Radio Pilihan 5 poin | Q1 | 1-5 | {Q1} | {Q1.shown} | {Q1==3} | ||
| B | Tatasusunan (pilihan 10 poin) Butang Radio | Q2 | L1-L6 | 1-10 | {Q2_L2} | {Q2_L2.shown} | {Q2_L2==7} | |
| A | Tatasusunan (pilihan 5 poin) Butang Radio | Q3 | 1-5 | 1-5 | {Q3_1} | {Q3_1.shown} | {Q3_1>=3} | |
| 1 | Tatasusunan (Label Fleksibel) Skala Dwi | Q4 | sq1-sq5 | 0:a1-a3 | 1:b1-b3 | {Q4_sq1_0} | {Q4_sq1_1.shown} | {Q4_sq1_1=='b2'} |
| H | Tatasusunan (Fleksibel) - Format Lajur | Q5 | 1-5 | s,m,t | {Q5_1} | {Q5_1.shown} | {Q5_1=='s'} | |
| F | Tatasusunan (Fleksibel) - Format Baris | Q6 | F1-F5 | 1-5 | {Q6_F3} | {Q6_F3.shown} | {Q6_F3==4} | |
| E | Tatasusunan (Naik/Sama/Turun) Butang Radio | Q7 | 1-7 | I,S,D | {Q7_4} | {Q7_4.shown} | {Q7_4=='D'} | |
| : | Tatasusunan (Multi Fleksi) 1 hingga 10 | Q8 | ls1,todo,ls2 | min,max,avg | {Q8_ls1_max} | {Q8_ls2_avg.shown} | {Q8_ls2_min==7} | |
| ; | Tatasusunan (Multi Fleksi) Teks | Q9 | hp,st,sw | 1st,2nd,3rd | {Q9_hp_3rd} | {Q9_hp_3rd.shown} | {Q9_hp_3rd=='Peter'} | |
| C | Tatasusunan (Ya/Tidak pasti/Tidak) Butang Radio | Q10 | 1-5 | Y,N,U | {Q10_1} | {Q10_1.shown} | {Q10_3=='Y'} | |
| X | Soalan Boilerplate | Q11 | {Q11.shown} | |||||
| D | Tarikh | Q12 | {Q12} | {Q12.shown} | ||||
| * | Persamaan | Q13 | {Q13} | {Q13.shown} | {Q13>5} | |||
| ~124~ | Muat naik fail (merekodkan bilangan fail yang dimuat naik) | Q14 | {Q14} | {Q14>0} | ||||
| G | Senarai drop-down Jantina | Q15 | M,F | {Q15} | {Q15.shown} | {Q15=='M'} | ||
| U | Teks percuma besar | Q16 | {Q16} | {Q16.shown} | {strlen(Q16)>100} | |||
| I | Soalan Bahasa | Q17 | {Q17} | {Q17.shown} | {Q17=='en'} | |||
| ! | Senarai - Drop-down | Q18 | 1-5 | {Q18} | {Q18.shown} | {Q18==3} | ||
| L | Senarai Drop-Down/Senarai Butang Radio | Q19 | A-Z | {Q19} | {Q19.shown} | {Q19=='X'} | ||
| O | Senaraikan dengan komen Drop-Down/Senarai Butang Radio + Textarea | Q20 | A-F | {Q20},{Q20comment} | {Q20.shown} | {Q20=='B'} | ||
| T | Teks bebas panjang | Q21 | {Q21} | {Q21.shown} | {strstr(Q21,'hello')>0} | |||
| M | Pelbagai pilihan Kotak semak | Q22 | A-F, other | {Q22_E}, {Q22_other} | {Q22_E.shown}, {Q22_other.shown} | {Q22_E=='Y'} | ||
| P | Pelbagai pilihan dengan komen Kotak semak + Teks | Q23 | A-F | {Q23_D}, {Q23_Dcomment} | {Q23_D.shown} | {!is_empty(Q23)} | ||
| K | Soalan Berangka Berbilang | Q24 | self,mom,dad | {Q24_self} | {Q24_self.shown} | {Q24_self>30} | ||
| Q | Teks pendek berbilang | Q25 | A-F | {Q25_B} | {Q25_B.shown} | {substr(Q25_B,1,1)=='Q'} | ||
| N | Jenis Soalan Berangka | Q26 | {Q26} | {Q26.shown} | {Q26 > 30} | |||
| R | Gaya Kedudukan | Q27 | 1-4 | {Q27_1} | {Q27_1.shown} | {Q27_1==3} | ||
| S | Teks percuma pendek | Q28 | {Q28} | {Q28.shown} | {Q28=='mine'} | |||
| Y | Butang Radio Ya/Tidak | Q29 | {Q29} | {Q29.shown} | {Q29=='Y'} |
Pemboleh ubah terpelihara 'this', 'self' dan 'that'
Selalunya, anda ingin menilai semua bahagian sesuatu soalan, seperti mengira berapa banyak subsoalan yang telah dijawab, atau menjumlahkan skor. Pada masa lain, anda ingin memproses hanya baris atau lajur tertentu bagi sesuatu soalan (seperti mendapatkan jumlah baris atau lajur dan menyimpannya dalam pangkalan data). Pemboleh ubah terpelihara ini menjadikan proses tersebut agak mudah.
Pemboleh ubah 'this' digunakan secara eksklusif dalam pilihan lanjutan soalan "Whole question validation equation" dan "Sub-question validation equation". Ia dikembangkan kepada nama pemboleh ubah bagi setiap sel dalam soalan tersebut. Jadi, jika anda ingin memastikan setiap entri lebih besar daripada tiga, anda akan menetapkan "Sub-question validation equation" kepada (this > 3).
Pemboleh ubah 'self' dan 'that' lebih berkuasa, dan berfungsi sebagai makro yang dikembangkan sebelum persamaan diproses. Pilihan sintaksnya ialah:
- self
- self.suffix
- self.sub-selector
- self.sub-selector.suffix
suffix (akhiran) ialah mana-mana akhiran qcode biasa (cth. NAOK, value, shown)
sub-selector ialah salah satu daripada:
- comments - hanya subsoalan yang merupakan komen (cth., daripada pelbagai pilihan dengan komen dan senaraikan dengan komen)
- nocomments - hanya subsoalan yang bukan komen
- sq_X - dengan X ialah pengecam baris atau lajur. Hanya subsoalan yang sepadan dengan corak X dipilih. Perhatikan bahawa carian dilakukan pada pengecam kod yang lengkap, kemudian sq_X sepadan dan merangkumi subsoalan nX, X, Xn (cth. jika anda menggunakan sq_1, subsoalan a1, 1a, 1, 11 atau 001 turut disertakan). Beri perhatian pada jenis soalan skala dwi yang kod subsoalannya ialah QCODE_SQCODE_1 dan QCODE_SQCODE_1, dan pada jenis soalan kedudukan yang kod subsoalannya ialah QCODE_1,QCODE_2 ....
- nosq_X - dengan X ialah pengecam baris atau lajur. Hanya subsoalan yang tidak sepadan dengan corak X dipilih. Perhatikan bahawa carian dilakukan pada pengecam kod yang lengkap, kemudian nosq_X sepadan dan tidak merangkumi subsoalan nX, X, Xn
Contoh:
- Adakah mana-mana bahagian soalan telah dijawab? {count(self.NAOK)>0}
- Apakah skor penilaian bagi soalan ini? {sum(self.value)}
Anda juga boleh menggunakannya untuk mendapatkan jumlah baris dan lajur. Katakan anda mempunyai tatasusunan nombor dengan baris A-E dan lajur 1-5.
- Apakah jumlah besar? {sum(self.NAOK)}
- Apakah jumlah baris B? {sum(self.sq_B.NAOK)}
- Apakah jumlah lajur 3? {sum(self.sq_3.NAOK)}
Pemboleh ubah 'that' adalah seperti pemboleh ubah 'self', tetapi membolehkan anda merujuk soalan lain. Sintaksnya ialah:
- that.qname
- that.qname.suffix
- that.qname.sub-selector
- that.qname.sub-selector.suffix
qname ialah nama soalan tanpa sebarang sambungan subsoalan. Jadi, katakan anda mencipta soalan 'q1', itulah qname nya
Contoh:
- Adakah mana-mana bahagian soalan q1 telah dijawab? {count(that.q1.NAOK)>0}
- Apakah skor penilaian bagi q2? {sum(that.q2.NAOK)}
- Apakah jumlah besar bagi q3? {sum(that.q3.NAOK)}
- Apakah jumlah baris C dalam q4? {sum(that.q4.sq_C.NAOK)}
- Apakah jumlah lajur 2 dalam q4? {sum(that.q4.sq_2.NAOK)}
Pemboleh ubah 'self' dan 'that' boleh digunakan dalam mana-mana kaitan, pengesahan atau penyesuaian (tailoring).
Satu perkara yang perlu diberi perhatian ialah apabila anda menggunakan ciri Tunjukkan Fail Logik, ia akan memaparkan nilai 'self' dan 'that' yang telah dikembangkan. Ini membolehkan anda melihat persamaan sebenar yang akan dijana supaya anda (dan Expression Manager) dapat mengesahkan bahawa pemboleh ubah tersebut wujud. Ini mungkin kelihatan mengelirukan kerana anda mungkin melihat persamaan yang agak panjang. Walau bagaimanapun, jika anda mengedit soalan tersebut, anda akan melihat persamaan asal yang menggunakan 'self' dan/atau 'that'
Perhatikan juga bahawa anda tidak sepatutnya menggunakan pemboleh ubah ini jika (a) anda ingin menamakan secara eksplisit setiap pemboleh ubah yang digunakan dalam persamaan, atau (b) menggunakan pemboleh ubah yang tidak mempunyai subsoalan (cth. soalan jawapan tunggal). Dalam kes tersebut, menambah awalan 'that' pada pemboleh ubah adalah berlebihan, dan anda berisiko mendapat hasil yang tidak dijangka.
Penggunaan NAOK
NAOK --> "Not Applicable" (NA) is alright (OK), iaitu "Tidak Berkenaan" (NA) adalah dibenarkan (OK)
Menggunakan NAOK bermaksud semua atau sebahagian pemboleh ubah tidak relevan (cth. "Tidak Berkenaan" (NA) adalah dibenarkan (OK)).
Apabila anda meletakkan sesuatu pemboleh ubah daripada soalan dalam mana-mana persamaan: jika soalan (atau subsoalan) tersebut disembunyikan oleh syarat, ini akan melumpuhkan keseluruhan persamaan.
Contohnya: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) sentiasa memberikan rentetan kosong jika satu subsoalan Q1 ditapis. Untuk mengira bilangan subsoalan yang ditandakan dalam soalan sedemikian, anda boleh menggunakan count(Q1_SQ1.NAOK,Q1_SQ2.NAOK,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Jika subsoalan tersebut disembunyikan: Expression Manager memulangkan rentetan kosong.
Tanpa NAOK: jika satu soalan atau satu subsoalan disembunyikan, Expression Manager sentiasa memulangkan rentetan kosong, sama seperti memulangkan false.
Akhiran .shown sentiasa menggunakan sistem NAOK (rentetan kosong jika disembunyikan), tetapi jika anda memerlukan kod jawapan, adalah idea yang baik untuk sentiasa menambah .NAOK selepas kod soalan, kecuali jika anda memerlukannya dan tahu apa yang anda lakukan.
Contoh dan maklumat lain disediakan di Overriding Cascading Conditions
Akses kepada Fungsi
Expression Manager menyediakan akses kepada fungsi matematik, rentetan dan fungsi yang ditakrifkan pengguna, seperti yang ditunjukkan di bawah. Ia mempunyai padanan PHP dan JavaScript untuk fungsi-fungsi ini supaya ia berfungsi secara sama pada bahagian pelayan (PHP) dan bahagian klien (JavaScript). Fungsi baharu mudah ditambah.
Fungsi yang Dilaksanakan
Fungsi berikut tersedia pada masa ini:
| Fungsi | Maksud | Sintaks |
|---|---|---|
| abs | Nilai mutlak | number abs(number) |
| acos | Lengkok kosinus | number acos(number) |
| addslashes | Petik rentetan dengan garis condong | string addslashes(string) |
| asin | Lengkok sinus | number asin(number) |
| atan | Lengkok tangen | number atan(number) |
| atan2 | Lengkok tangen bagi dua pembolehubah | number atan2(number, number) |
| ceil | Bundarkan pecahan ke atas | number ceil(number) |
| checkdate | Mengembalikan benar(1) jika ia tarikh yang sah dalam kalendar Gregorian | bool checkdate(month,day,year) |
| convert_value | Tukar nilai berangka menggunakan inputTable dan outputTable nilai berangka | number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList) |
| cos | Kosinus | number cos(number) |
| count | Kira bilangan soalan yang dijawab (tidak kosong) dalam senarai | number count(arg1, arg12, ..., argN) |
| countif | Kira bilangan soalan yang dijawab dalam senarai yang sama dengan argumen pertama | number countif(matches, arg1, arg2, ... argN) |
| countifop | Kira bilangan soalan yang dijawab dalam senarai yang memenuhi kriteria (arg op value) | number countifop(op, value, arg1, arg2, ... argN) |
| date | Format tarikh/masa setempat | string date(format [, timestamp=time()]) |
| exp | Mengira eksponen bagi e | number exp(number) |
| fixnum | Paparkan nombor dengan koma sebagai pemisah perpuluhan, jika perlu | string fixnum(number) |
| floor | Bundarkan pecahan ke bawah | number floor(number) |
| gmdate | Format tarikh/masa GMT | string gmdate(format [, timestamp=time()]) |
| html_entity_decode | Tukar semua entiti HTML kepada aksara yang berkenaan (sentiasa menggunakan ENT_QUOTES dan UTF-8) | string html_entity_decode(string) |
| htmlentities | Tukar semua aksara yang berkenaan kepada entiti HTML (sentiasa menggunakan ENT_QUOTES dan UTF-8) | string htmlentities(string) |
| expr_mgr_htmlspecialchars | Tukar aksara khas kepada entiti HTML (sentiasa menggunakan ENT_QUOTES dan UTF-8) | string htmlspecialchars(string) |
| expr_mgr_htmlspecialchars_decode | Tukar entiti HTML khas kembali kepada aksara (sentiasa menggunakan ENT_QUOTES dan UTF-8) | string htmlspecialchars_decode(string) |
| idate | Formatkan masa/tarikh tempatan sebagai integer | string idate(string [, timestamp=time()]) |
| if (Updated in 3.0.2 ) | if gaya Excel(test,result_if_true[,result_if_false = ""]) | if(test,result_if_true[,result_if_false = ""]) |
| implode | Sertai elemen tatasusunan dengan rentetan | string implode(glue,arg1,arg2,...,argN) |
| intval | Dapatkan nilai integer pembolehubah | int intval(number [, base=10]) |
| is_empty | Tentukan sama ada pembolehubah dianggap kosong | bool is_empty(var) |
| is_float | Cari sama ada jenis pembolehubah ialah float | bool is_float(var) |
| is_int | Cari sama ada jenis pembolehubah ialah integer | bool is_int(var) |
| is_nan | Cari sama ada nilai bukan nombor | bool is_nan(var) |
| is_null | Cari sama ada pembolehubah adalah NOL | bool is_null(var) |
| is_numeric | Cari sama ada pembolehubah ialah nombor atau rentetan berangka | bool is_numeric(var) |
| is_string | Cari sama ada jenis pembolehubah ialah rentetan | bool is_string(var) |
| join (New in 2.0 build 130129) | Sertai elemen sebagai rentetan baharu | join(arg1, arg2, ... argN) |
| list | Kembalikan senarai nilai tidak kosong yang dipisahkan koma | string list(arg1, arg2, ... argN) |
| listifop (New in 3.16.1 ) | Kembalikan senarai dipisahkan 'glue' bagi sifat soalan yang ditentukan (retProp) daripada soalan dalam senarai yang memenuhi kriteria (cmpProp op value) | string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN) |
| log | Logaritma nombor kepada asas, jika diberikan, atau logaritma asli. | number log(number,base=e) |
| ltrim | Buang ruang kosong (atau aksara lain) dari permulaan rentetan | string ltrim(string [, charlist]) |
| max | Cari nilai tertinggi | number max(arg1, arg2, ... argN) |
| min | Cari nilai terendah | number min(arg1, arg2, ... argN) |
| mktime | Dapatkan setem masa UNIX bagi tarikh (setiap satu daripada 6 argumen adalah pilihan) | number mktime([hour [, minute [, second [, month [, day [, year ]]]]]]) |
| modulo-function | Fungsi modulo belum disokong. Anda boleh menggunakan fungsi floor() sebagai ganti | floor(x/y)==(x/y) |
| nl2br | Sisipkan pemisah baris HTML sebelum semua baris baharu dalam rentetan | string nl2br(string) |
| number_format | Formatkan nombor dengan beribu-ribu dikumpulkan | string number_format(number) |
| pi | Dapatkan nilai pi | number pi() |
| pow | Ungkapan eksponen | number pow(base, exp) |
| quoted_printable_decode | Tukar rentetan quoted-printable kepada rentetan 8 bit | string quoted_printable_decode(string) |
| quoted_printable_encode | Tukar rentetan 8 bit kepada rentetan quoted-printable | string quoted_printable_encode(string) |
| quotemeta | Petikan aksara meta | string quotemeta(string) |
| rand | Hasilkan integer rawak, lihat contoh ini | int rand() OR int rand(min, max) |
| regexMatch | bandingkan rentetan dengan ekspresi lazim | bool regexMatch(pattern,input) |
| round | Membundarkan nombor ke ketepatan pilihan | number round(val [, precision]) |
| rtrim | Buang ruang kosong (atau aksara lain) dari hujung rentetan | string rtrim(string [, charlist]) |
| sin | Sinus | number sin(arg) |
| sprintf | Kembalikan rentetan berformat | string sprintf(format, arg1, arg2, ... argN) |
| sqrt | Punca kuasa dua | number sqrt(arg) |
| stddev | Kira Deviasi Standard Sampel bagi senarai nombor | number stddev(arg1, arg2, ... argN) |
| str_pad | Lapik rentetan hingga panjang tertentu dengan rentetan lain | string str_pad(input, pad_length [, pad_string]) |
| str_repeat | Ulang rentetan | string str_repeat(input, multiplier) |
| str_replace | Gantikan semua kejadian rentetan carian dengan rentetan ganti | string str_replace(search, replace, subject) |
| strcasecmp | Perbandingan rentetan tidak sensitif huruf besar selamat binari | int strcasecmp(str1, str2) |
| strcmp | Perbandingan rentetan selamat binari | int strcmp(str1, str2) |
| strip_tags | Leraikan tag HTML dan PHP dari rentetan | string strip_tags(str, allowable_tags) |
| stripos | Cari kedudukan kejadian pertama rentetan unicode tidak sensitif huruf besar atau kecil (bermula dengan 0, kembalikan false jika tidak dijumpai) | int stripos(haystack, needle [, offset=0]) |
| stripslashes | Nyahpetik rentetan petikan | string stripslashes(string) |
| stristr | Strstr tidak sensitif huruf besar atau kecil | string stristr(haystack, needle [, before_needle=false]) |
| strlen | Dapatkan panjang rentetan | int strlen(string) |
| strpos | Cari kedudukan kejadian pertama rentetan unicode (bermula dengan 0, kembalikan false jika tidak dijumpai) | int strpos(haystack, needle [ offset=0]) |
| strrev | Terbalikkan rentetan | string strrev(string) |
| strstr | Cari kejadian pertama rentetan | string strstr(haystack, needle[, before_needle=false]) |
| strtolower | Jadikan rentetan huruf kecil | string strtolower(string) |
| strtotime | Huraikan hampir apa-apa perihalan tarikh dan masa dalam teks bahasa Inggeris kepada setem masa Unix | int strtotime(string) |
| strtoupper | Jadikan rentetan huruf besar | string strtoupper(string) |
| substr | Kembalikan sebahagian rentetan unicode | string substr(string, start [, length]) |
| sum | Kira jumlah nilai dalam tatasusunan | number sum(arg1, arg2, ... argN) |
| sumifop | Jumlahkan nilai soalan yang dijawab dalam senarai yang memenuhi kriteria (arg op value) | number sumifop(op, value, arg1, arg2, ... argN) |
| tan | Tangen | number tan(arg) |
| time | Kembalikan setem masa UNIX semasa | number time() |
| trim | Buang ruang kosong (atau aksara lain) dari permulaan dan hujung rentetan | string trim(string [, charlist]) |
| ucwords | Jadikan huruf besar aksara pertama setiap perkataan dalam rentetan | string ucwords(string) |
| unique | Mengembalikan benar jika semua jawapan bukan kosong adalah unik | boolean unique(arg1, ..., argN) |
Fungsi yang Dirancang atau Sedang Dipertimbangkan
Fungsi lain yang dirancang (atau sedang dipertimbangkan) tetapi belum dilaksanakan termasuk yang berikut. Sebahagian daripadanya adalah untuk keserasian ke belakang dengan alat tinjauan yang lain.
| Sintaks | Maksud | Komen |
|---|---|---|
| e() | mengembalikan nilai e | |
| formatDate(X,PAT) | mengembalikan nilai rentetan tarikh X yang diformatkan mengikut corak format tarikh Java PAT | |
| formatNumber(X,PAT) | mengembalikan nilai rentetan nombor X yang diformatkan mengikut corak format nombor Java PAT | |
| getAnsOption(X) | Pemalam teras ExpressionAnswerOptions | |
| getAnsOption(X,Y) | Pemalam teras ExpressionAnswerOptions | |
| getRelevance(X) | mengembalikan persamaan kaitan bagi soalan X | |
| getStartTime() | mengembalikan tarikh yang sepadan dengan masa sistem apabila temu bual dimulakan | |
| getType(X) | mengembalikan nama rentetan jenis data - cth. *NA* jika isNA() | |
| gotoFirst() | melompat ke set soalan relevan yang pertama - ini melanggar aliran biasa sistem | |
| gotoNext() | melompat ke set soalan relevan yang seterusnya - ini melanggar aliran biasa sistem | |
| gotoPrevious() | melompat ke set soalan relevan yang sebelumnya - ini melanggar aliran biasa sistem | |
| isAsked(X) | mengembalikan benar jika jawapan bukan *NA*, *INVALID* mahupun *UNASKED* | |
| isInvalid(X) | mengembalikan benar jika jawapan berjenis *INVALID* | |
| isNA(X) | mengembalikan benar jika jawapan berjenis *NA* | |
| isNotUnderstood(X) | mengembalikan benar jika jawapan berjenis *HUH* | |
| isRefused(X) | mengembalikan benar jika jawapan berjenis *REFUSED* | |
| isSpecial(X) | mengembalikan benar jika jawapan berjenis *UNASKED*, *NA*, *REFUSED*, *INVALID*, *UNKNOWN*, atau *HUH* | |
| isUnknown(X) | mengembalikan benar jika jawapan berjenis *UNKNOWN* | |
| jumpTo(X) | melompat ke kumpulan yang mengandungi soalan bernama tersebut -- ini melanggar aliran biasa sistem | |
| jumpToFirstUnasked() | melompat ke soalan pertama yang belum ditanya |
|
| lastIndexOf(X,Y) | mengembalikan indeks terakhir (asas 0) rentetan Y dalam rentetan X. Mengembalikan -1 jika Y tidak terkandung dalam X | |
| list(X,...) | rentetan yang mengandungi senarai nilai positif yang dipisahkan koma dengan "dan" memisahkan dua nilai terakhir | |
| mean(X,...) | mengembalikan min bagi senarai nilai | |
| numAnsOptions(X) | mengembalikan bilangan pilihan jawapan yang dimiliki oleh soalan X | |
| orlist(X,...) | rentetan yang mengandungi senarai nilai positif yang dipisahkan koma, dengan "atau" memisahkan dua nilai terakhir | |
| parseDate(X,PAT) | mengembalikan nilai tarikh bagi rentetan X yang dihuraikan dengan corak format tarikh Java PAT | |
| parseNumber(X,PAT) | mengembalikan nilai berangka bagi rentetan X yang dihuraikan dengan corak format nombor Java PAT | |
| showAllResponsesExcept( questionList,attributeList,attributeTitleList) | questionList = senarai pengecam soalan yang dipisahkan oleh palang menegak; attributeList = senarai atribut yang dipisahkan oleh palang menegak (seperti question#, title, text, type - supaya anda boleh memutuskan apa yang hendak dipaparkan); attributeTitleList = senarai pengepala jadual yang dipisahkan oleh palang menegak, supaya laporan boleh diantarabangsakan. | |
| showTheseResponses( questionList,attributeList,attributeTitleList) | questionList = senarai pengecam soalan yang dipisahkan oleh palang menegak; attributeList = senarai atribut yang dipisahkan oleh palang menegak (seperti question#, title, text, type - supaya anda boleh memutuskan apa yang hendak dipaparkan); attributeTitleList = senarai pengepala jadual yang dipisahkan oleh palang menegak, supaya laporan boleh diantarabangsakan. |
Expression Manager Mengetahui Pemboleh Ubah Mana yang Setempat
Untuk membina JavaScript bagi sesuatu halaman dengan betul, Expression Manager perlu mengetahui pemboleh ubah mana yang ditetapkan pada halaman tersebut, dan apakah ID JavaScript mereka (cth. untuk document.getElementById(x)). Ia juga mesti mengetahui pemboleh ubah mana yang ditetapkan pada halaman lain (supaya ia dapat memastikan medan <input type='hidden' value='x'> yang diperlukan wujud dan diisi).
Syarat Lata
Jika mana-mana pemboleh ubah tidak relevan, keseluruhan persamaan akan menjadi tidak relevan (palsu). Contohnya, dalam jadual berikut, N/A bermaksud salah satu pemboleh ubah tidak relevan
| Operator | Contoh | a | b | Hasil |
|---|---|---|---|---|
| + (unary) | +a | N/A | palsu | |
| ! | !a | N/A | palsu | |
| == (atau eq) | a == b | N/A | 5 | palsu |
| == (atau eq) | a == b | N/A | 0 | palsu |
| == (atau eq) | a == b | N/A | N/A | palsu |
| != (atau ne) | a != b | N/A | 5 | palsu |
| != (atau ne) | a != b | N/A | N/A | palsu |
| != (atau ne) | a != b | N/A | 0 | palsu |
| > (atau gt) | a > b | N/A | 5 | palsu |
| >= (atau ge) | a >= b | N/A | 5 | palsu |
| < (atau lt) | a < b | N/A | 5 | palsu |
| <= (atau le) | a <= b | N/A | 5 | palsu |
| and | a and b | N/A | 5 | palsu |
| and | a and b | N/A | N/A | palsu |
| or | a or b | N/A | N/A | palsu |
| or | a or b | N/A | 5 | palsu |
| + | a + b | N/A | 5 | palsu |
| * | a * b | N/A | 5 | palsu |
| / | a / b | 5 | N/A | palsu |
| () | (a) | N/A | palsu | |
| (exp) | (a && b) | N/A | 5 | palsu |
| (exp) op (exp) | (b + b) > (a && b) | N/A | 5 | palsu |
| fungsi | sum(a,b,b) | N/A | 5 | palsu |
| fungsi | max(a,b) | N/A | 5 | palsu |
| fungsi | min(a,b) | N/A | 5 | palsu |
| fungsi | implode(', ',a,b,a,b) | N/A | 5 | palsu |
| fungsi | if(a,a,b) | N/A | 5 | palsu |
| fungsi | is_empty(a) | N/A | palsu | |
| fungsi | is_empty(a) | 0 (atau kosong) | benar | |
| fungsi | !is_empty(a) | N/A | palsu |
Mengatasi Syarat Lata
Katakan anda ingin menunjukkan jumlah berjalan bagi semua jawapan yang relevan. Anda mungkin mencuba persamaan {sum(q1,q2,q3,...,qN)}. Walau bagaimanapun, ini diterjemahkan secara dalaman kepada LEMif(LEManyNA('q1','q2','q3',...,'qN'),,sum(LEMval('q1'),LEMval('q2'),LEMval('q3'),...,LEMval('qN'))). Jadi, jika mana-mana nilai q1-qN tidak relevan, persamaan akan sentiasa mengembalikan palsu. Dalam kes ini, sum() akan menunjukkan 0 sehingga semua soalan dijawab.
Untuk mengatasinya, setiap pemboleh ubah boleh ditambah akhiran ".NAOK" (bermaksud Not Applicable adalah OK). Dalam kes sedemikian, tingkah laku berikut berlaku. Katakan anda mempunyai pemboleh ubah q1.NAOK
- q1 tidak ditambah pada klausa LEManyNA()
- LEMval('q1') akan terus menyemak sama ada jawapan itu relevan, dan akan mengembalikan '' jika tidak (jadi jawapan individu yang tidak relevan akan diabaikan, tetapi ia tidak akan membatalkan keseluruhan ungkapan).
Jadi, penyelesaian kepada masalah jumlah berjalan ialah menggunakan persamaan sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).
Penggunaan akhiran .NAOK juga membolehkan penulis mereka bentuk tinjauan yang mempunyai beberapa laluan yang mungkin tetapi kemudian bertemu semula pada laluan yang sama. Contohnya, katakan subjek menjawab tinjauan dengan cara yang berada di luar julat jawapan biasa. Penulis boleh memaklumkan subjek bahawa mereka mungkin tidak mendapat keputusan yang sah, dan bertanya sama ada mereka benar-benar mahu meneruskan tinjauan. Jika mereka menjawab Ya, soalan selebihnya akan dipaparkan. Syarat untuk "soalan selebihnya" akan menyemak sama ada jawapan awal dijawab dalam julat biasa ATAU sama ada subjek menjawab Ya kepada soalan yang hanya relevan jika mereka menjawab di luar julat biasa.
Bagaimanakah Expression Manager Menyokong Penyesuaian Mikro Bersyarat?
Berikut ialah contoh penyesuaian mikro (di mana Question Type=='expr' bermaksud Persamaan):
| Kod Soalan | Kaitan | Jenis Soalan | Soalan |
|---|---|---|---|
| name | 1 | text | Apakah nama anda? |
| age | 1 | text | Berapakah umur anda? |
| badage | !is_empty(age) | expr | {(age<16) or (age>80)} |
| agestop | badage | message | Maaf, {name}, anda terlalu {if( (age<16),'muda',if( (age>80),'tua','separuh umur') ) } untuk ujian ini. |
| kids | !badage | yesno | Adakah anda mempunyai anak? |
| parents | 1 | expr | {!badage && kids=='Y'} |
| numKids | parents | text | Berapa orang anak yang anda ada? |
| kid1 | parents && numKids >= 1 | text | Berapakah umur anak pertama anda? |
| kid2 | parents && numKids >= 2 | text | Berapakah umur anak kedua anda? |
| kid3 | parents && numKids >= 3 | text | Berapakah umur anak ketiga anda? |
| kid4 | parents && numKids >= 4 | text | Berapakah umur anak keempat anda? |
| kid5 | parents && numKids >= 5 | text | Berapakah umur anak kelima anda? |
| sumage | 1 | expr | {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)} |
| report | parents | yesno | {name}, anda menyatakan bahawa anda berumur {age} dan mempunyai {numKids} anak. Jumlah umur {min(numKids,5)} anak pertama anda ialah {sumage} |
Semua soalan ini boleh berada pada satu halaman (cth. dalam kumpulan yang sama), dan hanya soalan yang relevan akan dipaparkan. Selain itu, apabila anda memasukkan umur anak-anak, ungkapan sum() dalam soalan terakhir akan dikemas kini secara dinamik pada halaman.
Expression Manager menyediakan fungsi ini dengan mengelilingi setiap ungkapan dengan elemen <span> bernama. Setiap kali nilai berubah, ia mengira semula ungkapan yang sepatutnya muncul dalam elemen <span> tersebut dan menjana semula paparan. Anda boleh mempunyai berpuluh-puluh, malah beratus-ratus, ungkapan tersuai sedemikian pada halaman yang sama, dan halaman akan memaparkan semula kesemuanya dalam satu kali penyegaran skrin.
Pemetaan Fungsi LimeSurvey 1.91+ kepada Expression Manager
| Ciri Lama | Ciri Baharu | Komen |
|---|---|---|
| Syarat | Kaitan | Anda boleh menggunakan persamaan bersyarat yang sangat kompleks, dan mengakses julat pemboleh ubah yang lebih luas |
| Penilaian | Persamaan | Mana-mana skor penilaian boleh distruktur semula menjadi Persamaan. Ini memastikan skor ditulis ke pangkalan data, dan juga membolehkan anda melihat perubahan dinamik pada nilai skor di halaman semasa |
| Penggantian | Expression Manager | Enjin teras mengambil rentetan input dan menganggap segala-galanya dalam kurungan kerinting sebagai Ungkapan - jadi ia mengendalikan semua jenis penggantian sejarah. Untuk mengelakkan JavaScript terbenam terganggu, Expression Manager hanya memproses kandungan antara kurungan kerinting selagi (a) tiada ruang kosong di hadapan atau di belakang dalam kurungan kerinting - cth. {expr} ialah ungkapan, tetapi { expr}, {expr }, dan { expr } bukan ungkapan. Selain itu, Expression Manager tidak memproses kandungan dalam rentetannya sendiri (cth. {list('hi','there {braces}')} menjana "hi there {braces}"). Ia juga mengabaikan kurungan kerinting yang di-escape (cth. \{this is not an expression\}) |
| Pengesahan | Expression Manager | Rancangannya ialah mengambil Atribut soalan min/maks semasa dan meminta Expression Manager memprosesnya. Dengan itu nilai min/maks boleh menjadi ungkapan itu sendiri |
Penyerlahan Sintaks
Untuk membantu memasukkan dan mengesahkan ungkapan, EM menyediakan penyerlahan sintaks dengan ciri-ciri berikut:
Jenis dan Maksud Penyerlahan Sintaks
| Warna | Contoh | Maksud | Tip alat | Komen |
|---|---|---|---|---|
| latar belakang tan | Contoh | keseluruhan persamaan | tiada | Apa-apa di dalam pendakap kurawan yang dikenali sebagai persamaan (iaitu tiada ruang kosong di hadapan atau di belakang) akan diwarnakan dengan latar belakang tan untuk membezakannya daripada teks di sekelilingnya |
| teks merah tebal | Contoh | Ralat | Sedikit penjelasan tentang ralat | Boleh jadi pemboleh ubah yang tidak diketahui atau ralat dalam fungsi, .... Tinjauan boleh rosak sepenuhnya, ini tidak dipaparkan kepada pengguna awam. |
| teks biru | Contoh | nama fungsi | maksud dan sintaks yang dibenarkan | nama fungsi, atau perkara yang sepatutnya menjadi fungsi kerana diikuti oleh kurungan pembuka, dipaparkan dalam teks biru tebal. Tip alat menunjukkan maksud dan sintaks yang dibenarkan bagi fungsi tersebut. |
| teks kelabu | Contoh | rentetan | tiada | rentetan dalam tanda petikan tunggal dan berganda dipaparkan dalam teks kelabu |
| teks sian | Contoh | pemboleh ubah ditetapkan pada halaman yang sama, | [nama atau kod SGQA]: soalan; nilai; senarai jawapan yang menunjukkan kod bagi setiap nilai | Mana-mana pemboleh ubah yang ditetapkan pada halaman yang sama dengan soalan semasa dipaparkan dalam teks sian, menunjukkan bahawa ia boleh dikemas kini dalam javascript. Tip alat menunjukkan namanya, soalan sebenar, dan nilai semasanya (atau kosong jika tidak ditetapkan). Jika jenis soalan menjangkakan jawapan daripada set nilai yang disenaraikan, pemetaan kod kepada nilai paparan ditunjukkan. |
| teks hijau | Contoh | pemboleh ubah ditetapkan pada halaman sebelumnya | [nama atau kod SGQA]: soalan; nilai; senarai jawapan yang menunjukkan kod bagi setiap nilai | Mana-mana pemboleh ubah yang ditetapkan pada halaman sebelumnya dipaparkan dalam teks hijau tebal. Tip alat menunjukkan namanya, soalan sebenar, dan nilai semasanya (atau kosong jika tidak ditetapkan). Jika jenis soalan menjangkakan jawapan daripada set nilai yang disenaraikan, pemetaan kod kepada nilai paparan ditunjukkan. |
| teks merah jambu tebal | Contoh | pemboleh ubah ditetapkan pada halaman kemudian secara amnya: kosong pada permulaan tinjauan, tetapi boleh diisi melalui indeks atau gerak ke belakang | [nama atau kod SGQA]: soalan; nilai; senarai jawapan yang menunjukkan kod bagi setiap nilai | Mana-mana pemboleh ubah yang ditetapkan pada halaman seterusnya dipaparkan dalam teks merah jambu tebal. Tip alat menunjukkan namanya, soalan sebenar, dan nilai semasanya (atau kosong jika tidak ditetapkan). Jika jenis soalan menjangkakan jawapan daripada set nilai yang disenaraikan, pemetaan kod kepada nilai paparan ditunjukkan. |
| teks tan tebal | Contoh | nilai gantian lime | nilai | Rentetan Gantian Lime (seperti {TOKEN:xxx}, {PRIVACY_MESSAGE}) dipaparkan dalam teks tan tebal. |
| teks merah | Contoh | operator tugasan (=) | mesej amaran | Jika anda menggunakan operator tugasan (=), operator itu akan dipaparkan dalam teks merah. Ini bertujuan membantu mengelakkan penugasan semula nilai secara tidak sengaja apabila anda sebenarnya bermaksud menyemak sama ada a == b dan bukannya menetapkan nilai a = b. |
| teks hitam biasa | Contoh | tanda baca | tiada | Semua tanda baca lain dalam ungkapan dipaparkan sebagai teks hitam biasa. |
| teks berkotak merah | a bold red line surrounds the error | ralat sintaks | keterangan ralat | Sebarang ralat sintaks yang dikesan ditunjukkan dengan mengelilingi ralat itu dengan kotak merah. Tip alat menunjukkan ralat tersebut. Contohnya termasuk kurungan yang tidak berpadanan, penggunaan fungsi yang tidak ditakrifkan, pemberian bilangan argumen yang salah kepada fungsi, ungkapan yang strukturnya lemah (cth. operator tiada antara pemboleh ubah), cuba menetapkan nilai baharu kepada pemboleh ubah baca sahaja, cuba menetapkan nilai kepada bukan pemboleh ubah, atau menggunakan sintaks tidak disokong. Ambil perhatian bahawa sistem pengesanan ralat sintaks mungkin hanya melaporkan satu ralat dalam ungkapan walaupun terdapat beberapa ralat; namun, jika sebarang ralat dikesan, sekurang-kurangnya satu ralat akan ditunjukkan. |
Bacaan Tambahan
Tinjauan sampel Expression Manager
Kes Penggunaan dan Panduan Cara
Contoh langkah demi langkah
Fungsi statistik Expression Manager
Rujukan untuk Pembangun










