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 - دليل البدء السريع
  17. غير مصنفة والميزات المتقدمة
  18. الأسئلة الشائعة العامة
  19. استكشاف الأخطاء وإصلاحها
  20. حلول بديلة
  21. الترخيص
  22. سجل تغييرات الإصدارات
  23. البرامج المساعدة
 Actions

أمثلة على ExpressionScript

From LimeSurvey Manual

ربما تُرجمت هذه الصفحة آليًا وقد تحتوي على أخطاء. عرض الأصل الإنجليزي · تحسين هذه الترجمة
This page is a translated version of the page ExpressionScript examples and the translation is 100% complete.
يرجى المساعدة في توسيع هذه المقالة بإضافة أمثلتك الخاصة. سيساعد ذلك الآخرين على البدء في استخدام سكريبت التعبير.


البنية

سيصف الجزء الأول من المقالة الأغراض التي يمكن استخدام التعبيرات من أجلها وأين يمكنك العثور على تعبير أو إضافته. أما الجزء الثاني فيقدم أمثلة حول كيفية استخدام التعبيرات.


فئات التعبيرات

يستخدم LimeSurvey التعبيرات للأغراض التالية:


الملاءمة

الغرض: إخفاء مجموعات الأسئلة/الأسئلة

تتحكم الملاءمة في إظهار مجموعة الأسئلة أو السؤال أو إخفائه. إذا كانت نتيجة التعبير "true" (أي 1)، فسيتم عرض العنصر. وإلا (إذا كانت نتيجة التعبير "false" (أي 0))، فسيتم إخفاء العنصر.

النوع يُظهر/يُخفي مكان العثور عليه لقطة الشاشة
ملاءمة مجموعة الأسئلة مجموعة أسئلة إنشاء/تحرير مجموعة الأسئلة -> "معادلة الصلة:"
ملاءمة السؤال سؤال إنشاء/تحرير السؤال -> "معادلة الصلة:"
ملاءمة السؤال الفرعي سؤال فرعي حرر السؤال الفرعي -> "معادلة الصلة:"


التحقق من الصحة

الغرض: التحقق من صحة المدخلات/الإجراءات على الأسئلة/الأسئلة الفرعية/الإجابات

يتحكم التحقق من الصحة في ما إذا كان إدخال المشارك في سؤال ما أو إجراؤه صحيحًا أم لا. إذا كانت نتيجة التعبير "true" (أي 1)، فسيتم تطبيق الفئة "good" على العنصر ورسالة التحقق. وإلا، إذا كانت نتيجة التعبير "false" (أي 0)، فسيتم تطبيق الفئة "error" على العنصر ورسالة التحقق. يمكنك تعريف نمط لهذه الفئات في الملف template.css.

النوع يتحقق من مكان العثور عليه لقطة الشاشة
التحقق من صحة السؤال سؤال إنشاء/تحرير السؤال -> "علامة التبويب المنطق" -> "معادلة التحقق من صحة السؤال"
التحقق من صحة السؤال الفرعي أسئلة فرعية إنشاء/تحرير السؤال -> "علامة التبويب المنطق" -> "معادلة التحقق من صحة السؤال الفرعي" ‎

إخراج النص

الأغراض: (القيام بشيء ما) وكتابة نص

يمكن استخدام التعبير لكتابة نص. على سبيل المثال، يمكنك اختبار شيء ما أو حسابه وتحديد المخرجات اعتمادًا على نتيجة الاختبار أو الحساب. كما يمكن استخدامه لإدراج نص السؤال أو الإجابات أو أنواع الأسئلة ... الخاصة بسؤال استُخدم قبل استخدام التعبير. يمكن استخدام إخراج النص في أي مكان يُعرض فيه نص، ويمكنه إرجاع جميع أنواع النتائج.

حالة الاستخدام الوصف
التخصيص الدقيق تعديل نص ما، مثل كتابة "السيد" أو "السيدة" بناءً على سؤال عن الجنس طُرح من قبل
الحساب حساب قيمة وكتابتها، مثل "دخل أسرتك هو xxx"
المرجع إدراج نص من عنصر ما، مثل "اسمك هو xxx. كم عمرك؟"


تخزين الإجابات

الأغراض: (القيام بشيء ما،) (كتابة نص) وتخزين شيء ما في قاعدة البيانات

يمكن استخدام نوع سؤال المعادلة لتخزين شيء ما في قاعدة البيانات. يمكنك القيام بشيء ما باستخدام تعبير، وعرض سؤال المعادلة (الذي يشبه إظهار المعلومات المكتوبة (النصوص)) وتخزين نتيجة التعبير في قاعدة البيانات. يخزّن الإجابة في جدول الاستجابات. بعد ذلك، يمكن استخدام النتيجة ضمن ميزة الإحصاءات أو استيرادها بأحد التنسيقات التي توفرها وظيفة التصدير في LimeSurvey.

أمثلة على التعبيرات

إدراج إجابة من سؤال سابق

الغرض إدراج إجابة من سؤال سابق
النوع مرجع
مثال السؤال الأول (رمز السؤال "Q00"): في أي مدينة تعيش؟
السؤال الثاني (رمز السؤال "Q01") منذ متى تعيش في CITY؟
المطلوب: استخدام الإجابة من السؤال الأول بدلاً من "CITY" في السؤال الثاني.
التعبير {QOO}
الوصف تحل الإجابة المقدمة في Q00 محل الحقل Q00 في السؤال الثاني
الخطوات إنشاء/تحرير السؤال الثاني
أدرج "منذ متى تعيش في {QOO} (بالسنوات)؟" في حقل نص السؤال

استخدام سؤال معادلة مخفي لملء إجابة تلقائيًا

المشكلة: تخيّل أن لديك سؤالين Q1 وQ2. يسأل Q1 المشاركين عن أعمارهم. يقسّم Q2 المشاركين إلى ثلاث مجموعات: العمر أقل من 20 سنة، العمر 20 سنة، العمر أكبر من 20 سنة. لذلك، يجب أن يستخدم Q2 القيم "1" و"2" و"3" التي تتوافق مع الشروط أعلاه. كما يجب ألا ننسى جعل Q2 غير مرئي (لن يُعرض السؤال في الاستبيان، لكن القيم ستُخزَّن عبر "العملية الخلفية" في جدول الاستجابات).

لملء قاعدة البيانات باستخدام نوع سؤال المعادلة:

  • أولاً، أنشئ سؤالاً برمز Q1 من نوع المدخل العددي.
  • ثم أنشئ سؤالاً آخر برمز Q2 من نوع سؤال المعادلة.
  • في علامة التبويب "إعدادات العرض" الخاصة بـ Q2:
    • اضبط الحقل "دائما اخف هذا السؤال" على "يعمل"
    • اكتب في حقل "معادلة" التعبير التالي:
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}

إنشاء صفحة ملخص باستخدام العناصر النائبة

يوضح هذا الدرس كيفية إنشاء نظرة عامة في نهاية الاستبيان تسرد جميع الأسئلة والإجابات عبر العناصر النائبة في ExpressionScript. كما يوضح كيفية قصر هذه النظرة العامة على الأسئلة التي تمت الإجابة عنها فقط.

يمكنك تنزيل المثال الخاص بنا من هنا: مثال استبيان العناصر النائبة.


أنواع الأسئلة المستخدمة هنا:

1. أسئلة تسمح باختيار جواب واحد / أسئلة نصية أو رقمية مفردة

  • القائمة (المنسدلة)
  • قائمة ( راديو) [L]
  • نعم/لا [Y]
  • نص حر طويل [T]
  • نص حر قصير [S]
  • المدخل العددي [N]
  • معادلة [*]


2. سؤال يحتوي على أسئلة فرعية

  • نص قصير مركب/ مزدوج [Q]
  • خيار متعدد [M]
  • صفيف [F]
  • صف( نعم/ لا/ غير متأكد) [C]
  • صف( اختيار 10 نقاط) [B]


3. أسئلة ذات مقياسين

  • صفيف المقياس المزدوج [1]


4. أسئلة ذات مقياسين X وY

  • صفيف (أرقام) [:]


5. حجب اللأسئلة

  • إظهار المعلومات المكتوبة (النصوص) [X]


في هذا المثال البسيط، ستكون نظرتنا العامة عبارة عن قائمة بسيطة تتضمن:

- نص السؤال: إجابة المستخدم


أسئلة تسمح باختيار جواب واحد / أسئلة نصية أو رقمية مفردة

بالنسبة لجميع أنواع الأسئلة هذه، سيخزن LimeSurvey ردًا واحدًا:

  • القائمة (المنسدلة)
  • قائمة ( راديو)
  • قائمة بها تعليقات
  • اختيار 5 نقاط
  • نعم/لا
  • نص حر قصير
  • نص حر طويل
  • نص حر كبير
  • المدخل العددي
  • معادلة
  • التاريخ
  • الجنس

بافتراض أن رمز السؤال هو q1، يمكننا الإشارة إلى نص السؤال والإجابة باستخدام:

- {q1.question}: {q1.shown}

مثال:

- كم عمرك؟: 25


إذا أردت التحقق مما إذا تمت الإجابة عن هذا السؤال، يمكنك وضع عبارة IF حول المخرجات:

{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}

تُترجم هذه العبارة إلى: إذا كان السؤال الذي رمزه q1 غير فارغ، فأخرج "- " مع نص السؤال مع ": " مع نص الإجابة (تقوم الدالة join() بضم العناصر في سلسلة نصية جديدة)؛ وإلا: لا تُخرج شيئًا ("" تعني سلسلة نصية فارغة).

سؤال يحتوي على أسئلة فرعية

يستخدم LimeSurvey الأسئلة الفرعية لجميع أنواع الأسئلة التالية:

  • نص قصير مركب/ مزدوج
  • خيار متعدد
  • خيار متعدد مه تعليقات
  • صفيف
  • صف( اختيار 5 نقاط)
  • صف( اختيار 10 نقاط)
  • صف( نعم/ لا/ غير متأكد)
  • مجموعة (الزيادة / نفس / النقص)
  • صفيف مرتب حسب الاعمدة

بافتراض أن رمز السؤال هو q2 وأن الأسئلة الفرعية مرقمة SQ001 وSQ002 (ترقيم تلقائي يتم بواسطة LimeSurvey)، يمكننا الإشارة إلى نص السؤال والإجابة باستخدام:

- {q2_SQ001.question}: {q2_SQ001.shown}

- {q2_SQ002.question}: {q2_SQ002.shown}

في أسئلة الخيار المتعدد، من المنطقي ألا يتم عرض نص السؤال الفرعي المحدد، بل عرض الحرف Y لكل خيار تم تحديده:

- {q2_SQ001.question}: {q2_SQ001}

- {q2_SQ002.question}: {q2_SQ002}

...

لاحظ أنه لا يمكن حاليًا إخراج نص السؤال للأسئلة التي تحتوي على أسئلة فرعية، راجع طلب الميزة هذا.


مثال 1 (بافتراض أن نوع السؤال هو خيار متعدد)

- هل تعرف ماركات السيارات هذه؟

-- Mercedes: Y

-- Audi: N

-- Volvo: Y


إذا كنت ترغب في إخراج العناصر المحددة فقط، فيمكنك وضع عبارة IF حول المخرجات والتحقق من قيمة مربع الاختيار:

{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }


استخدم الدالة listifop إذا كنت ترغب في إخراج قائمة بالعناصر المحددة فقط، مثل: Mercedes, Volvo

{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }


حيث يتوسع  that.q2  ليشمل جميع الأسئلة الفرعية للسؤال q2. راجع self وthis وthat لمزيد من التفاصيل.


مثال 2 (بافتراض أن نوع السؤال هو صف( اختيار 10 نقاط))

- يرجى تقييم جودة ماركات السيارات أدناه على مقياس من 1=سيئ جدًا إلى 10=جيد جدًا؟

-- Mercedes: 7

-- Audi: 9

-- Volvo: 9


إذا كنت ترغب في إخراج العناصر التي تم تقييمها فقط، فيمكنك وضع عبارة IF حول المخرجات والتحقق مما إذا كان السؤال الفرعي الحالي قد تمت الإجابة عنه باستخدام:

{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }


استخدم الدالة listifop إذا كنت ترغب مثلًا في إخراج قائمة بالعناصر المحددة التي تزيد قيمتها على ثمانية فقط، مثل: Audi / Volvo

{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }


سؤال بمقياسين

ينطبق هذا على نوع السؤال ذي المقياس المزدوج فقط.


لنفترض أن الأكواد التالية مستخدمة:

  • كود السؤال: q4
  • أكواد الأسئلة الفرعية: SQ001, SQ002, ...
  • أكواد الإجابات للمقياس 1: A1, A2, ...
  • أكواد الإجابات للمقياس 2: B1, B2, ...


للإشارة إلى نتيجة سؤال فرعي معين في مقياس معين، يجب استخدام QuestionCode . '_' . SubQuestionCode . '_' . ScaleID. لاحظ أن "ScaleID" يساوي 0 للمقياس الأول و1 للمقياس الآخر!
مثال للإشارة إلى إجابة السؤال الفرعي الثالث والمقياس الثاني: q4_SQ003_1 - السؤال 4، السؤال الفرعي 3، المقياس الثاني.


لنُخرج النتائج للمقياسين وللسؤالين الفرعيين الأولين:

- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}

- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}

لإخراج نص السؤال الفرعي، تحتاج إلى إضافة معرّف المقياس إلى العنصر النائب (رغم أن النصوص متطابقة في المقياسين). لذا بدلًا من {q4_SQ001.question} علينا استخدام {q4_SQ001_0.question} أو {q4_SQ001_1.question}.

إذا كنت ترغب في تصدير/عرض نتائج الأسئلة الفرعية التي تحتوي على إجابة واحدة على الأقل فقط، فاستخدم هذه الصيغة لكل سؤال فرعي:

{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}

سؤال بمقياسي X وY

ينطبق هذا على جميع أسئلة المصفوفة التي تسمح بإجابة لكل خلية (وليس لكل صف فقط كما هو موضح سابقًا):

  • صفيف نصوص
  • صفيف أرقام


الرموز المفترض استخدامها:

  • رمز السؤال: q5
  • رموز الأسئلة الفرعية: SQ001 وSQ002 و...
  • رموز الإجابة: A1 وA2 و...

للإشارة إلى نتيجة سؤال فرعي معين من عمود معين، عليك استخدام QuestionCode . '_' . SubQuestionCode . '_' . AnswerCode. مثال للإشارة إلى إجابة السؤال الفرعي الثالث والعمود الثاني: q5_SQ003_A2.

لنُخرج النتائج للأعمدة 1-3 من أول سؤالين فرعيين:

- {q5_SQ001_A1.question}: {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown}

- {q5_SQ002_A1.question}: {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown}


بما أن كل خلية (تقاطع المحور X والمحور Y) في أنواع الأسئلة هذه تعادل خيار إجابة واحدًا، يجب إجراء اختبار لوجود البيانات لكل خلية. مثال:

{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}


لإخراج نص السؤال الفرعي عليك إضافة رمز الإجابة إلى العنصر النائب (رغم أن النصوص هي نفسها لجميع خيارات الإجابة). لذا بدلًا من {q5_SQ001.question} علينا استخدام {q5_SQ001_A1.question} أو {q5_SQ001_A2.question}.

إخفاء سؤال إذا كانت إجابة السؤال السابق فارغة

الغرض إخفاء سؤال إذا كانت إجابة السؤال السابق فارغة
النوع صلة السؤال
مثال السؤال الأول: رمز السؤال "name"، نص السؤال "ما اسمك؟"
السؤال الثاني: نص السؤال "{name}، كم عمرك؟"
المطلوب: إخفاء السؤال الثاني إذا كان الحقل النصي في السؤال الأول فارغًا
التعبير !is_empty(name)
وصف تحدد الدالة is_empty() ما إذا كان المتغير يُعتبر فارغًا. تقوم علامة "!" بعكس النتيجة. لذا إذا لم يكن المتغير فارغًا فسيكون التعبير صحيحًا ويتم عرض السؤال
الخطوات أنشئ/حرر السؤال الثاني
أدخل "!is_empty(name)" في "معادلة الصلة:"
ملف نموذجي Hide_question_if_empty_question_group.zip


إخفاء مجموعة أسئلة إذا كانت إجابة السؤال السابق نعم أو لا

الغرض إخفاء مجموعة أسئلة إذا كانت إجابة السؤال السابق نعم أو لا
النوع صلة مجموعة الأسئلة
مثال الصفحة الأولى، مجموعة الأسئلة الأولى، السؤال الأول: رمز السؤال "PET"، نص السؤال "هل لديك حيوان أليف؟" -نعم -لا
الصفحة الثانية، مجموعة الأسئلة الثانية: العنوان "عن حيواناتك الأليفة"
المطلوب: إظهار/إخفاء مجموعة الأسئلة الثانية إذا كانت إجابة السؤال الأول نعم/لا
التعبير PET == "Y"
وصف PET هو رمز السؤال الذي تريد التحقق من إجابته. إذا لم تستخدم لاحقة، سيستخدم EM القيمة "Qcode.code". وبذلك تقارن رمز الإجابة للسؤال PET بالقيمة "Y". إذا أجاب المشارك بـ "نعم" فسيكون التعبير صحيحًا وسيتم عرض مجموعة الأسئلة "عن حيواناتك الأليفة".
الخطوات أنشئ/حرر مجموعة الأسئلة الثانية
أدخل "PET == "Y"" في "معادلة الصلة:"
ملف نموذجي Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip


عرض قيمة حقل في سؤال إدخال متعدد الإجابات

الغرض عرض قيمة حقل في سؤال إدخال متعدد الإجابات
النوع مرجع
مثال السؤال الأول: رمز السؤال "AskChildAge"، نص السؤال "كم عمر أطفالك؟". رموز الأسئلة الفرعية -Child1 -Child2 -Child3 - ChildXXX
السؤال الثاني: رمز السؤال "ReportChildAge" نص السؤال "عن طفلك الأول: - CHILD1 عمره AGE1."
التعبير {AskChildAge_Child1.question}, {AskChildAge_Child1.value}
وصف تريد استخدام قيمة سؤال فرعي في سؤال لاحق. يمكنك الوصول إلى قيمة السؤال الفرعي باستخدام تعبير من هذا النوع: QcodeQuestion_QcodeSubquestion.value
الخطوات أنشئ/حرر السؤال الثاني
أدخل هذا النص في الوصف: "عن طفلك الأول: - {AskChildAge_Child1.question} عمره {AskChildAge_Child1.value}."
ملف نموذجي Display_value_of_a_multiple_answer_input_question_field.zip

التحقق من عدد المربعات المحددة في كل صف لسؤال "صفيف (أرقام) بمربعات اختيار"

الغرض التحقق من عدد المربعات المحددة في كل صف
النوع التحقق من الصحة
مثال سؤال من نوع "صفيف أرقام (تصميم صندوق الاختيار)"
التعبير sum(...)
وصف (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) يحدد ما إذا كان عدد مربعات الاختيار المحددة في الصف A هو X على الأقل.
إذا أردت التحقق من الصفوف الثلاثة (A وB وC)، يمكنك ربط التعبير باستخدام "&&":
(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X)
&& (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= X)
&& (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= X)
الخطوات أنشئ/حرر سؤالًا من نوع "صفيف أرقام (تصميم صندوق الاختيار)".
أدخل التعبير أعلاه في "معادلة التحقق من صحة السؤال" ضمن إعدادات السؤال المتقدمة (قد تحتاج إلى تعديل أسماء المتغيرات!).
ملف نموذجي Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss

حساب الفرق بين تاريخين

الغرض حساب الفرق بين تاريخين
النوع الصلة / نوع سؤال المعادلة / التحقق من الصحة
مثال السؤال الأول (التاريخ/الوقت، الرمز: DOB): ما هو تاريخ ميلادك؟
السؤال الثاني (التاريخ/الوقت، الرمز: datetoday): ما هو تاريخ اليوم؟
السؤال الثالث (نص ثابت): عمرك XXXX يومًا.
المطلوب: حساب وعرض عدد الأيام بين التاريخ المُدخل في السؤال 1 والسؤال 2.
التعبير {(strtotime(datetoday)-strtotime(DOB))/60/60/24}
وصف تحسب strtotime عدد الثواني بين 1 يناير 1970 والتاريخ المحدد. يحسب التعبير أعلاه عدد الثواني بين التاريخين المحددين. أما الجزء "/60/60/24" فيحوّل عدد الثواني إلى عدد الأيام.
بدلًا من السؤال عن "datetoday"، يمكنك أيضًا استخدام strtotime('now') أو ببساطة time()، التي تُرجع مباشرة عدد الثواني من يناير 1970 حتى الآن (أي وقت إجراء الاستبيان). وبذلك يمكنك معرفة عمر شخص بالسنوات بسرعة باستخدام المعادلة {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} في أي من هذه الحالات، من الضروري إدخال التاريخ بتنسيق صحيح، وإلا فلن تعمل الدالة strtotime() بشكل سليم.
الخطوات أنشئ سؤالين من نوع التاريخ (لتاريخ الميلاد ولتاريخ اليوم) وسؤالًا من نوع نص ثابت.
في نص السؤال من نوع النص الثابت أدخل: "في {datetoday} كان عمرك {(strtotime(today)-strtotime(dob))/60/60/24} يومًا."

يرجى ملاحظة: يمكن للدالة strtotime التعامل مع العديد من تنسيقات التاريخ ولكن ليس جميعها. إذا واجهت مشاكل، فاضبط تنسيق التاريخ في استبيانك على mm/dd/yyyy أو yyyy-mm-dd أو dd.mm.yyyy"
ملف نموذجي Date_difference.zip

استخدام ExpressionScript للتقييمات

فيما يلي مثال آخر على كيفية استخدام ExpressionScript مع أسئلة من نوع الصفيف والتقييمات:</ br>

لنفترض أن لديك سؤالين من نوع الصفيف وتريد حفظ نتائج بيانات الحساب في قاعدة بياناتك. الأمر بسيط في الواقع، ستحتاج إلى إنشاء الصفائف واختبارها وإرسال رد تجريبي للتأكد من أنها تعمل وتعطيك النتائج في صفحة الإكمال.


تفاصيل التنفيذ:

  • أضف سؤالًا من نوع المعادلة
  • أضف السطر التالي على افتراض أن Q1 هو رمز سؤال الصفيف الأول بينما Q2 هو الثاني:
    • {sum(Q1_SQ001.value,Q2_SQ001.value)}

لاحظ أن SQ001 هو الرمز الافتراضي لأي سؤال فرعي. إذا غيّرت رمز السؤال الفرعي، فعدّل المعادلة أعلاه وفقًا لذلك.


استخدام em_validation_q في الصفيف

يمكنك استخدام معادلة التحقق من صحة السؤال للتحكم في صفيف بأي شرط.


تفاصيل التنفيذ:

  • للصفيف الأول : صفيف اختيار فردي
    • رمز السؤال هو ARRAY
    • رموز الأسئلة الفرعية هي SQ01 وSQ02 وSQ03 وSQ04
    • حدّث معادلة التحقق من صحة السؤال بالكامل وضع
      !is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03) 
  • للصفيف الثاني : صفيف نصوص
    • رمز السؤال هو ARRAYTEXT
    • رموز الأسئلة الفرعية على المحور Y هي SY01 وSY02 وSY03 وSY04
    • حدّث معادلة التحقق من صحة السؤال بالكامل وضع
      count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)