نماذج استبيانات مدير التعبيرات
From LimeSurvey Manual
مقدمة
أفضل طريقة لتعلم كيفية استخدام ExpressionScript هي تجربة أمثلة عملية وتعديلها بما يناسب احتياجاتك.
ستجد أدناه مجموعة من نماذج الاستبيانات التي توضح (وتختبر) كيفية استخدام مدير التعبيرات (EM) لتحسين استبيانك. يمكنك العثور على هذه الاستبيانات في المجلد /docs/demosurveys ضمن حزمة التوزيع.
الملاءمة والتخصيص والمعادلات
نظرة عامة
يحسب المثال التالي مؤشر كتلة الجسم (BMI) لكل مشارك. راجع أدناه الميزات التي يوضحها هذا المثال.
ميزات EM الموضحة
- الملاءمة - دعم منطق شرطي قوي؛
- التمرير / التخصيص - يتيح إمكانية تمرير الإجابات وبيانات الأسئلة الوصفية أو تخصيصها؛
- التخصيص الديناميكي - لاحظ أن التقارير تتغير في الصفحة أثناء إجابتك عن الأسئلة.
- التخصيص الدقيق - تخصيص شرطي داخل الجمل والتقارير باستخدام عبارات if()
- المعادلات - نوع سؤال جديد يتيح لك إجراء العمليات الحسابية وتخزين النتائج في قاعدة البيانات، حتى لو كانت العملية الحسابية مخفية
- التحقق الشرطي من الصحة - يمكن أن تكون معايير التحقق من الصحة، مثل الحد الأدنى للقيمة المسموح بها، شرطية - مثلاً بالاعتماد على المعادلات.
لقطات الشاشة
يحسب هذا المثال مؤشر كتلة الجسم، وهو حساب يعتمد على وزنك وطولك لتحديد ما إذا كان وزنك زائداً. لاحظ أنك في البداية لا ترى سوى الأسئلة الأربعة الإلزامية:

بمجرد إدخال معلوماتك (ويمكنك اختيار استخدام الوحدات المترية أو غير المترية)، سترى تقريراً مخصصاً يلخص ما أدخلته ويوضح لك حالة وزنك:

إليك مثالاً آخر باستخدام وحدات غير مترية لتوضيح كيفية تغير النتيجة ديناميكياً:

توجد أسئلة من نوع المعادلة مخفية على المستوى الداخلي تحول البيانات إلى النظام المتري (عند الحاجة)، وتخزن الطول والوزن ومؤشر كتلة الجسم وحالة الوزن بالنظام المتري في قاعدة البيانات دون الحاجة إلى JavaScript مخصص.
يمكنك أن ترى في المجموعة التالية من الأمثلة كيف يمكن استخدام الدوال الرياضية وغيرها داخل التقارير المخصصة. هكذا تبدو الصفحة قبل إدخال أي بيانات. يوجد منطق شرطي لإظهار خلايا فارغة إذا لم يتم إدخال بيانات (أو أُدخلت بيانات غير رقمية)، بدلاً من عرض "NaN" أو "Divide by Zero".

عند إدخال الأرقام، يتغير التقرير الموجود في الصفحة ليعرض العملية الحسابية التي يتم تنفيذها ونتيجتها.

توجد أمثلة كثيرة أخرى في هذا الاستبيان النموذجي. على سبيل المثال، تعرض لقطة الشاشة أدناه واحدة من عشرات الطرق التي يمكنك بها ملء صفحة الملاءمة الديناميكية. كما يشير نص المساعدة، جرّب أعماراً مختلفة، وخاصة توليفات غير منطقية من الإجابات لترى الرسائل الطريفة التي تظهر في الأسفل. لاحظ أيضاً أنك إذا ذكرت أن لديك أكثر من طفل واحد، فستقول الرسالة "I hope you enjoy playing with your X children" بدلاً من "I hope you enjoy playing with your child". يوضح هذا كيف يمكنك بسهولة تخصيص الجمل تخصيصاً دقيقاً لتتوافق مع جنس و/أو عدد المشاركين. يمكنك حتى تصريف الأفعال وإعراب الأسماء بسهولة بناءً على الجنس والعدد.

التنزيل
للوصول إلى نموذج الاستبيان، يرجى النقر على الرابط التالي: LS3_em_tailoring.zip.
نموذج التعداد السكاني
نظرة عامة
هذا مثال على تعداد سكاني يسأل عن عدد الأشخاص في أسرتك.
يوضح كيف يمكن لملاءمة مستوى المجموعة أن تسهّل تنفيذ "حلقة" من الأسئلة. بعد إنشاء مجموعة الشخص 1، قمت بتصدير المجموعة. ولأنني استخدمت أسماء متغيرات qcode مثل p1_name بدلاً من رمز SGQA، تمكنت من استخدام محرر نصوص لتحرير المجموعة وإعادة استيرادها عدة مرات بسرعة (فمثلاً، استغرق تحرير كل مجموعة متكررة وإعادة استيرادها نحو 10 ثوانٍ، مع التأكد من أن جميع المتغيرات لها أسماء فريدة وأن منطق مستوى المجموعة صحيح).
يمكنك أيضًا استخدام ميزة نسخ السؤال، لكنها لن تكون بنفس سرعة الخيار المقترح أعلاه.
يوضح هذا أيضًا كيفية منع ظهور رسالة الإنهاء إلى أن يكتمل الاستبيان فعليًا (مثلًا عند إكمال جميع المجموعات المطلوبة).
ميزات EM المعروضة
- الصلة على مستوى المجموعة - لا تظهر مجموعات المتابعة (الشخص 1-5) إلا بحسب عدد المقيمين المعًا المحدد؛
- التخصيص (Tailoring) - يلخص التقرير النهائي البيانات الديموغرافية لكل مقيم؛
- العرض التدريجي للأسئلة - سواء في وضع المجموعة أو الكل في صفحة واحدة، لا تظهر الأسئلة اللاحقة إلا بعد الإجابة عن الأسئلة السابقة.
لقطات الشاشة
ينشئ الاستبيان تقريرًا مخصصًا يعرض البيانات الديموغرافية لعدد المقيمين المحدد:

إذا انتقلت إلى وضع سؤال واحد في كل مرة، فسترى أن الفهرس يخصص الأسئلة. وبما أن المستخدم ذكر أن الشخص امرأة، فإنه يسأل "What is her name". وبما أننا أجبنا "Mary"، فإن السؤال التالي يكون "How old is Mary"؟

تنزيل
لتنزيل نموذج الاستبيان، انقر هنا: LS3_group_relevance.zip.
مرشحات الصفيف المتتالية
نظرة عامة
يستند هذا الاستبيان إلى تصميم استبيان مقدم بلطف من Joy Lane Research, LLC.
لقطات الشاشة
في ما يلي، لاحظ أن:
- Q02 يعرض فقط مجموعة المنتجات المحددة في Q01 (باستخدام array_filter)
- Q02 يعرض أيضًا "Another product"، وهو النص المدخل في الحقل "Other electronic" في Q01
- Q04 يعرض فقط المنتجات من Q02 التي تم تحديدها (وبذلك يتتالى مرشح الصفيف)
- Q05 يعرض فقط المنتجات من Q02 التي لم يتم تحديدها في Q02 (باستخدام array_filter_exclude متتالٍ)


تنزيل
انقر على الرابط التالي لتنزيل المثال أعلاه: مثال استبيان LS2_cascading_array_filter.
التمرير/التخصيص باستخدام جميع أنواع الأسئلة والخصائص
نظرة عامة
إذا كنت محتارًا في كيفية تسمية المتغيرات (SGQA مقابل Qcodes)، فأنت لست وحدك. على الرغم من أن الوثائق الرئيسية تشرح كيفية تكوين أسماء متغيرات Qcode، لا شيء يضاهي رؤية ذلك في نموذج عملي. يوضح هذا الاستبيان كيفية الوصول إلى خصائص الأسئلة والإجابات باستخدام ExpressionScript.
المحتوى
- أمثلة على كل نوع من أنواع الأسئلة
- تم تضمين جميع أنواع الأسئلة التي يمكنها استخدام "آخر" لتتمكن من رؤية تأثير ذلك على تسمية المتغيرات
- القيم الافتراضية لجميع أنواع الأسئلة التي تقبل قيمًا افتراضية
- التخصيص - تقارير داخل الصفحة وخارجها تعرض جميع لواحق EM الستة عشر المتاحة بصيغة النقطة.
- تعرض هذه التقارير جميع البيانات المدخلة حاليًا (لتوضح لك كيف يمكنك إنشاء تقارير قابلة للطباعة خاصة بك للمستخدمين بدلًا من شاشة طباعة الإجابات)
- التسمية الصحيحة لجميع المتغيرات بصيغتي Qcode وSGQA
لقطات الشاشة
هذا استبيان ضخم، لذلك اخترنا عدم تضمين لقطات شاشة. بدلًا من ذلك، يُرجى تنزيله وتجربته.
تنزيل
انقر على الرابط التالي لتنزيل الاستبيان: LS3_EM_question_attributes.lss
التحقق التقليدي من الصحة، برؤية جديدة
نظرة عامة
يوضح هذا المثال جميع أنواع التحقق من الصحة التي تستخدم التعبيرات، وكيف تؤثر على كل نوع من أنواع الأسئلة التي تدعم التحقق من الصحة. في كثير من الحالات تكون تلميحات التحقق مخفية في البداية، ولا تظهر إلا إذا لم يستوفِ السؤال معايير التحقق (وتختفي مرة أخرى بمجرد استيفاء السؤال لهذه المعايير).
أنواع التحقق من الصحة المعروضة
- min_num_value_n - الحد الأدنى لقيمة الإجابة
- max_num_value_n - الحد الأقصى لقيمة الإجابة
- min_answers - الحد الأدنى لعدد الإجابات المطلوبة
- max_answers الحد الأقصى لعدد الإجابات المسموح بها
- multiflexible_min - الحد الأدنى للقيمة المسموح بها للإجابة (لنوع سؤال الأرقام المرنة المتعددة)
- multiflexible_max - الحد الأقصى للقيمة المسموح بها للإجابة (لنوع سؤال الأرقام المرنة المتعددة)
- min_num_value - الحد الأدنى للمجموع المسموح به لجميع إجابات السؤال
- max_num_value - الحد الأقصى للمجموع المسموح به لجميع إجابات السؤال
- equals_num_value - يجب أن يساوي مجموع جميع إجابات السؤال هذه القيمة
- validation - هذا هو التحقق من صحة السؤال باستخدام التعبير المنتظم - ويمكن تطبيقه على الخلايا الفردية
لقطات الشاشة
باستخدام أنماط CSS الجديدة، يظهر كل نوع من أنواع التحقق من الصحة كتلميح منفصل. وإذا كانت التلميحات ظاهرة، فيمكن إخفاؤها عبر الخيار hide_tip. الخيار الافتراضي هو عرضها بخط أحمر إذا لم يستوفِ السؤال معايير التحقق، وبخط أخضر إذا استوفاها:

لا يمكن للمستخدم إرسال صفحة تحتوي على أخطاء في التحقق من الصحة. وسيتم تنبيهه فورًا إذا أدخل معلومات خاطئة:

يمكن تطبيق التحقق من الصحة على الخلايا الفردية داخل الصفيف، كما في هذا المثال حيث تضمن عمليات التحقق بالتعبير المنتظم أن كل إدخال هو رقم هاتف أمريكي بتنسيق صحيح يتضمن رمز المنطقة.

التنزيل
لتنزيل المثال أعلاه، انقر على الرابط التالي: LS3_Validation_tests.zip.
معادلات التحقق من الصحة
نظرة عامة
تحتاج أحيانًا إلى تحقق مخصص من الصحة لا يمكن تحقيقه باستخدام معايير الحد الأدنى/الحد الأقصى التقليدية. لهذا الغرض، ستحتاج إلى استخدام الخيارين em_validation_q وem_validation_sq اللذين يتيحان لك إنشاء معادلات تحقق معقدة على مستوى السؤال والسؤال الفرعي على التوالي.
ميزات مدير التعبيرات المعروضة
- em_validation_q - هذه معادلة تحدد ما إذا كان السؤال بأكمله صالحًا
- em_validation_q_tip - هذه هي الرسالة التي تُعرض إذا لم يستوفِ السؤال معايير em_validation_q
- em_validation_sq - هذه هي المعادلة التي تحدد ما إذا كان كل سؤال فرعي (خلية في الصفيف) صالحًا
- em_validation_sq_tip - هذه هي الرسالة التي تُعرض إذا كان أي من الأسئلة الفرعية غير صالح.
بشكل عام، عند استخدام em_validation_sq، إذا كانت أي خلية غير صالحة، يتحول لون الخلفية لتلك الخلية إلى الأحمر للإشارة إلى وجود خطأ.
لقطات الشاشة

يضمن هذا السؤال إدخال أعمار أطفالك بترتيب تنازلي من خلال تطبيق معادلة التحقق التالية:
q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4

في المثال أدناه، يضمن التحقق من الصحة ألا تتم الإجابة عن أكثر من 3 أسئلة في أي صف، وذلك بتطبيق معادلة التحقق التالية:
(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= 3) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= 3) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= 3)
يمكنك أيضًا كتابتها على النحو التالي، حيث يقوم LimeSurvey تلقائيًا بتحويلها أثناء التشغيل إلى التعبير المذكور أعلاه.
(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)

التنزيل
لتنزيل نموذج الاستبيان المستخدم في الأمثلة أعلاه، انقر على الرابط التالي: ls2_test_em_sq_validation.lss.
ملاءمة الأسئلة الفرعية
نظرة عامة
يوضح هذا كيف يمكن أن يتفاعل array_filter مع معايير التحقق من الصحة. وبالنسبة لعمليات التحقق التي تنطبق على المجاميع، تؤخذ في الاعتبار القيم ذات الصلة (المرئية) فقط.
ميزات Expression Manager الموضحة
كما يعرض تقريراً ديناميكياً بعدد الأسئلة التي تمت الإجابة عنها في الأسئلة الأساسية.
لقطات الشاشة
يؤدي تغيير عدد الصفوف المرئية إلى تغيير المجموع ديناميكياً. إن وضع علامة على سؤال فرعي بأنه غير ذي صلة لا يمسح قيمته. بل إنه إذا كان غير ذي صلة، فلا تساهم قيمه في أي معادلة.


لاحظ ما يحدث عند تحديد "السؤال الفرعي الخامس" في السؤال الأول "Which rows should appear below". لاحظ أن مجموع السؤال الثاني "Enter some numbers" أصبح الآن 5. فرغم أن السؤال الفرعي 5 في ذلك السؤال لا يزال يحمل القيمة 14 (فمثلاً، إذا ألغيت تحديد السؤال الفرعي الخامس فسترى القيمة 14 مرة أخرى)، فإن هذه القيمة لا تساهم في المجموع لأنها غير ذات صلة حالياً. يتم مسح جميع البيانات غير ذات الصلة (تعيينها إلى NULL في قاعدة البيانات) عند الإرسال، لكنها تبقى متاحة في الصفحة في حال رغب المستخدمون في تغيير إجاباتهم أو احتاجوا إلى ذلك.

التنزيل
لتنزيل المثال الخاص بنا، انقر هنا: ls2_subquestion_relevance.lss.
استخدام الفاصلة كفاصل عشري (العلامة العشرية)
نظرة عامة
يضمن ExpressionScript إمكانية إدخال أرقام صالحة فقط في الحقول الرقمية. إذا أدخلت رقماً غير صالح، فسيتم تنبيهك بوجود خطأ (مثلاً، في حالة قالب fruity يتم تلوين السؤال بالكامل باللون الأحمر).
لاحظ أن القيم الرقمية يتم دائماً تحويلها لاستخدام النقطة كفاصل عشري داخل قاعدة البيانات. وبهذه الطريقة تعمل التحليلات الإحصائية بشكل صحيح.
لتغيير الفاصل العشري، افتح خيارات عناصر النص الموجودة ضمن علامة تبويب الإعدادات، وابحث عن وظيفة العلامة العشرية.
أنواع الأسئلة التي تستخدم الفاصل العشري
- المدخل العددي [N]
- مدخل عددي متعدد [K]
- صفيف (أرقام) [:]
- مجموعة (النصوص) [;]، عند استخدام السمة numbers_only
- قائمة ( راديو) [L]، عند استخدام السمة other_numbers_only
- نص حر قصير [S]، عند استخدام السمة numbers_only
- نص قصير مركب/ مزدوج [Q]، عند استخدام السمة numbers_only
- خيار متعدد [M]، عند استخدام السمة other_numbers_only
- خيار متعدد مه تعليقات [P]، عند استخدام السمة other_numbers_only
لقطات الشاشة
يمكنك أن تلاحظ في لقطات الشاشة أدناه أنه يمكن استخدام الفاصلة كفاصل عشري.

التنزيل
لتنزيل المثال أعلاه، انقر على الرابط التالي: ls2_comma_as_radix_separator.lss.
مجموعات العشوائية
نظرة عامة
يوضح هذا الاستبيان كيفية استخدام السمة random_group.
عند استخدام هذه السمة، يتم ترتيب الأسئلة عشوائيًا في كل مرة تبدأ فيها الاستبيان. ولكن بمجرد بدء الاستبيان، يظل ترتيب العشوائية ثابتًا، حتى لو قمت بتغيير اللغة.
لقطات الشاشة
لنتفحص معًا المثال التالي. سيكون أول سؤال عشوائي في الصفحة إما Q1 أو Q4 أو Q7. أما السؤال العشوائي الثاني في الصفحة فسيكون إما Q2 أو Q5 أو Q8.

هذا هو الترتيب العشوائي الذي تم إنشاؤه في المرة الأولى التي اختبرت فيها هذا الاستبيان.

تم إنشاء ترتيب عشوائي مختلف في المرة الثانية التي اختبرت فيها الاستبيان.

ولكن عندما قمت بالتبديل إلى اللغة الفرنسية (دون إعادة تشغيل الاستبيان)، بقي ترتيب العشوائية كما هو.

تنزيل
لتنزيل المثال أعلاه، انقر على الرابط التالي: Randomization_Group_Test.lss
طرح سؤال واحد عشوائيًا في كل مجموعة
نظرة عامة
يوضح هذا الاستبيان كيفية إعداد استبيان لعرض سؤال واحد عشوائيًا في كل مجموعة. يحتوي على 5 مجموعات، في كل منها 6 أسئلة. في البداية، في المجموعة 0، توجد خمسة أسئلة معادلة مخفية تسمى ask1-ask5. تحتوي كل منها في حقل نص السؤال على القيمة {floor(rand(1,6.9999))}، مما يعني أن المتغيرات ask1-ask5 ستأخذ كل منها قيمة بين 1 و6. بعد ذلك، لكل سؤال في المجموعة معادلة صلة مثل "ask1==N" حيث N هو رقم السؤال في المجموعة (فالسؤال الثالث في المجموعة 1 له معادلة الصلة "ask1==3").
يعمل هذا الاستبيان بكفاءة متساوية في أوضاع الاستبيان دفعة واحدة، ومجموعة بعد مجموعة، وسؤال بسؤال. وبما أن العشوائية تُحدَّد في المجموعة الأولى، وهذه المجموعة مخفية فعليًا (لأن جميع أسئلة ask1-ask5 مخفية)، يبقى الترتيب العشوائي ثابتًا للمشارك نفسه؛ لكن كل مشارك مختلف سيحصل على ترتيب عشوائي مختلف.
الميزات الموضحة
- نوع السؤال معادلة
- دوال العشوائية
- الدالة الشرطية (if)
لقطات الشاشة
هذه هي المجموعة Group0، التي تستخدم نوع السؤال معادلة لاختيار قيم عشوائية من 1 إلى 6 لكل مجموعة (باستثناء المجموعة الأخيرة التي تحتوي على 4 أسئلة فقط). لاحظ أن الدالة "if()" تتحقق أولًا مما إذا كان ask1 قد تم تعيينه مسبقًا، وإذا كان كذلك، تستخدم تلك القيمة. أما إذا لم يتم تعيين القيمة، فتستخدم قيمة عشوائية لتعيين قيمة ask1.

توضح هذه المجموعة كيفية استخدام المتغير (ask4) من المجموعة Group0 للتحكم في السؤال الذي يظهر داخل المجموعة الرابعة.

تنزيل
لتنزيل مثال الاستبيان أعلاه، انقر هنا: مثال استبيان بأسئلة عشوائية داخل مجموعة.
طرح عدد محدد من الأسئلة عشوائيًا في مجموعة (مجموعة فرعية من الأسئلة)
نظرة عامة
يوضح هذا الاستبيان كيفية طرح مجموعة فرعية عشوائية من الأسئلة في مجموعة. على سبيل المثال، عرض 5 أسئلة عشوائية من أصل 10 أسئلة موجودة داخل مجموعة.
يحتوي الاستبيان على مجموعة واحدة تضم 10 أسئلة. يتم تعيين اسم المجموعة العشوائية نفسه لجميع الأسئلة. ونتيجة لذلك، سيتم عرضها بترتيب عشوائي عند تحميل الصفحة. يُعطى كل سؤال معادلة صلة تنص على أن مجموع "relevanceStatus" لجميع الأسئلة الأخرى في المجموعة أقل من عدد الأسئلة التي تريد عرضها. وبما أنه يتم تعيين relevanceStatus أثناء عرض الأسئلة، فإن هذا يحسب فعليًا إجمالي عدد الأسئلة السابقة.
لذلك، في مثالنا (5 من أصل 10)، ستكون المعادلة الخاصة بالسؤال Q1 كما يلي:
sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
أما بالنسبة للسؤال Q2، فستكون:
sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
وهكذا...
الميزات الموضحة
تنزيل
لتنزيل المثال أعلاه، انقر على الرابط التالي: مثال استبيان 5 عشوائية من أصل 10.
تقييم قائمة المنتجات التي يدخلها المستخدم
نظرة عامة
يوضح المثال أدناه كيف يمكنك أن تطلب من المستخدمين سرد مجموعة من المنتجات التي تهمهم، ثم تطلب منهم تقييم هذه المنتجات.
ميزات مدير التعبيرات الموضحة
- تخصيص الإجابات - عند تقييم المنتجات، تأتي التسميات من حقل التعليق في سؤال الخيار المتعدد السابق
- تخصيص المقاييس - يمكن أيضًا تخصيص العديد من خيارات الأسئلة المتقدمة، مثل عناوين المقاييس.
لقطات الشاشة
توضح هذه الصورة أنه على الرغم من تحديد المنتجات 1 و3 و5 فقط، يتم عرض هذه المنتجات الثلاثة فقط (باستخدام السمة array_filter). علاوة على ذلك، فإن تسميات الصفوف في السؤال الثاني هي إما أرقام المنتجات (إذا لم يتم إدخال أي شيء في حقل التعليق) أو محتويات حقول التعليق.

توضح هذه الصورة كيفية تحديد الإجابات المخصصة:

هذا هو ملف عرض المنطق لهذا السؤال، والذي يتيح لنا التحقق من أن المنطق الشرطي يعمل كما هو مطلوب (مثلًا، لمعرفة ما إذا كانت هناك أي أخطاء في الصياغة):

توضح الصورة التالية مجموعة تحدد فيها مقياس تقييم من 5 نقاط (الخيارات 1-5)، وعنوان المقياس، والمنتجات التي تريد تقييمها. ويوضح السؤال الأخير أنه يمكن تخصيص كل جزء من أجزاء سؤال الصفيف:

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

تنزيل
لتنزيل مثال الاستبيان أعلاه، انقر على الرابط التالي: مثال استبيان تقييم قائمة المنتجات التي يدخلها المستخدم.