x

Bab utama

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Panduan permulaan pantas - LimeSurvey 3.0+
  3. Pemasangan - LimeSurvey CE
  4. Cara mereka bentuk tinjauan yang baik (panduan)
  5. Bermula
  6. Mentadbir LimeSurvey
  7. Tinjauan - pengenalan
  8. Tetapan tinjauan
  9. Menu tinjauan
  10. Struktur tinjauan
  11. Soalan - pengenalan
  12. Kumpulan soalan - pengenalan
  13. Tinjauan - pengurusan
  14. Pilihan bar alat tinjauan
  15. Tinjauan berbilang bahasa
  16. Enjin ExpressionScript - Panduan mula pantas
  17. Ciri tidak dikategorikan dan ciri lanjutan
  18. Soalan Lazim Umum
  19. Penyelesaian Masalah
  20. Penyelesaian sementara
  21. Lesen
  22. Tukar log versi
  23. Pemalam
 Actions

Expression Manager

From LimeSurvey Manual

Halaman ini mungkin telah diterjemahkan oleh mesin dan mungkin mengandungi ralat. Papar teks asal bahasa Inggeris · Perbaiki terjemahan ini
This page is a translated version of the page Expression Manager and the translation is 100% complete.

Tutorial Permulaan Pantas

Gambaran Keseluruhan

Apabila menyesuaikan tinjauan anda, anda biasanya memerlukan cara untuk menentukan perkara berikut:

  1. Navigasi/Percabangan - membenarkan jawapan subjek mengubah susunan soalan yang ditanya
  2. 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).
  3. 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

Kaitan (Mengawal Navigasi/Percabangan)

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:

  1. Penyesuaian (tailoring) mesti mengelilingi ungkapan dengan kurungan kerawang
  2. Ungkapan boleh merentangi beberapa baris jika, seperti dalam kes ini, anda mahu memudahkan pembacaan logik bersyarat bersarang.

Soalan, Jawapan dan Laporan yang Disesuaikan

Nota: Penyesuaian dinamik mungkin tidak berfungsi jika pilihan jawapan disediakan dalam kotak pilihan pada halaman soalan yang sama. Ini disebabkan penyesuaian memasukkan teg <span> yang tidak sah di dalam pilihan select.

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

  1. 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.
  2. 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.
  3. 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
  4. 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"
  5. 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.

  1. 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
  2. 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.
  3. 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
  4. Medan Gantian
    • Gunakan Kod Soalan untuk memasukkan nilai daripada jawapan kepada soalan sebelumnya - ini menjadikannya lebih mudah dibaca dan disahkan.
  5. 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.
  6. 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)
  7. 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.
  8. 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.
  9. 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:

  1. 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.
  2. 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).
  3. 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.
  4. 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.
  5. 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.
  6. 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:

  1. Memaparkan mesej yang disesuaikan secara bersyarat kepada responden berdasarkan jawapan sebelumnya
  2. Mencipta penilaian dan memaparkan keputusan penilaian (atau bercabang atau memaparkan mesej secara bersyarat) berdasarkan keputusan tersebut, tanpa menggunakan modul Penilaian itu sendiri
  3. Menukar bentuk kata kerja dan kata nama dalam soalan, jawapan dan laporan.
  4. 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',
               ''
             )
           )
         )
       )
     )
   )
 )
)}
Expression Manager menyokong sintaks berikut:
  • 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.

  Penetapan hanya dilakukan dalam PHP. Ini tidak mengemas kini sebarang nilai pada halaman yang sama, tetapi hanya apabila pengguna menavigasi dengan seterusnya, sebelumnya, simpan ….


  Jika anda tidak menggunakan jenis soalan persamaan untuk tujuan ini: penetapan hanya dilakukan selepas logik halaman semasa selesai. Kaedah yang disyorkan ialah sentiasa menggunakan soalan persamaan.


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

  Isu ini telah dibetulkan selepas 2.05 build 140803


Jika anda menggunakan Editor HTML, sesetengah aksara digantikan dengan entiti HTML.

  • & dengan &amp;
  • < dengan &lt;
  • > dengan &gt;

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 dengan itu memintas soalan yang telah dijawab sebelumnya ini melanggar aliran biasa sistem
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

  1. q1 tidak ditambah pada klausa LEManyNA()
  2. 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

Pelan Hala Tuju/Status/Senarai Tugasan