x

Үндсэн бүлгүүд

  1. LimeSurvey Cloud ба LimeSurvey CE-ийн харьцуулалт
  2. Хурдан эхлэх гарын авлага - LimeSurvey 3.0+
  3. Суулгалт - LimeSurvey CE
  4. Сайн судалгааг хэрхэн зохиох вэ (гарын авлага)
  5. Эхлэх нь
  6. LimeSurvey-г удирдах
  7. Судалгаа - танилцуулга
  8. Судалгааны тохируулга
  9. Судалгааны цэс
  10. Судалгааны бүтэц
  11. Асуултууд - танилцуулга
  12. Асуултын бүлэг - танилцуулга
  13. Судалгаа - удирдлага
  14. Судалгааны хэрэгслийн самбарын сонголтууд
  15. Олон хэлтэй судалгаа
  16. ExpressionScript Engine - Хурдан эхлэх гарын авлага
  17. Ангилагдаагүй болон нарийвчилсан боломжууд
  18. Түгээмэл асуултууд
  19. Алдаа засварлах
  20. Түр шийдлүүд
  21. Лиценз
  22. Хувилбарын өөрчлөлтүүдийн жагсаалт
  23. Плагинууд
 Actions

ExpressionScript - Танилцуулга

From LimeSurvey Manual

Энэ хуудсыг машинаар орчуулсан байж магадгүй тул алдаа агуулж болзошгүй. Англи эх хувийг харах · Энэ орчуулгыг сайжруулах
This page is a translated version of the page ExpressionScript - Presentation and the translation is 100% complete.


Танилцуулга

LimeSurvey нь Илэрхийллийн скрипт (Expression Script)-ийг ашигладаг бөгөөд энэ нь LimeSurvey-д илүү нарийн төвөгтэй салаалалт, үнэлгээ, баталгаажуулалт болон тохируулгыг дэмжих боломжийг олгодог. Энэ нь LimeSurvey-ийн Орлуулалт, нөхцөл болон үнэлгээг арын хэсэгт удирдах аргыг орлоно. Мөн ажиллах үед мэдээллийн сангаас унших ихэнх үйлдлийг арилгадаг тул боловсруулалтыг мэдэгдэхүйц хурдасгадаг. Илэрхийллийн скриптийг доктор Томас Уайт (TMSWhite) боловсруулсан.


Үндсэн тодорхойлолтууд

  1. Илэрхийлэл: Хаалтан дотор ({}) орсон аливаа зүйл:
    • Нээх хаалтын шууд дараа эсвэл хаах хаалтын өмнө хоосон зай байхгүй байх шаардлагатай.
    • Илэрхийллийн агуулгыг EM үнэлдэг тул математик томьёо, функц, нарийн төвөгтэй тэмдэгт мөр болон огнооны боловсруулалтыг агуулж болно.
  2. Тохируулга: Заримдаа "piping" гэж нэрлэдэг. Энэ нь текстийг нөхцөлтэйгээр өөрчлөх процесс юм:
    • Та бүх 'орлуулах талбар', оролцогчийн өгөгдөл болон хариултын өгөгдөлд хандах эрхтэй.
    • Мөн асуулт, хариулт болон тэдгээрийн шинж чанарт илүү хялбар хандаж болно.
  3. Холбогдох тэгшитгэл: Асуултын харагдах байдлыг удирддаг асуултын шинэ шинж чанар:
    • Холбогдох тэгшитгэл байгаа бол асуулт нь тухайн тэгшитгэл үнэн (true) гэж үнэлэгдсэн тохиолдолд л харагдана.
    • Дотооддоо бүх array_filter болон array_filter_exclude тушаалууд дэд асуултын түвшний холбогдох тэгшитгэл болдог.
  4. SGQA (өмнө нь хувьсагчдыг хэрхэн нэрлэдэг байсан):
    • Survey-Group-Question-Answer гэсэн үгийн товчлол
    • SGQA хувьсагчийн нэрс 123X5X382X971 шиг харагддаг бөгөөд дэд асуултын нэмэлт залгавартай байж болно.
    • Эдгээр хувьсагчийн нэрс нь мэдээллийн сангийн S/Q/G/A кодуудад хамаарах тул ихэвчлэн өөрчлөх шаардлагатай болдог
  5. Тэгшитгэл асуултын төрөл: Тооцоолол эсвэл тайланг мэдээллийн санд хадгалдаг шинэ асуултын төрөл:
    • Энэ нь Boilerplate асуулттай төстэй боловч "Энэ асуултийг нуу" гэж тохируулсан ч агуулгыг нь мэдээллийн санд хадгалдаг.
  6. Асуултын код: Энэ нь EM-д зориулсан илүүд үздэг хувьсагчийн нэр юм:
    • Энэ нь асуултын зорилгыг илэрхийлсэн тайлбарлах нэр байж болох бөгөөд нарийн төвөгтэй логикийг уншихад хялбар болгодог.
    • Зөв асуултын код тоогоор ЭХЭЛЖ БОЛОХГҮЙ тул асуултаа дугаарлахдаа "q1", "q1a" эсвэл "g1q2" гэж ашиглахад хангалттай.
    • Хэрэв та мэдээллийг SPSS эсвэл R руу экспортлох бол энэ нь хувьсагчийн нэр болно. Тиймээс статистик шинжилгээ хийж байгаа бол зөвхөн давтагдашгүй асуултын код үүсгэх хэрэгтэй.


Би Илэрхийллийн скриптийг заавал ашиглах ёстой юу?

Богино хариулт нь "үгүй". Гэхдээ энэ нь таны үүсгэх гэж буй судалгааны нарийн төвөгтэй байдлаас ихээхэн хамаарна.

Жишээлбэл, Нөхцөл засварлагч нь судалгааныхаа асуултуудад хэрэглэж болох зарим энгийн илэрхийллийг хамардаг. Гэхдээ Нөхцөл засварлагч хязгаарлагдмал. Тийм учраас Илэрхийллийн скриптийг ашигладаг бөгөөд энэ нь өөрчлөн тохируулах боломжуудын хүрээг тэлдэг.


Нөхцөл болон Холбогдох тэгшитгэлийг хослуулж болох уу?

Тийм. Зарим асуултад Нөхцөл засварлагчийг, бусад асуултад Холбогдох тэгшитгэлийг ашиглаж болно.

Нэг асуултад нөхцөл болон илэрхийллийг хоёуланг нь тохируулж болохгүй! Нөхцөл тохируулсны дараа энэ нь холбогдох тэгшитгэлийн талбарт бичигдсэн аливаа илэрхийллийг орлоно. Түүнчлэн Холбогдох тэгшитгэл талбарыг цаашид гараар засах боломжгүй болно.

Гэсэн ч нэг асуултад илэрхийлэл болон нөхцөл хоёуланг ашиглах арга байдаг. Дээр дурдсанчлан нөхцөл нь холбогдох тэгшитгэлийн талбарыг орлодог. Үүний дараа шинээр үүссэн тэгшитгэлийг шалгаад текст засварлагчид хуулж ав. Шинээр үүсгэсэн нөхцөлийг Нөхцөл засварлагчаас устгаад, дараа нь асуултыг засаж, текст засварлагчийн файлд байгаа нөхцөлд суурилсан илэрхийллүүдийг бусад ашиглахыг хүсч буй илэрхийллүүдийн хамт нэмнэ үү.


Нөхцөл болон Холбогдох тэгшитгэлийн аль нэгийг хэрхэн сонгох вэ?

Доор арга тус бүрийн давуу болон сул талуудын жагсаалтыг үзүүллээ:

Хэлбэр Давуу тал Сул тал
Нөхцөл 1. Энгийн нөхцөл үүсгэхэд зориулсан тохиромжтой GUI.
2. GUI сайн баримтжуулагдсан бөгөөд дэмжлэгийн баг сайн ойлгодог
1. Зөвхөн энгийн харьцуулалтыг дэмждэг бөгөөд "AND" болон "OR" нөхцөлийг сайн дэмждэггүй.
2. Давхарласан нөхцөл тогтворгүй ажилладаг
3. Удаан - мэдээллийн санд ачаалал өгдөг тул урт судалгааг удаашруулж болно.
4. Нөхцөлийг дахин ачаалахад зарим асуудал мэдээлэгдсэн.
5. Хэдэн арав, хэдэн зуу, хэдэн мянган асуулт байх үед GUI сайн өргөжихгүй.
6. SGQA нэр ашиглах ёстой тул цаасан судалгааг хөрвүүлэх нь удаан байж болно.
7. Нарийн төвөгтэй салаалалтад шаардлагатай логикийг тусгайлан кодлоход ихэвчлэн программист хэрэгтэй.
Ач холбогдол 1. 80 гаруй функц болон математик/тэмдэгт мөрийн оператор зэрэг маш нарийн төвөгтэй логикийг дэмждэг.
2. Давхарласан логикийг төгс дэмждэг.
3. Хурдан - мэдээллийн сан руу нэмэлт дуудлага хийхгүй бөгөөд 1000 гаруй асуулттай судалгааг дэмждэг.
4. SGQA код шаарддаггүй тул логикийг дахин ачаалахад асуудал гарахгүй.
5. Синтакс тодруулалт нь 1000 гаруй асуулттай судалгаанд тохирно.
6. Одоо байгаа цаасан судалгааг компьютержүүлэхийг хүссэн баг хэрэглэхэд хялбар бөгөөд хурдан.
7. Хагас бүтэцтэй ярилцлага болон эпидемиологийн судалгааг программистгүйгээр амархан дэмждэг.
1. Энгийн нөхцөлд зориулсан GUI байхгүй - оронд нь синтакс тодруулалтыг ашигладаг.


Тэмдэглэл:
  • Өөрийн хэрэгцээнд хамгийн сайн тохирохыг нь ашиглахыг зөвлөж байна.
  • EM-ийн боломжуудын талаарх дэлгэрэнгүй тайлбарыг үзэхийн тулд дараах холбоос дээр дарна уу.

Эхлэх

EM-ийг эхлэн ашиглах хамгийн сайн арга нь:

  • https://www.limesurvey.org/en/download хаягаас хамгийн сүүлийн тогтвортой хувилбарыг суулгах.
  • Зарим жишээ судалгааг импортлож судлах.
  • Хэрэглээний тохиолдол ба зааврууд, мөн алхам алхмаар жишээнүүдийг судлах.
  • EM-ийн баримт бичгийг (энэ хуудас) судлах
    • Тусгаарлагдсан илэрхийллүүдийн нэгжийн тест (ахисан түвшин)
      • EM-ийн бүх функц болон операторыг ашигласан жишээ, мөн PHP болон JavaScript-ийн үр дүнг харуулдаг;
      • PHP болон JavaScript хувилбарт өөр үр дүн өгдөг цөөн хэдэн функц байдгийг анхаараарай, иймээс энэ хуудас нь EM логикоо үүний дагуу төлөвлөхөд тусална.

Нэр томьёо

Эдгээр үгсийг EM-ийн чадамжийг тодорхойлоход түгээмэл ашигладаг:

  • Ач холбогдолд суурилсан салаалалт - асуулт холбогдох бол асууна, үгүй бол асуухгүй (жишээ нь, үүнийг үл үзэгдэх болгож мэдээллийн санд NULL гэж тэмдэглэнэ). Ач холбогдол талбаруудыг асуултын засварлагчийн самбар болон асуултын бүлгийн засварлагчийн самбараас олж болно. Сүүлийнх нь нэг нөхцөлийг асуулт бүрт хуулахгүйгээр нөхцөлүүдийн багцыг бүхэл бүлэгт хэрэглэх, ба/эсвэл бүлэг болон асуултын түвшний нөхцөлт логикийг хослуулахад ашиглагддаг.
  • Тохируулга - Аль асуултыг асуухаа мэдсэний дараа тохируулга (заримдаа piping гэж нэрлэдэг) нь асуултыг хэрхэн асуухыг тодорхойлдог. Энэ нь энгийн орлуулалтыг ({TOKEN:FIRSTNAME} шиг) төдийгүй сэдвүүдийн хүйс эсвэл тооноос хамаарч үйл үгийн хувирал, нэр үгийн тийн ялгалыг дэмжих боломжийг олгодог. Мөн бусад асуултад хариулсан эсэх (эсвэл хэрхэн хариулсан) байдлаас хамааран судалгааны оролцогчид хүргэх мессежийг өөрчлөх боломжтой.
  • Тэгшитгэл - EM нь Илэрхийллийн үр дүнг хадгалдаг Тэгшитгэл нэртэй шинэ асуултын төрлийг нэмдэг. Тэгшитгэлийн үр дүнг хуудсан дээр нуусан ч тооцоолж мэдээллийн санд бичдэг. Иймээс эдгээрийг далд оноо тооцоолол, нарийн төвөгтэй тэгшитгэлд суурилсан навигаци, үнэлгээ, мөн мэдээллийн санд үүсгэж хадгалагдах тайланд ашигладаг.


Ач холбогдол ба давхарласан ач холбогдол

Асуултын төрөл бүр одоо асуултыг харуулах эсэхийг удирддаг Ач холбогдол сонголттой болсон. EM нь Холбогдох тэгшитгэл бүрийг судалгаанд гарч буй дарааллаар нь боловсруулдаг. Хэрэв илэрхийлэл үнэн (эсвэл байхгүй - хуучин судалгааг дэмжих үүднээс) бол асуулт харагдана. Хэрэв холбогдохгүй бол асуулт нуугдаж, утга нь мэдээллийн санд NULL болно. Бүлэгт холбогдох асуулт байхгүй бол бүхэл бүлгийг алгасна.

Түүнчлэн илэрхийлэл доторх аль нэг хувьсагч холбогдохгүй бол илэрхийлэл үргэлж худал (false) гэж үнэлэгдэнэ. Энэ нь асуулт бүрт маш урт Холбогдох тэгшитгэл бичих шаардлагагүй болгодог Давхарласан ач холбогдлыг боломжтой болгодог.

Танд Q1-Q5 гэсэн таван асуулт байгаа бөгөөд Q2-ийг зөвхөн Q1-д хариулсан тохиолдолд, Q3-ийг Q2-д хариулсан тохиолдолд гэх мэтээр харуулахыг хүсч байна гэж үзье. Холбогдох тэгшитгэлүүд дараах байдалтай байж болно:

Асуултын код Ач холбогдол Асуулт
Q1 1 Таны нэр хэн бэ?
Q2 Q1 {Q1}, та хэдэн настай вэ?
Q3 Q2 Тэгэхээр та {Q2} настай юм байна. Та гэрлэсэн үү?
Q4 Q3 == "Y" {Q1}, та хэр удаан гэрлэсэн бэ?
Q5 Q4 {Q1}, танд хэдэн хүүхэд байдаг вэ?


Бүлгийн түвшний ач холбогдол

ExpressionScript нь бүлгийн түвшний ач холбогдлыг мөн дэмждэг. Энэ нь давталтыг хэрэгжүүлэхэд хялбар болгодог. Танд 10 хүртэлх объектоос (жишээлбэл бүтээгдэхүүн эсвэл өрхийн гишүүд) мэдээлэл цуглуулах шаардлагатай гэж үзье. Эхлээд хэдэн объектод дараагийн асуулт хэрэгтэйг тодорхойлно (жишээ нь өрхөд хэдэн хүн амьдардгийг асуух эсвэл урт жагсаалтаас аль бүтээгдэхүүн таалагддагийг сонгуулах замаар). Хэдэн объектод дараагийн асуулт хэрэгтэйг мэдсэний дараа дараагийн асуултуудын 10 бүлэг тус бүрт {count >= 1}, {count >=2}, ... {count >= 10} гэх мэт бүлгийн түвшний ач холбогдлыг ашиглаж болно. Бүлэг бүрийн дотор асуултын түвшний нөхцөлт логик (жишээ нь сэдэв бүрт хүйс эсвэл насанд тохирсон дараагийн асуултууд) байж болно. Асуулт болон бүлгийн түвшний холбогдох тэгшитгэлүүдийг AND-ээр холбож аль нь харагдахыг тодорхойлдог.

Ийм жишээг үзэхийн тулд дараах судалгааг импортлоорой: Хүн амын тооллогын судалгааны жишээ.

Доорх дэлгэцийн зургаас хариулагч дор хаяж нэг хамт амьдрагчтай амьдардаг бол Person 1 бүлэг харагдаж (буюу холбогдох) байгааг харж болно:



Тохируулга/Дамжуулалт (Tailoring/Piping)

Хаалтан дотор ({ }) байгаа бүх зүйлийг одоо Илэрхийлэл гэж үзнэ (доор дурдсан нэг үл хамаарах тохиолдлоос бусад). Илэрхийлэлүүд нь бүх LimeReplacementFields болон хувьсагчид (хэд хэдэн өөр нэрээр), бүх энгийн тэгшитгэлийн оператор (математик, логик, харьцуулалт), мөн олон арван функцэд (клиент талд ч динамикаар ажилладаг) хандах эрхтэй.

Эдгээр тэгшитгэлийг ашигласнаар дараах зүйлсийг хийж болно:

  1. Өмнөх хариултууд дээр үндэслэн хариулагчдад тохирсон мессежийг нөхцөлтэйгээр харуулах;
  2. Үнэлгээ үүсгэж, үнэлгээний үр дүнг харуулах (эсвэл үр дүнд нь үндэслэн нөхцөлтэйгээр салаалах эсвэл мессеж харуулах) бөгөөд үүнд үнэлгээний модуль-ийг огт ашиглахгүй;
  3. Асуулт, хариулт, тайлан доторх үйл үгийг хувирган нөхөж, нэр үгийг тохирох хэлбэрт оруулах;
  4. Судалгааны төгсгөлд "Хариултуудаа харуулах" хуудасны өмнө хариултуудын хураангуйг харуулах.


Тэгшитгэлүүд

Тэгшитгэл нэртэй асуултын шинэ төрөл байна. Үүнийг дэлгэцэнд текст харагдана асуултын төрөл гэж төсөөлөөрэй, гэхдээ харуулсан зүйлийн утгыг мэдээллийн санд хадгалдгаараа ялгаатай. Тэгэхээр Тэгшитгэл асуултын текст үнэлгээний тооцоолол агуулсан бол тухайн утга нийтийн эсвэл хувийн статистикт харуулж болох хувьсагчид хэлбэрээр мэдээллийн санд хадгалагдана.


Синтакс

Хаалтан дотор ({ }) байгаа бүх зүйлийг одоо Илэрхийлэл гэж үзнэ (нэг үл хамаарах зүйлтэй: эхэнд болон төгсгөлд хоосон зай байж болохгүй - энэ нь ExpressionScript суулгагдсан JavaScript-ийг боловсруулахыг оролдохгүй байхын тулд шаардлагатай).

Нээх хаалтны дараа болон хаах хаалтны өмнө хоосон зай байхгүй бол илэрхийлэл олон мөр хамарч болно. Энэ нь ялангуяа дараах мэт давхар "if()" илэрхийллүүдэд тустай:

{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',
               ''
             )
           )
         )
       )
     )
   )
 )
)}

ExpressionScript нь дараах синтаксийг дэмждэг:

  • Бүх стандарт математик оператор (жишээ нь +,-,*,/,!);
  • Бүх стандарт харьцуулах оператор (жишээ нь <,<=,==,!=,>,>=, мөн тэдгээрийн дүйцэх хэлбэрүүд: lt, le, eq, ne, gt, ge);
  • Хаалт (дэд илэрхийллийг бүлэглэх боломжтой);
  • Нөхцөлт оператор (жишээ нь &&,| | мөн тэдгээрийн дүйцэх хэлбэрүүд: and, or);
  • Дан болон давхар хашилттай тэмдэгт мөр (тус бүр нь нөгөө төрлийн хашилттай мөрийг агуулж болно);
  • Таслалын оператор (илэрхийллүүдийн жагсаалт бичиж, зөвхөн сүүлийн үр дүнг буцаах боломжтой);
  • Оноох оператор (=);
  • Урьдчилан тодорхойлсон хувьсагчид (асуулт, асуултын атрибут, хариулт руу хандах) - жишээ нь SGQA кодууд;
  • Урьдчилан тодорхойлсон функцүүд (одоо 80 гаруй байгаа бөгөөд шинийг нэмэхэд хялбар).


Операторууд

EM синтакс нь операторын энгийн тэргүүлэх дарааллыг дагана:

Түвшин Оператор(ууд) Тайлбар
1 () бүлэглэх эсвэл функц дуудах хаалт
2 ! - + нэг операндтай оператор: үгүйсгэл, сөрөг тэмдэг, эерэг тэмдэг
3 * / үржих, хуваах
4 + - нэмэх, хасах
5 < <= > >= lt le gt ge харьцангуй харьцуулалт
6 == != eq ne тэнцүү эсэхийг харьцуулах
7 and логик AND
8 or логик OR
9 = оноох оператор
10 , таслалын оператор
JavaScript болон PHP хооронд нийцтэй байлгахын тулд нэмэх оператор (+) нь хоёр операнд хоёулаа тоон утгатай бол нэмэх үйлдэл хийж, хоёулаа тоон бус тэмдэгт мөр бол залгах үйлдэл хийнэ. Гэхдээ залгахад "join()" функцийг ашиglахыг зөвлөж байна, учир нь энэ нь таны зорилгыг илүү тодорхой болгодог. Мөн тэмдэгт мөр хүлээсэн атлаа тоо авсан (эсвэл эсрэгээр) тохиолдолд гарах гэнэтийн үр дүнгээс сэргийлнэ.

Тоо ба тэмдэгт мөрийн тохиромжгүй байдал болон цагаан толгойн/тоон харьцуулалтын талаарх анхааруулга

Утгыг харьцангуй эсвэл тэнцүү эсэхийг харьцуулахдаа тохиромжгүй байдалд анхаарна уу. Хэрэглэгчийн оруулсан (эсвэл хариултын кодоор өгөгдсөн) утгыг тодорхой тоо бол тоо болгон ашиглаж болно. Хэрэв утгуудын аль нэгийг "-аар хүрээлбэл текст/тэмдэгт мөрийн харьцуулалт хийгдэнэ. Тоо болгон харьцуулахыг хүсвэл тоог хэзээ ч "-аар бүү хүрээл.

Жишээ нь Q0.NAOK нь 9 утгатай тоон асуулт бол Q0.NAOK > "50" үнэн байна. Учир нь > оператор үүнийг тоон бус цагаан толгойн харьцуулалт гэж үзнэ.

Бүхэл тоон утгыг харьцуулж байгаагаа баталгаажуулахын тулд intval(Q0.NAOK) > 50 гэж ашиглаж болно. Хэрэв Q0.NAOK тоо биш (хоосон эсвэл тэмдэгт мөр) бол intval(Q0.NAOK) === 0 болохыг санаарай. Тэмдэгт мөрийн утгыг ("A" < "B") харьцуулахдаа strcmp-г шууд ашиглана уу: strcmp(Q0.NAOK,"B") эсвэл strcmp(Q0.NAOK,"A5").

Оноох оператор (=)-ыг ашиглахтай холбоотой анхааруулга

Оноох операторыг зайлшгүй шаардлагатай үед нь бус бол ашиглахаас зайлсхийх хэрэгтэй, учир нь тэд гэнэтийн гаж нөлөө үүсгэж болно. Жишээлбэл, өмнөх хариултын утгыг өөрчилбөл тэр асуулт болон одоогийн асуултын хоорондох дараалсан холбогдол ба баталгаажуулалтын логик дахин тооцоологдохгүй, улмаар дотооддоо зөрчилтэй өгөгдөл үүсч болно (жишээ нь хариулагдсан хэвээр үлдэх ёстой биш NULL болох ёстой асуултууд, эсвэл алгасагдсан атлаа хариулагдах ёстой асуултууд). Ерөнхийдөө хувьсагчид утга оноохыг хүсвэл Тэгшитгэл асуултын төрөл үүсгэж, түүний утгыг илэрхийллээр тохируулах хэрэгтэй. Гэсэн хэдий ч хааяа энэ оператор үнэхээр хэрэгтэй тохиолдол гардаг тул бид үүнийг боломжтой болгосон.

Энэ операторын талаар анхааруулахын тулд синтакс тэгшитгэлүүд дотор үүнийг улаан үсгээр харуулдаг ("=="-тэй андуурахгүйн тулд).



Оноох операторыг ашиглах

Оноох операторыг ашиглахыг хүсэж болох үндсэн шалтгаанууд:

  • Үндсэн утга хүлээн авдаггүй асуултад (жишээ нь радио жагсаалт, хэрэглэгчийн интерфейс хариултын сонголтуудаас нэгийг сонгохыг зөвшөөрдөг ч тэгшитгэл оруулахыг зөвшөөрдөггүй) тэгшитгэлээр үндсэн утга тохируулах хэрэгтэй үед. Гэхдээ болгоомжтой байгаарай, учир нь LimeSurvey таны тэгшитгэл тухайн асуултын зөвшөөрөгдсөн хариултуудын нэгийг үүсгэж байгааг баталгаажуулж чадахгүй;
  • Дараачийн хариултад үндэслэн өмнөх асуултын хариултыг хүчээр өөрчлөх шаардлагатай үед;
  • гэх мэт...


  Анхааруулга : Оноолт нь зөвхөн PHP дээр хийгддэг. Энэ нь утга тухайн хуудсан дээр шинэчлэгдэхгүй, харин хэрэглэгч дараах хуудас руу шилжихэд л шинэчлэгдэнэ гэсэн үг. Иймд оноох операторыг бусад илэрхийллүүдтэй нэг хуудсан дээр ашиглаж байгаа үед анхаарна уу.



Энэ зорилгоор илэрхийллийн менежерийн бүх системийг ашиглаж болно. Гэхдээ энэ зорилгоор тэнцүү асуултын төрлийг ашиглах нь дээр.

Зарим жишээ:

  • Богино текст асуултын хариултыг жижиг үсгээр тохируулах : {QCODE=strtolower(QCODE.NAOK)};
  • Судалгааны эхэнд хүснэгт асуултын төрөлд үндсэн хариулт тохируулах : {Q1_SQ1=(is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)};
  • Судалгааны эхэнд текст хүснэгт асуултын төрөлд үндсэн хариулт тохируулах : {Q1_SQY1_SQX1 = (is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)};
  • Нөхцөлтэйгээр хариулт тохируулах : {QCODE=if(YesNo="Y","A1","")}.

XSS аюулгүй байдал

XSS идэвхжсэн үед илэрхийллийн менежер системийн зарим хэсгийг ашиглах боломжгүй:

  • HTML таг-ийг нэг илэрхийлэлд эхлүүлж, нөгөө илэрхийлэлд төгсгөх;
  • URL дотор нарийн төвөгтэй илэрхийлэл ашиглах.


Анхаарна уу: XSS нь LimeSurvey-н аливаа суулгацад анхдагчаар идэвхжсэн байдаг.


Жишээ болон шийдлүүд:

  • {if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")} нь XSS хамгаалалттай үед ажиллахгүй. Энэ тохиолдолд {if(1,"<strong>information</strong>","information")} гэж ашиглаж болно;
  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a>, энд асуултын кодыг бүтнээр нь ашиглах нь зөвшөөрөгддөг тул тэгшитгэлийн асуултыг ашиглаж болно: <a href="/script.php?value={EQUATION.NAOK}">next</a>.


Хувьсагчдад хандах хандалт

ExpressionScript нь танд хэрэгтэй аливаа хувьсагчид зөвхөн унших эрхээр хандах боломжийг олгоно. Хоёр талын нийцтэй байдлыг хангахын тулд дараахад хандах боломжтой:

Үүнээс гадна ExpressionScript нь хувьсагчдыг асуултын кодоор (өгөгдлийн сан дахь асуултуудын хүснэгтийн 'title' багана) нэрлэх боломжийг олгодог. Энэ нь мөн өгөгдлөө SPSS, R эсвэл SAS руу экспортлоход ашиглагдах хувьсагчийн шошго юм. Жишээ нь нэр, нас, хүйсийн талаарх асуултуудтай бол тэдгээр хувьсагчийг 12345X13X22, 12345X13X23, 12345X13X24 гэхийн оронд name, age, gender гэж нэрлэж болно. Ингэснээр тэгшитгэлийг хүн бүр уншиж, логикийг нь шалгахад хялбар болохоос гадна бүлэг эсвэл асуултын дугаарыг мөшгөхгүйгээр асуултуудын дарааллыг сольж болно.

Чухал: Өмнөх хуудас эсвэл асуултуудад байгаа хувьсагчдыг дурдах нь илүү аюулгүй.

Түүнчлэн ExpressionScript нь асуултын олон шинж чанарт хандах боломжийг олгоно:


Синтакс Утга Жишээ Жишээний үр дүн
Qcode Qcode.code-ийн өөр нэр {implode(',',name,gender)} 'Tom','M'
Qcode.code асуулт холбогдох бол сонгосон хариултын код (эс бөгөөс хоосон), эсвэл кодтой асуулт биш бол текст утга {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK Qcode-тэй адил - NAOK-ийн тайлбарыг үзнэ үү {gender.NAOK} 'M'
Qcode.value асуулт холбогдох бол асуултын үнэлгээний утга (эс бөгөөс хоосон), эсвэл кодтой асуулт биш бол текст утга {gender.value} '1'
Qcode.valueNAOK Qcode.value-тэй адил - NAOK-ийн тайлбарыг үзнэ үү {gender.valueNAOK} '1'
Qcode.shown асуултын харуулах утга {implode(',',name.shown,gender.shown)} 'Tom','Male'
Qcode.question асуултын текст {gender.question} 'What is your gender?'
Qcode.mandatory асуулт заавал бөглөх эсэх (Y/N) {gender.mandatory} 'N'
Qcode.qid асуултын дотоод дугаар (дарааллын дугаар биш) {gender.qid} 337
Qcode.type асуултын төрөл {gender.type} 'G'
Qcode.jsName энэ хуудсанд зарлагдсан эсэхээс үл хамааран асуултын зөв javascript нэр {gender.jsName} 'java1827X3X337'
Qcode.gid бүлгийн дотоод дугаар (дарааллын дугаар биш) {gender.gid} 3
Qcode.qseq асуултын дарааллын дугаар, 0-ээс эхэлнэ {gender.qseq} 5
Qcode.gseq бүлгийн дарааллын дугаар, 0-ээс эхэлнэ {gender.gseq} 1
Qcode.relevanceStatus асуулт одоогоор холбогдох эсэх (0 эсвэл 1) {gender.relevanceStatus} 1
Qcode.relevance асуултын түвшний холбогдох тэгшитгэл {gender.relevance} '!is_empty(name)'
Qcode.grelevance бүлгийн түвшний холбогдох тэгшитгэл {gender.grelevance} 'num_children >= 5'
Qcode.sgqa энэ асуултын SGQA утга {gender.sgqa} '1827X3X337'


HTML засварлагчийн асуудал

HTML засварлагч ашиглавал зарим тэмдэгт HTML entity-гээр солигддог.

  • & нь &amp;
  • < нь &lt;
  • > нь &gt;

HTML засварлагч ашиглаж байгаа бол дараахыг хэрэглэх хэрэгтэй:

  • and нь & -ийн оронд
  • lt нь < -ийн оронд
  • le нь <= -ийн оронд
  • gt нь > -ийн оронд
  • ge нь >= -ийн оронд


Илэрхийлэл доторх HTML-г цэвэрлэхийг зөвлөж байна. LimeSurvey-н HTML засварлагчийг ашигладаг бол засварлагчийн зүүн дээд хэсэгт байрлах "Source" товчийг дарж, илэрхийлэлтэй холбоогүй бүх тэмдэгтийг (жишээ нь

,
гэх мэт) устгана уу.

Qcode хувьсагчийн нэршил

Доор асуултын төрлөөр Qcode-г хэрхэн байгуулах (мөн зарим шинж чанарт хандах) дэлгэрэнгүйг харуулав. Ерөнхийдөө Qcode дараах байдлаар байгуулагдана:

 QuestionCode . '_' . SubQuestionID . '_' . ScaleId

comment болон other-ийн хувьд харгалзах асуултын кодууд нь QuestionCode_comment болон QuestionCode_other байна.

Төрөл Тодорхойлолт Код Дэд асуултууд Хариултын сонголтууд Хэмжүүрүүд Хариултын код Харагдах хариулт Холбогдох байдал
5 5 онооны сонголт, радио товчнууд Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Массив (10 онооны сонголт) радио товчнууд Q2 L1-L6 1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Массив (5 онооны сонголт) радио товчнууд Q3 1-5 1-5 {Q3_1} {Q3_1.shown} {Q3_1>=3}
1 Хүснэгт (уян хатан шошго) хос хэмжүүр Q4 sq1-sq5 0:a1-a3 1:b1-b3 {Q4_sq1_0} {Q4_sq1_1.shown} {Q4_sq1_1=='b2'}
H Хүснэгт (уян хатан) - баганан формат Q5 1-5 s,m,t {Q5_1} {Q5_1.shown} {Q5_1=='s'}
F Хүснэгт (уян хатан) - мөрөн формат Q6 F1-F5 1-5 {Q6_F3} {Q6_F3.shown} {Q6_F3==4}
E Хүснэгт (өсөх / тэнцэх / буурах) радио товчнууд Q7 1-7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Хүснэгт (олон уян хатан) 1-ээс 10 Q8 ls1,todo,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Хүснэгт (олон уян хатан) текст Q9 hp,st,sw 1st,2nd,3rd {Q9_hp_3rd} {Q9_hp_3rd.shown} {Q9_hp_3rd=='Peter'}
C Хүснэгт (тийм/эргэлзээтэй/үгүй) радио товчнууд Q10 1-5 Y,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Бэлэн текстийн асуулт Q11 {Q11.shown}
D Огноо Q12 {Q12} {Q12.shown}
* Тэгшитгэл Q13 {Q13} {Q13.shown} {Q13>5}
~124~ Файл upload (хуулсан файлын тоог бүртгэнэ) Q14 {Q14} {Q14>0}
G Хүйсийн жагсаалтыг доош буулгах Q15 M,F {Q15} {Q15.shown} {Q15=='M'}
U Асар том үнэгүй текст Q16 {Q16} {Q16.shown} {strlen(Q16)>100}
I Хэлний асуулт Q17 {Q17} {Q17.shown} {Q17=='en'}
! Жагсаалт - доош буулгах Q18 1-5 {Q18} {Q18.shown} {Q18==3}
L Жагсаалт, доош буулгах/радио товчтой жагсаалт Q19 A-Z {Q19} {Q19.shown} {Q19=='X'}
O Тайлбартай жагсаалт, доош буулгах/радио товчтой жагсаалт + текст талбар Q20 A-F {Q20},{Q20comment} {Q20.shown} {Q20=='B'}
T Үнэгүй урт текст Q21 {Q21} {Q21.shown} {strstr(Q21,'hello')>0}
M Олон сонголт, чагтлах нүд Q22 A-F, other {Q22_E}, {Q22_other} {Q22_E.shown}, {Q22_other.shown} {Q22_E=='Y'}
P Тайлбартай олон сонголт, чагтлах нүд + текст Q23 A-F {Q23_D}, {Q23_Dcomment} {Q23_D.shown} {!is_empty(Q23)}
K Олон тоон асуулт Q24 self,mom,dad {Q24_self} {Q24_self.shown} {Q24_self>30}
Q Олон тооны богино текст Q25 A-F {Q25_B} {Q25_B.shown} {substr(Q25_B,1,1)=='Q'}
N Тоон асуултын төрөл Q26 {Q26} {Q26.shown} {Q26 > 30}
R Зэрэглэлийн хэлбэр Q27 1-4 {Q27_1} {Q27_1.shown} {Q27_1==3}
S Богино үнэгүй текст Q28 {Q28} {Q28.shown} {Q28=='mine'}
Y Тийм/Үгүй радио товчнууд Q29 {Q29} {Q29.shown} {Q29=='Y'}


NAOK-ийн хэрэглээ

NAOK --> "Not Applicable" (NA) is alright (OK) буюу "Хамаарахгүй" байсан ч зүгээр


NAOK-ийг ашиглах нь бүх эсвэл зарим хувьсагч холбогдохгүй байх (жишээ нь "Not Applicable" (NA) is alright (OK)) боломжтой гэсэн үг.

Жишээ нь: Q1-ийн нэг дэд асуулт шүүгдсэн бол count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) нь үргэлж хоосон тэмдэгт мөр буцаана. Тийм асуултад сонгосон дэд асуултын тоог тоолохын тулд count(Q1_SQ1.NAOK,Q1_SQ2.NAOK,Q1_SQ3.NAOK,Q1_SQ4.NAOK) гэж ашиглаж болно. Хэрэв дэд асуулт нуугдсан бол EM хоосон тэмдэгт мөр буцаана.

NAOK-гүй үед нэг асуулт эсвэл нэг дэд асуулт нуугдсан бол EM үргэлж хоосон тэмдэгт мөр буцаана (false буцаахтай адил).

.shown нь үргэлж NAOK системийг ашигладаг (нуугдсан бол хоосон мөр буцаана). Харин танд хариултын код хэрэгтэй бол асуултын кодын дараа .NAOK нэмэх нь үргэлж зөв шийдэл байдаг (хэрэв танд өөр зүйл хэрэгтэй бөгөөд юу хийж байгаагаа мэдэж байгаагаас бусад тохиолдолд).

Дэлгэрэнгүй мэдээллийг Давхарласан нөхцлийг дарах дэд хэсгээс үзнэ үү.


Нөөцлөгдсөн "this", "self", "that" хувьсагчид

Асуултын бүх хэсгийг үнэлэх шаардлага ихэвчлэн гардаг, жишээ нь хэдэн дэд асуултад хариулсныг тоолох эсвэл оноог нэгтгэх. Бусад үед асуултын зөвхөн тодорхой мөр эсвэл баганыг боловсруулах хэрэгтэй болдог (жишээ нь мөр эсвэл баганын нийлбэрийг гарган өгөгдлийн санд хадгалах). Эдгээр нөөцлөгдсөн хувьсагчид уг үйлдлийг нэлээд хялбар болгодог.


"This" хувьсагч

"this" хувьсагчийг зөвхөн "Асуулт бүхлээрх баталгаажуулалтын тэгшитгэл" болон "Дэд асуултын баталгаажуулалтын тэгшитгэл" сонголтуудад ашиглана (сүүлийнх нь GUI-аас боломжгүй). Энэ нь тэдгээр асуултууд доторх нүд бүрийн хувьсагчийн нэр болж өргөжинө. Тиймээс бүх оруулга гурваас их байхыг шалгах бол "Дэд асуултын баталгаажуулалтын тэгшитгэл"-ийг (this > 3) гэж тохируулна.


"Self" хувьсагч

"self" болон "that" хувьсагчид илүү хүчирхэг бөгөөд тэгшитгэлийг боловсруулахаас өмнө өргөжих макро болж ажиллана. "self" хувьсагчийн синтаксийн сонголтууд:

  • self
  • self.suffix
  • self.sub-selector
  • self.sub-selector.suffix
  1. дагавар нь qcode-ийн ердийн дагавруудын аль нэг байна (жишээ нь: NAOK, value, shown)
  1. дэд сонгогч нь дараахын аль нэг байж болно:
  • comments - зөвхөн тайлбар болох дэд асуултууд (жишээ нь: Тайлбартай олон сонголт болон Тайлбартай жагсаалт);
  • nocomments - зөвхөн тайлбар биш дэд асуултууд;
  • sq_X - энд X нь мөр эсвэл баганын тодорхойлогч. Зөвхөн X хэв маягт таарах дэд асуултууд сонгогдоно. Хайлт нь кодын бүрэн тодорхойлогч дээр хийгдэх бөгөөд sq_X нь nX, X, Xn дэд асуултуудыг хамруулна (жишээ нь sq_1 ашиглавал a1, 1a, 1, 11 эсвэл 001 дэд асуултууд орно). QCODE_SQCODE_1 болон QCODE_SQCODE_1 гэсэн дэд асуултын кодтой хос шкалтай асуултын төрөл, мөн QCODE_1,QCODE_2 ... гэсэн дэд асуултын кодтой зэрэглэлийн асуултын төрөлд анхаарна уу.

Жишээ:

  • Асуултын аль нэг хэсэгт хариулсан эсэх? -> {count(self.NAOK)>0}
  • Энэ асуултын үнэлгээний оноо хэд вэ? -> {sum(self.value)}

Эдгээрийг мөр болон баганын нийлбэрийг гаргахад мөн ашиглаж болно. A-E мөртэй, 1-5 баганатай тоон хүснэгт байна гэж үзье.

  • Нийт дүн хэд вэ? -> {sum(self.NAOK)}
  • B мөрийн нийлбэр хэд вэ? -> {sum(self.sq_B.NAOK)}
  • 3-р баганын нийлбэр хэд вэ? -> {sum(self.sq_3.NAOK)}


"That" хувьсагч

"that" хувьсагч нь "self" хувьсагчтай төстэй боловч бусад асуултыг лавлах боломж олгодог. Синтакс нь:

  • that.qname
  • that.qname.дагавар
  • that.qname.дэд сонгогч
  • that.qname.дэд сонгогч.дагавар

qname нь дэд асуултын өргөтгөлгүй асуултын нэр юм. Жишээлбэл, 'q1' асуулт үүсгэвэл 'q' нь мөн түүний qname болно.

Жишээ:

  • q1 асуултын аль нэг хэсэгт хариулсан эсэх? -> {count(that.q1.NAOK)>0}
  • q2-ийн үнэлгээний оноо хэд вэ? -> {sum(that.q2.NAOK)}
  • q3-ийн нийт дүн хэд вэ? -> {sum(that.q3.NAOK)}
  • q4 дэх C мөрийн нийлбэр хэд вэ? -> {sum(that.q4.sq_C.NAOK)}
  • q4 дэх 2-р баганын нийлбэр хэд вэ? -> {sum(that.q4.sq_2.NAOK)}

"self" болон "that" хувьсагчийг аливаа холбогдох нөхцөл, баталгаажуулалт эсвэл тохируулгад ашиглаж болно.

Нэг анхаарах зүйл нь Логик файл харуулах боломжийг ашиглахад "self" болон "that"-ийн өргөтгөсөн утгыг харуулдаг. Ингэснээр үүсгэгдэх бодит тэгшитгэлийг харж, та (болон EM) хувьсагчид байгаа эсэхийг баталгаажуулах боломжтой. Тэгшитгэлүүд нэлээд урт харагдаж болох тул төөрөгдүүлж магадгүй. Гэхдээ асуултыг засах үед "self" болон/эсвэл "that" ашигласан анхны тэгшитгэлийг харна.

Дараах тохиолдолд эдгээр хувьсагчийг ашиглах хэрэггүй:
  • тэгшитгэлд ашиглах хувьсагч бүрийг тодорхой нэрлэхийг хүсвэл, эсвэл
  • дэд асуултгүй хувьсагч (жишээ нь: нэг хариулттай асуулт) ашиглаж байгаа бол. Эдгээр тохиолдолд хувьсагчийн өмнө "that" залгах нь илүүц бөгөөд санаанд оромгүй үр дүн гарах эрсдэлтэй.

Функцүүдэд хандах

ExpressionScript нь доор үзүүлсэн математик, тэмдэгт мөр болон хэрэглэгчийн тодорхойлсон функцүүдэд хандах боломж олгодог. Эдгээр функцийн PHP болон JavaScript эквивалент байдаг тул сервер талд (PHP) болон клиент талд (JavaScript) ижилхэн ажиллана. Шинэ функц нэмэхэд хялбар.


Хэрэгжүүлсэн функцүүд

Одоогоор дараах функцүүд боломжтой:

Функц Утга Синтакс
abs Абсолют утга number abs(number)
acos нум хэлбэрийн косинус number acos(number)
addslashes Мөрийг налуу зураасаар хашилтлах string addslashes(string)
asin нум хэлбэрийн синус number asin(number)
atan нум хэлбэрийн тангенс number atan(number)
atan2 2 хувьсах хэмжигдэхүүн бүхий нуман тангенс number atan2(number, number)
ceil бутархай тоог бүхэл тоонд хүргэж ойролцоогоор өсгөх number ceil(number)
checkdate Григорийн тооллын зөв огноо бол үнэн(1) буцаана bool checkdate(month,day,year)
convert_value Тоон утгыг тоон утгуудын inputTable болон outputTable ашиглан хөрвүүлэх number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList)
cos Косинус number cos(number)
count жагсаалт дахь хариулсан (хоосон биш) асуултуудын тоог тоолох number count(arg1, arg12, ..., argN)
countif Жагсаалт дахь эхний аргументтай тэнцүү хариулсан асуултуудын тоог тоолох number countif(matches, arg1, arg2, ... argN)
countifop Жагсаалт дахь шалгуурыг (arg op value) хангасан хариулсан асуултуудын тоог тоолох number countifop(op, value, arg1, arg2, ... argN)
date тогтмол байрлах өдөр/ цаг форматлах string date(format [, timestamp=time()])
exp е зэрэгт дэвшүүлэн тооцоол number exp(number)
fixnum Шаардлагатай бол тоог бутархай салгагчаар таслал ашиглан харуулах string fixnum(number)
floor бутархай тоог бүхэл тоонд хүргэж ойролцоогоор бууруулах number floor(number)
gmdate GMT огноо/цагийн формат string gmdate(format [, timestamp=time()])
html_entity_decode Бүх HTML entity-г тохирох тэмдэгт болгон хөрвүүлэх (үргэлж ENT_QUOTES болон UTF-8 ашиглана) string html_entity_decode(string)
htmlentities Тохирох бүх тэмдэгтийг HTML entity болгон хөрвүүлэх (үргэлж ENT_QUOTES болон UTF-8 ашиглана) string htmlentities(string)
expr_mgr_htmlspecialchars Тусгай тэмдэгтүүдийг HTML entity болгон хөрвүүлэх (үргэлж ENT_QUOTES болон UTF-8 ашиглана) string htmlspecialchars(string)
expr_mgr_htmlspecialchars_decode Тусгай HTML entity-г буцаан тэмдэгт болгох (үргэлж ENT_QUOTES болон UTF-8 ашиглана) string htmlspecialchars_decode(string)
idate тогтмол байрлах өдөр/ цаг -ыг бүхэл тоо руу форматлах string idate(string [, timestamp=time()])
if Excel маягийн if(test,result_if_true,result_if_false) if(test,result_if_true,result_if_false)
implode цуглуулагдсан элэментүүдэд хэлхээгээр нэгдэх string implode(glue,arg1,arg2,...,argN)
intval хувьсах хэмжигдэхүүний үр дүнг бүхэл болгох int intval(number [, base=10])
is_empty Хувьсах хэмжигдэхүүн хоосон гэж тооцогдох эсэхийг тодорхойлох bool is_empty(var)
is_float Хувьсах хэмжигдэхүүний төрөл нь float эсэхийг шалгах bool is_float(var)
is_int Хувьсах хэмжигдэхүүний төрөл нь бүхэл тоо эсэхийг шалгах bool is_int(var)
is_nan үр дүн нь тоогоор биш байхаар олох уу үгүй юу bool is_nan(var)
is_null хувьсах хэмжигдэхүүн нь NULL байхаар олох уу үгүй юу bool is_null(var)
is_numeric Хувьсах хэмжигдэхүүн нь тоо эсвэл тоон мөр эсэхийг шалгах bool is_numeric(var)
is_string Хувьсах хэмжигдэхүүний төрөл нь мөр эсэхийг шалгах bool is_string(var)
join (New in 2.0 build 130129) Элементүүдийг шинэ мөр болгон нэгтгэх join(arg1, arg2, ... argN)
list Хоосон биш утгуудын таслалаар тусгаарласан жагсаалтыг буцаах string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) Шалгуурыг (cmpProp op value) хангасан жагсаалт дахь асуултуудаас заасан асуултын шинж чанарыг (retProp) 'glue' тусгаарлагчаар тусгаарласан жагсаалтаар буцаах string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
ltrim Мөрийн эхнээс хоосон зай (эсвэл бусад тэмдэгт) хасах string ltrim(string [, charlist])
max Хамгийн том утгыг олох number max(arg1, arg2, ... argN)
min Хамгийн бага утгыг олох number min(arg1, arg2, ... argN)
mktime Огнооны UNIX timestamp авах (6 аргумент тус бүр сонголттой) number mktime([hour [, minute [, second [, month [, day [, year ]]]]]])
modulo-function Модуль функц одоогоор дэмжигдээгүй. Оронд нь floor() функцийг ашиглаж болно floor(x/y)==(x/y)
nl2br Мөрийн бүх шинэ мөрийн өмнө HTML мөр таслагч оруулах string nl2br(string)
number_format дугаарлагдсан мянган групыг форматлах string number_format(number)
pi үр дүнг 3,14 болгох number pi()
pow зргийн илтгэгчтэй илэрхийлэл number pow(base, exp)
quoted_printable_decode Quoted-printable мөрийг 8 битийн мөр болгон хөрвүүлэх string quoted_printable_decode(string)
quoted_printable_encode 8 битийн мөрийг quoted-printable мөр болгон хөрвүүлэх string quoted_printable_encode(string)
quotemeta өөрчлөгдсөн бичгүүдийг үнэл string quotemeta(string)
rand Санамсаргүй бүхэл тоо гаргах, энэ жишээг үзнэ үү int rand() OR int rand(min, max)
regexMatch Мөрийг тогтмол хэмжигдэхүүнтэй харьцуулах bool regexMatch(pattern,input)
round тоог сонгон нарийвчил number round(val [, precision])
rtrim Мөрийн төгсгөлөөс хоосон зай (эсвэл бусад тэмдэгт) хасах string rtrim(string [, charlist])
sin Синус number sin(arg)
sprintf форматлагдсан хэлхээг буцаах string sprintf(format, arg1, arg2, ... argN)
sqrt квадрат язгуур number sqrt(arg)
stddev Тооны жагсаалтын түүврийн стандарт хазайлтыг тооцоолох number stddev(arg1, arg2, ... argN)
str_pad Мөрийг өөр мөрөөр тодорхой уртад хүртэл дүүргэх string str_pad(input, pad_length [, pad_string])
str_repeat давтагдсан хэлхээ string str_repeat(input, multiplier)
str_replace Хайсан мөрийн бүх илрэлийг орлуулах мөрөөр солих string str_replace(search, replace, subject)
strcasecmp давхар баталгаажсан кейсэн мэдээгүй хэлхээн харьцуулалт int strcasecmp(str1, str2)
strcmp давхар баталгаажсан хэлхээн харьцуулалт int strcmp(str1, str2)
strip_tags хэлхээгээс HTML болон PHP-д хаяглагдсан зурвас string strip_tags(str, allowable_tags)
stripos Том, жижиг үсгийг ялгахгүйгээр юникод мөрийн эхний илрэлийн байрлалыг олох (0-ээс эхэлнэ, олдохгүй бол false буцаана) int stripos(haystack, needle [, offset=0])
stripslashes үнэлсэн хэлхээг үнэлэхгүй байх string stripslashes(string)
stristr кейсэн мэдээгүй strstr string stristr(haystack, needle [, before_needle=false])
strlen Мөрийн уртыг авах int strlen(string)
strpos Юникод мөрийн эхний илрэлийн байрлалыг олох (0-ээс эхэлнэ, олдохгүй бол false буцаана) int strpos(haystack, needle [ offset=0])
strrev Мөрийг тонгоруулах string strrev(string)
strstr Мөрийн эхний илрэлийг олох string strstr(haystack, needle[, before_needle=false])
strtolower Мөрийг жижиг үсэгтэй болгох string strtolower(string)
strtotime Англи хэл дээрх огноо цагийн тэмдэгт тайлбарыг Unix timestamp болгон задлах int strtotime(string)
strtoupper Мөрийг том үсэгтэй болгох string strtoupper(string)
substr Юникод мөрийн нэг хэсгийг буцаах string substr(string, start [, length])
sum цуглуулагдсан үр дүнгийн нийлбэрийг тооцоол number sum(arg1, arg2, ... argN)
sumifop Жагсаалт дахь шалгуурыг (arg op value) хангасан хариулсан асуултуудын утгыг нэмэх number sumifop(op, value, arg1, arg2, ... argN)
tan Тангенс number tan(arg)
time түгээмэл UNIXхугацааны ангиллыг буцаах number time()
trim Мөрийн эхлэл болон төгсгөлөөс хоосон зай (эсвэл бусад тэмдэгт) хасах string trim(string [, charlist])
ucwords Мөр дэх үг бүрийн эхний тэмдэгтийг том үсэг болгох string ucwords(string)
unique хэрэв бүх хоосон биш үр дүнгүүд нь хосгүй бол буцаалт нь үнэн boolean unique(arg1, ..., argN)
Төлөвлөсөн (эсвэл авч үзэж буй) функцүүдийн талаар дэлгэрэнгүй мэдэхийг хүсвэл энд дарна уу.

<span id="Create_new_expression_functions_with_plugin_ (New in 4.0.0 )">

Плагинаар илэрхийллийн шинэ функц үүсгэх (New in 4.0.0 )

Хэрэв үндсэн системд байхгүй шинэ функц хэрэгтэй бол плагин ашиглан үүсгэж болно. Ийм шинэ функцийг expressionManagerStart үйл явдлыг ашиглан үүсгэнэ.

ExpressionScript аль хувьсагчууд локал болохыг мэддэг

Хуудасны JavaScript-ийг зөв үүсгэхийн тулд EM нь хуудсан дээр ямар хувьсагчид тохируулагдсан болон тэдгээрийн JavaScript ID юу болохыг (жишээ нь document.getElementById(x)-д зориулж) мэдэх шаардлагатай. Мөн бусад хуудсан дээр ямар хувьсагчид тохируулагдсаныг мэдэх ёстой (ингэснээр шаардлагатай <input type='hidden' value='x'> талбарууд байгаа бөгөөд утгаар дүүрсэн эсэхийг баталгаажуулна).


Дараалсан нөхцөлүүд

Хэрэв хувьсагчдын аль нэг нь холбогдолгүй бол бүх тэгшитгэл холбогдолгүй (false) болно. Жишээлбэл, дараах хүснэгтэд N/A нь хувьсагчдын аль нэг нь холбогдолгүй байсныг илэрхийлнэ:


Оператор Жишээ a b Үр дүн
+ (unary) +a N/A false
! !a N/A false
== (or eq) a == b N/A 5 false
== (or eq) a == b N/A 0 false
== (or eq) a == b N/A N/A false
!= (or ne) a != b N/A 5 false
!= (or ne) a != b N/A N/A false
!= (or ne) a != b N/A 0 false
> (or gt) a > b N/A 5 false
>= (or ge) a >= b N/A 5 false
< (or lt) a < b N/A 5 false
<= (or le) a <= b N/A 5 false
and a and b N/A 5 false
and a and b N/A N/A false
or a or b N/A N/A false
or a or b N/A 5 false
+ a + b N/A 5 false
* a * b N/A 5 false
/ a / b 5 N/A false
() (a) N/A false
(exp) (a && b) N/A 5 false
(exp) op (exp) (b + b) > (a && b) N/A 5 false
function sum(a,b,b) N/A 5 false
function max(a,b) N/A 5 false
function min(a,b) N/A 5 false
function implode(', ',a,b,a,b) N/A 5 false
function if(a,a,b) N/A 5 false
function is_empty(a) N/A false
function is_empty(a) 0 (or blank) true
function !is_empty(a) N/A false


Дараалсан нөхцөлүүдийг давах

Та бүх холбогдох хариултуудын нийлбэрийг үзүүлэхийг хүсч байна гэе. Та {sum(q1,q2,q3,...,qN)} тэгшитгэлийг ашиглаж үзэж болно. Гэвч энэ нь дотооддоо LEMif(LEManyNA("q1","q2","q3",...,"qN"),"",sum(LEMval("q1"),LEMval("q2"),LEMval("q3"),...,LEMval("qN"))) болж хөрвөнө. Тиймээс q1-qN утгуудын аль нэг нь холбогдолгүй бол тэгшитгэл үргэлж false буцаана. Энэ тохиолдолд sum() нь бүх асуултад хариулах хүртэл "0" гэж харуулна.

Үүнийг тойрохын тулд хувьсагч бүрт ".NAOK" дагавар (Not Applicable is OK буюу холбогдолгүй байж болно гэсэн утгатай) нэмж болно. Ингэснээр дараах байдлаар ажиллана. Танд q1.NAOK хувьсагч байна гэе:

  1. q1 нь LEManyNA() хэсэгт нэмэгдэхгүй
  2. LEMval('q1') нь хариулт холбогдолтой эсэхийг үргэлжлүүлэн шалгах бөгөөд холбогдолгүй бол "" буцаана (тиймээс холбогдолгүй хариултууд тус тусдаа үл тооцогдох боловч бүх илэрхийллийг хүчингүй болгохгүй).

Иймд нийлбэрийн асуудлыг шийдэх арга бол sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK) тэгшитгэлийг ашиглах явдал юм.

.NAOK дагаврыг ашигласнаар зохиогчид хэд хэдэн боломжит замтай боловч дараа нь нийтлэг замд нийлдэг судалгаа зохиох боломжтой болно. Жишээлбэл, оролцогчид судалгаанд хариултын хэвийн мужаас гадуур хариулсан гэе. Зохиогч оролцогчдод зөв үр дүн гарахгүй байж болзошгүйг сануулж, судалгааг үнэхээр үргэлжлүүлэхийг хүсч байгаа эсэхийг асууж болно. Хэрэв тэд "Тийм" гэж хариулбал үлдсэн асуултууд харагдана. "Үлдсэн асуултууд"-ын нөхцөл нь анхны хариултууд хэвийн мужид байсан ЭСВЭЛ хэвийн мужаас гадуур хариулсан тохиолдолд л холбогдох асуултад оролцогч "Тийм" гэж хариулсан эсэхийг шалгана.

ExpressionScript нөхцөлт микро-тохируулгыг хэрхэн дэмждэг вэ?

Микро-тохируулгын жишээ энд байна (Question Type=='expr' нь Тэгшитгэл гэсэн утгатай):


Асуултын код Холбогдол Асуултын төрөл Асуулт
name 1 text Таны нэр хэн бэ?
age 1 text Та хэдэн настай вэ?
badage !is_empty(age) expr {(age<16) or (age>80)}
agestop badage message Уучлаарай, {name}, та энэ тестэд хэт {if( (age<16),'залуу',if( (age>80),'настай','дундаж настай') ) } байна.
kids !badage yesno Танд хүүхэд байгаа юу?
parents 1 expr {!badage && kids=='Y'}
numKids parents text Танд хэдэн хүүхэд байгаа вэ?
kid1 parents && numKids >= 1 text Таны анхны хүүхэд хэдэн настай вэ?
kid2 parents && numKids >= 2 text Таны хоёр дахь хүүхэд хэдэн настай вэ?
kid3 parents && numKids >= 3 text Таны гурав дахь хүүхэд хэдэн настай вэ?
kid4 parents && numKids >= 4 text Таны дөрөв дэх хүүхэд хэдэн настай вэ?
kid5 parents && numKids >= 5 text Таны тав дахь хүүхэд хэдэн настай вэ?
sumage 1 expr {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
report parents text {name}, та {age} настай бөгөөд {numKids} хүүхэдтэй гэж хэллээ. Таны эхний {min(numKids,5)} хүүхдийн насны нийлбэр {sumage} байна


Дээрх судалгааны жишээг татаж авахын тулд дараах холбоос дээр дарна уу: Хүүхдийн тоотой судалгааны жишээ.

Эдгээр бүх асуултыг нэг хуудсан дээр (жишээ нь нэг бүлэгт) байрлуулж болох бөгөөд зөвхөн холбогдох асуултууд харагдана. Түүнчлэн хүүхдүүдийн насыг оруулах үед сүүлийн асуулт доторх sum() илэрхийлэл динамикаар шинэчлэгдэнэ.

ExpressionScript энэ боломжийг илэрхийлэл бүрийг нэртэй <span> элементээр хүрээлж өгөх замаар хангадаг. Утга өөрчлөгдөх бүрт тухайн <span> элемент дотор харагдах ёстой илэрхийллийг дахин тооцоолж, дэлгэцийг шинэчилдэг. Нэг хуудсан дээр ийм тохируулсан олон арван, бүр олон зуун илэрхийлэл байж болно.


Өгүүлбэр зүйн тодруулга

Илэрхийллийг оруулах болон шалгахад туслахын тулд EM нь дараах онцлогуудтай өгүүлбэр зүйн тодруулгыг хангадаг:

Өгүүлбэр зүйн тодруулгын төрөл ба утга

Өнгө Жишээ Утга Зөвлөмж мэдээлэл Тайлбар
tan background Sample бүх тэгшитгэл байхгүй Тэгшитгэл гэж танигдсан буржгар хаалт доторх бүх зүйл (жишээ нь эхэнд эсвэл төгсгөлд хоосон зай байхгүй) нь эргэн тойрны текстээс ялгахын тулд шаргал дэвсгэр өнгөөр тодрогдоно
bold red text Sample Алдаа Алдааны тухай тайлбар Үл мэдэгдэх хувьсагч эсвэл функц доторх алдаа байж болно. Судалгаа эвдэрсэн бөгөөд тухайн илэрхийлэлд тулгуурласан асуултууд хариулагчдад харагдахгүй.
blue text Sample функцийн нэр утга болон зөвшөөрөгдөх өгүүлбэр зүй Функцийн нэр эсвэл нээлттэй хаалтаар үргэлжилж буй тул функц байх ёстой зүйлсийг илэрхийлнэ. Тэдгээр нь тод цэнхэр өнгөөр харагдана. Зөвлөмж мэдээлэл нь функцийн утга болон зөвшөөрөгдөх өгүүлбэр зүйг харуулна.
grey text Sample тэмдэгт мөр байхгүй Нэг болон давхар хашилттай тэмдэгт мөрүүд саарал өнгөөр харагдана.
cyan text Sample ижил хуудсан дээр тохируулсан хувьсагч, [name]: асуулт; утга; утга бүрийн кодыг харуулсан хариултын жагсаалт Таны одоо засварлаж буй асуулттай ижил хуудсан дээр тохируулсан аливаа хувьсагч цэнхэрдүү өнгөөр харагдана (үүнийг javascript-ээр шинэчилж болно). Зөвлөмж мэдээлэл нь түүний нэр, бодит асуулт, одоогийн утгыг (тохируулаагүй бол хоосон) харуулна. Хэрэв асуултын төрөл тоолсон утгын олонлогоос хариулт хүлээдэг бол кодуудыг харуулах утгуудтай харгалзуулсан жагсаалт харагдана.
green text Sample өмнөх хуудсан дээр тохируулсан хувьсагч [name]: асуулт; утга; утга бүрийн кодыг харуулсан хариултын жагсаалт Өмнөх хуудсан дээр тохируулсан аливаа хувьсагч тод ногоон өнгөөр харагдана. Зөвлөмж мэдээлэл нь түүний нэр, бодит асуулт, одоогийн утгыг (тохируулаагүй бол хоосон) харуулна. Хэрэв асуултын төрөл тоолсон утгын олонлогоос хариулт хүлээдэг бол кодуудыг харуулах утгуудтай харгалзуулсан жагсаалт харагдана.
bold pink text Sample дараагийн хуудсан дээр тохируулсан хувьсагч ерөнхийдөө: судалгааны эхэнд хоосон байх боловч индекс эсвэл өмнөх рүү шилжих үед дүүрч болно [name эсвэл SGQA код]: асуулт; утга; утга бүрийн кодыг харуулсан хариултын жагсаалт Дараагийн хуудсан дээр тохируулсан аливаа хувьсагч тод ягаан өнгөөр харагдана. Зөвлөмж мэдээлэл нь түүний нэр, бодит асуулт, одоогийн утгыг (тохируулаагүй бол хоосон) харуулна. Хэрэв асуултын төрөл тоолсон утгын олонлогоос хариулт хүлээдэг бол кодуудыг харуулах утгуудтай харгалзуулсан жагсаалт харагдана.
bold tan text Sample lime replacement утга утга Lime Replacement Strings ({TOKEN:xxx}, {PRIVACY_MESSAGE} гэх мэт) тод шаргал хүрэн өнгөөр харагдана.
red text Sample онооих оператор (=) анхааруулах мессеж Хэрэв та онооих операторуудын нэгийг (=) ашиглавал тэр оператор улаан өнгөөр харагдана. Энэ нь a == b эсэхийг шалгах гэсэн байтал a = b гэж утга оноохоос санамсаргүйгээр сэргийлэхэд зориулагдсан.
normal black text Sample тэмдэгтүүд байхгүй Илэрхийлэл доторх бусад бүх тэмдэгтүүд энгийн хар өнгөөр харагдана.
red-boxed text тод улаан шугам алдааг хүрээлнэ өгүүлбэр зүйн алдаа алдааны тайлбар Илрүүлсэн бүх өгүүлбэр зүйн алдаа улаан хүрээн дотор харагдана. Зөвлөмж мэдээлэл нь алдааг харуулна. Жишээнд хаагдаагүй хаалт, тодорхойлогдоогүй функц ашиглах, функцэд буруу тооны аргумент дамжуулах, муу бүтэцтэй илэрхийлэл (жишээ нь хувьсагчдын хооронд оператор дутуу), зөвхөн унших хувьсагчид шинэ утга оноохыг оролдох, хувьсагч бус зүйлд утга оноохыг оролдох эсвэл ямар нэгэн дэмжлэггүй өгүүлбэр зүй ашиглах орно. Өгүүлбэр зүйн алдаа илрүүлэх систем нь олон алдаа байсан ч илэрхийлэл дэх зөвхөн нэг алдааг мэдээлж болохыг анхаарна уу; гэхдээ ямар нэг алдаа илрсэн бол дор хаяж нэг алдаа харагдана.


Зөвлөмж мэдээлэл гэж бид тодорхой функц болон хувьсагч дээр курсороо аваачихад гарч ирэх попап мессежийг хэлж байна.


Нэмэлт унших материал

ExpressionScript-ийн жишээ судалгаанууд

Хэрэглээний тохиолдол ба зааварчилгаа

Алхам алхмаар жишээнүүд

Хөгжүүлэгчдэд зориулсан лавлах

Хөгжлийн зураглал, төлөв байдал, хийх ажлын жагсаалт