استطلاعات Discourse

:discourse2: ملخص يتيح لك المكوّن الإضافي Discourse Surveys إنشاء استطلاعات رأي مباشرةً داخل منشورات منتدى Discourse الخاص بك باستخدام صيغة Markdown بسيطة.
:hammer_and_wrench: رابط المستودع \u003chttps://github.com/discourse/discourse-surveys\u003e
:open_book: دليل التثبيت كيفية تثبيت المكونات الإضافية في Discourse

يسمح لك المكوّن الإضافي Discourse Surveys بإنشاء استطلاعات رأي مباشرةً داخل منشورات منتدى Discourse الخاص بك باستخدام صيغة Markdown بسيطة. يدعم المكوّن الإضافي حاليًا مجموعة متنوعة من أنواع الأسئلة مثل الأزرار الراديوية (radio buttons)، ومربعات الاختيار (checkboxes)، والقوائم المنسدلة (dropdowns)، ومدخلات الأرقام (number inputs)، ومناطق النص (text areas)، وتقييمات النجوم (star ratings)، وتقييمات الإبهام لأعلى/لأسفل (thumbs up/down ratings).

الميزات

  • 7 أنواع حقول مختلفة: أزرار راديو، مربعات اختيار، قوائم منسدلة، مناطق نص، اختيار رقم، تقييمات نجوم، وتقييمات إبهام لأعلى/لأسفل

  • حقول مطلوبة/اختيارية: تحديد الحقول كـ “مطلوبة” لضمان الإكمال

  • دعم الرموز التعبيرية (Emoji): استخدم الرموز التعبيرية في خيارات الاستطلاع الخاصة بك

  • دعم HTML: تنسيق النص الغني في الأسئلة والخيارات

  • المصادقة للمستخدم: مطالبات تسجيل دخول تلقائية للمستخدمين المجهولين

  • تتبع الاستجابات: يمنع الإرسالات المكررة من نفس المستخدم

  • مراعاة الأذونات: يحترم أذونات الموضوع والفئة

  • متجاوب مع الجوال (Mobile Responsive): يعمل بسلاسة على جميع الأجهزة

الاستخدام

هيكل الاستطلاع الأساسي

يجب تغليف جميع الاستطلاعات بعلامات [survey]:


[survey name="my-survey" title="Customer Feedback Survey"]

<!-- تذهب حقول الاستطلاع هنا -->

[/survey]

سمات الاستطلاع (Survey Attributes)

  • name: مُعرّف فريد للاستطلاع (الافتراضي هو “survey”)

  • title: عنوان اختياري يُعرض في أعلى الاستطلاع

  • public: تحديد الرؤية (ميزة مستقبلية)

  • status: حالة الاستطلاع (ميزة مستقبلية)

أنواع الحقول

1. الأزرار الراديوية (اختيار واحد)


[radio question="What is your favorite color?"]

- Red

- Blue

- Green

- Yellow

[/radio]

2. مربعات الاختيار (اختيار متعدد)


[checkbox question="Which features do you use? (Select all that apply)"]

- Email notifications

- Mobile app

- Desktop notifications

- API access

[/checkbox]

3. اختيار القائمة المنسدلة


[dropdown question="What is your age group?"]

- Under 18

- 18-24

- 25-34

- 35-44

- 45-54

- 55+

[/dropdown]

4. منطقة النص (نص طويل)


[textarea question="Please provide detailed feedback:" required="false"]

[/textarea]

5. اختيار الرقم


[number question="Rate this feature from 1-10:" min="1" max="10"]

[/number]

6. تقييم النجوم


[star question="How would you rate your overall experience?"]

[/star]

7. إبهام لأعلى/لأسفل


[thumbs question="Would you recommend this to others?"]

[/thumbs]

سمات الحقل

جميع أنواع الحقول تدعم هذه السمات:

  • question: نص السؤال (مطلوب)

  • required: ما إذا كان يجب ملء الحقل (true/false، الافتراضي هو true)

  • min: الحد الأدنى للقيمة لحقول الأرقام

  • max: الحد الأقصى للقيمة لحقول الأرقام

مثال كامل

صيغة Markdown الأساسية للاستطلاع

إليك مثال أساسي لصيغة Markdown للاستطلاع يتضمن جميع الحقول المتاحة:

[survey name="awesome-survey-thumbs" title="Awesome Survey"]

[radio question="Choose any one option:"]
- cat
- dog
[/radio]

[checkbox question="Choose multiple options:"]
- red
- blue
- green
[/checkbox]

[dropdown question="Gender:"]
- Male
- Female
[/dropdown]

[number question="Rate this survey from 1 to 10:"]
[/number]

[textarea question="What is your feedback about xyz?" required="false"]
[/textarea]

[star question="How would you rate overall experience?"]
[/star]

[thumbs question="Were you satisfied with our services?"]
[/thumbs]

[/survey]

عرض الاستطلاع (Survey Rendering)

أدناه مثال لكيفية عرض صيغة Markdown المذكورة أعلاه في Discourse:

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

استخدام الرموز التعبيرية في الخيارات


[radio question="Choose your favorite animal:"]

- 🐈 Cat

- 🐶 Dog

- 🐦 Bird

- 🐠 Fish

[/radio]

تنسيق HTML في الأسئلة


[radio question="Which <strong>programming language</strong> do you prefer?"]

- JavaScript

- Python

- Ruby

- Go

[/radio]

حقول مطلوبة واختيارية مختلطة


[survey name="mixed-survey"]

[radio question="What is your role?" required="true"]

- Developer

- Designer

- Manager

- Other

[/radio]

[textarea question="Any additional thoughts?" required="false"]

[/textarea]

[/survey]

نتائج الاستطلاع

حاليًا، لا يحتوي هذا المكوّن الإضافي على واجهة مستخدم خلفية لعرض نتائج الاستطلاع مباشرةً. بدلاً من ذلك، يمكنك الاعتماد على استعلامات مستكشف البيانات (Data Explorer) لجلب وتحليل استجابات الاستطلاع. إليك مثال على استعلام:

-- [params]
-- text :survey_name = survey

SELECT
  s.id,
  s.name,
  s.post_id,
  sf.question,
  COALESCE(sr.value, sfo.html) AS value,
  sr.user_id,
  sr.created_at AS responded_at
FROM
  surveys s
  JOIN survey_fields sf ON sf.survey_id = s.id
  JOIN survey_responses sr ON sr.survey_field_id = sf.id
  LEFT JOIN survey_field_options sfo ON sfo.id = sr.survey_field_option_id
WHERE
  s.name = :survey_name
ORDER BY
  s.id DESC

الأذونات والأمان

  • تسجيل الدخول مطلوب: يجب على المستخدمين المجهولين تسجيل الدخول قبل إرسال الاستجابات

  • استجابة واحدة لكل مستخدم: يمكن لكل مستخدم إرسال استجابة واحدة فقط لكل استطلاع

  • أذونات الموضوع: يجب أن يكون لدى المستخدمين إذن القراءة للموضوع لعرض الاستطلاعات

  • أذونات النشر: يجب أن يكون لدى المستخدمين إذن النشر في الموضوع لإرسال الاستجابات

  • المواضيع المؤرشفة: لا يمكن للاستطلاعات في المواضيع المؤرشفة قبول استجابات جديدة

  • المنشورات المحذوفة: لم يعد من الممكن الوصول إلى الاستطلاعات في المنشورات المحذوفة

القيود

  • يُسمح باستطلاع واحد فقط لكل منشور

  • لا يمكن تعديل هيكل الاستطلاع بعد تلقي الاستجابات

  • يجب أن تكون جميع أسئلة حقول الاستطلاع فريدة داخل استطلاع واحد

  • لا يمكن أن تكون أسئلة حقول الاستطلاع فارغة

التفاصيل التقنية

مخطط قاعدة البيانات

ينشئ المكوّن الإضافي أربعة جداول رئيسية في قاعدة البيانات:

  • surveys: سجلات الاستطلاع الرئيسية

  • survey_fields: الحقول الفردية داخل الاستطلاعات

  • survey_field_options: خيارات للحقول القائمة على الاختيار

  • survey_responses: استجابات المستخدمين لأسئلة الاستطلاع

التصميم (Styling)

يتضمن المكوّن الإضافي CSS متجاوبًا يتكيف مع السمة الخاصة بك. يمكن إضافة تصميم مخصص عن طريق استهداف فئات CSS التالية:

  • .survey - حاوية الاستطلاع الرئيسية

  • .survey-field - غلاف الحقل الفردي

  • .field-[type] - حاويات أنواع الحقول المحددة

  • .submit-response - زر الإرسال

32 إعجابًا

لذا لا يمكن للمستخدمين رؤية النتائج (إلا إذا كان لديهم الحق في استخدام الاستعلام) وهذا بالكامل للمسؤولين/الموظفين الخلفيين؟

3 إعجابات

نعم، هذا صحيح.

7 إعجابات

لا يبدو عمليًا للغاية :cry:

3 إعجابات

الحاجة إلى خيار لنشر نتائج الاستطلاع. بخلاف ذلك، من الأفضل استخدام استطلاعات متعددة.

3 إعجابات

مرحباً

يتم عرض عينة Markdown في موضوع جديد كما هو موضح أدناه. تم تحديث Discourse الخاص بي إلى أحدث إصدار.

ما الذي يمكن أن يكون المشكلة؟

مع خالص التقدير

مرحباً @ppcole،

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

شكرًا لك Arpit. لقد نجح الأمر. نتطلع إلى التحسينات.

إعجاب واحد (1)

هل لي أن أعرف إذا كنتم تعملون على هذا ولكن ليس بأولوية فعلية؟

سيكون من الرائع أن يستمر تطوير هذا - لديه الكثير من الإمكانات.

وجدت أن الاستعلام SQL أعلاه قام بسحب النتائج، لكنه لم يكن بتنسيق يسهل العمل معه؛ بشكل أساسي، سيتطلب ذلك الكثير من التحويل على مستوى جدول البيانات لتمكين التحليل المفيد.

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

لحسن الحظ، يمكن للذكاء الاصطناعي التوليدي أن يجعل ذلك بسيطًا للغاية. إليك نموذج مطالبة قد يعمل في معظم خدمات الذكاء الاصطناعي التوليدي (إذا لم يكن لديك المكون الإضافي للذكاء الاصطناعي نشطًا) - فقط قم بلصق علامة الاستطلاع الخاصة بك وستكون جاهزًا للانطلاق:

مطالبة الذكاء الاصطناعي التوليدي لإنتاج استعلام SQL مخصص لاستطلاع معين

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

هذا هو علامة الاستطلاع:

الصق علامة الاستطلاع الخاصة بك هنا

هذا هو الاستعلام الأصلي المستخدم للحصول على نتائج الاستطلاع:

-- [params]
-- text :survey_name = survey

SELECT s.id, s.name, s.post_id, sf.question, COALESCE(sr.value, sfo.html) AS value, sr.user_id, sr.created_at as responded_at
FROM surveys s
JOIN survey_fields sf ON sf.survey_id = s.id
JOIN survey_responses sr ON sr.survey_field_id = sf.id
LEFT JOIN survey_field_options sfo ON sfo.id = sr.survey_field_option_id
WHERE s.name = :survey_name
ORDER BY s.id DESC

يرجى إنشاء استعلام SQL يقوم بما يلي:

  • ترميز اسم الاستطلاع بشكل ثابت.
  • استخدام التجميع الشرطي لقلب البيانات، مع كل سؤال كعمود.
  • استخدام STRING_AGG لأسئلة مربعات الاختيار للتعامل مع الاستجابات المتعددة.
  • التأكد من تجميع الإخراج حسب user_id وترتيبه حسب user_id.
  • أن يكون منسقًا للقراءة ويتضمن تعليقات توضح المنطق عند الضرورة.

إرشادات إضافية لمكون مستكشف البيانات الإضافي:

  • يجب أن يكون الاستعلام متوافقًا مع مكون Discourse Data Explorer الإضافي، مما يعني أنه لا يجب أن ينتهي بفاصلة منقوطة.
  • استخدم أسماء أعمدة مثل user_id للاستفادة من ميزات الربط التلقائي داخل مستكشف البيانات.
  • تجنب استخدام SQL الديناميكي، حيث لا يدعمه المكون الإضافي.
  • تأكد من أن الاستعلام فعال ومحسن للأداء، حيث قد يتم تشغيله على مجموعات بيانات كبيرة.
8 إعجابات

هذه إضافة صغيرة ممتازة وغنية بالميزات بشكل مدهش. شكراً لصناعتها.

@nathank عمل رائع على الدليل لبناء استعلام النتائج بسرعة.

4 إعجابات

لقد قمت بتثبيت هذا على موقعي المستضاف ذاتيًا لتجربته، وهو لطيف جدًا بالفعل!

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

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

5 إعجابات

نعم، واجهت نفس المشكلة. نأمل أن يكون هناك حل.

3 إعجابات