يشرح هذا الدليل كيفية تضمين وعرض قائمة بمواضيع Discourse على مواقع ويب خارجية باستخدام JavaScript، مما يتيح لك عرض محتوى المنتدى مثل المناقشات أو الإعلانات على المدونات والمواقع أو منصات المحتوى الخارجية.
مستوى المستخدم المطلوب: مدير النظام
ملخص
يتيح تضمين مواضيع Discourse على مواقع الويب الخارجية عرض قوائم المواضيع من منتدى Discourse الخاص بك مباشرةً على مواقع أخرى. يساعد هذا التكامل في توجيه الزوار إلى منتداك والحفاظ على تفاعل جمهورك مع محتوى مجتمعك. تظهر المواضيع المضمنة كأداة JavaScript تتكامل مع بنية DOM لموقعك، مما يسهل تخصيصها عبر CSS.
تمكين تضمين المواضيع
لإعداد تضمين المواضيع على موقعك الخارجي:
- انتقل إلى Admin > Advanced > Embedding وانتقل إلى علامة التبويب Settings. فعّل إعداد الموقع
embed_topics_list
- أضف سكريبت التضمين إلى قسم الرأس (head) في HTML لموقعك الخارجي:
<script src="https://discourse.example.com/javascripts/embed-topics.js"></script>
استبدل discourse.example.com بعنوان URL الفعلي لمنتدى Discourse الخاص بك.
- ضع عنصر قائمة المواضيع في المكان الذي تريد عرض المواضيع فيه (مثل منشور مدونة أو صفحة فردية على الموقع):
<d-topics-list discourse-url="https://discourse.example.com" category="1234" per-page="5"></d-topics-list>
- إذا كنت تقوم بتضمين مواضيع على نطاق مختلف عن موقع Discourse الخاص بك، أضف نطاق موقعك الخارجي إلى Admin > Advanced > Embedding > Hosts
على سبيل المثال، إذا كان موقع Discourse الخاص بك موجودًا في yourdiscourseforum.com وتريد تضمين مواضيع في yourexternalsite.com، يجب عليك إضافة yourexternalsite.com إلى قائمة المضيفين المسموح بهم.
لا يمكنك تضمين مواضيع من موقع Discourse خاص يتطلب تسجيل الدخول.
معلمات التكوين
يدعم عنصر d-topics-list السمات التالية لتخصيص عرض المواضيع:
discourse-url- عنوان URL لموقع Discourse الخاص بك (مطلوب)template- خيارات نمط العرض:basic(الافتراضي) - يعرض عناوين المواضيع كروابطcomplete- يعرض العنوان واسم المستخدم والصورة الرمزية وتاريخ الإنشاء ووقت آخر رد وعدد الإعجابات وعدد الردود والصورة المميزة/الصورة المصغرة
per-page- عدد المواضيع المراد عرضها (محدود بإعداد الموقع المخفيembed_topic_limit_per_page، الافتراضي 200)category- معرف الفئة لتصفية المواضيع من فئة محددةtags- تصفية المواضيع حسب وسوم محددةallow-create- عند تعيينه على true، يظهر زر “موضوع جديد”embed-class- يضيف فئة CSS مخصصة إلى حاوية قائمة المواضيع المضمنة (أحرف أبجدية رقمية وشرطات وشرطات سفلية فقط)top-period- عرض أفضل المواضيع من فترة زمنية محددة:allyearlyquarterlymonthlyweeklydaily
يمكنك دمج معلمات متعددة لتحسين عرض قائمة مواضيعك. على سبيل المثال:
<d-topics-list
discourse-url="https://discourse.example.com"
category="5"
tags="announcements"
per-page="10"
template="complete">
</d-topics-list>
تخصيص المظهر
يمكنك تنسيق المواضيع المضمنة باستخدام SCSS مخصص في لوحة Admin > Appearance > Themes and Components. انقر على سمة حاليّة أو افتراضية ثم انقر على Edit Code. بعد ذلك، يمكنك اختيار Show_advanced واختيار Embedded CSS لإضافة الكود المخصص الخاص بك:
إليك مثال على SCSS لإنشاء تخطيط شبكي:
.topics-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
.topic-list-item {
.main-link {
border: 1px dotted gray;
padding: 0;
}
.topic-column-wrapper {
flex-direction: column-reverse;
.topic-column.details-column {
width: 100%;
}
.topic-column.featured-image-column .topic-featured-image img {
max-width: initial;
max-height: initial;
width: 100%;
}
}
}
}
أفضل الممارسات
- استخدم فلاتر ذات معنى للفئات والوسوم لعرض محتوى ذي صلة لجمهورك
- اضبط قيمة
per-pageمناسبة لتجنب إرباك الزوار - اختبر مواضيعك المضمنة على أحجام شاشات مختلفة لضمان تصميم متجاوب
- فكر في استخدام القالب
completeلجاذبية بصرية أفضل عند توفر المساحة - راجع قائمة المضيفين المسموح بهم بانتظام للتأكد من أن النطاقات المصرح بها فقط يمكنها تضمين مواضيعك
مشاكل شائعة وحلولها
عدم عرض المواضيع على نطاق خارجي
المشكلة: تظهر المواضيع المضمنة كمربع فارغ أو رمادي عند العرض على نطاق خارجي.
الحل: أضف النطاق الخارجي إلى قائمة Admin > Advanced > Embedding > Hosts في موقع Discourse الخاص بك. تأكد من تضمين النطاق الفرعي الصحيح (على سبيل المثال، إذا كان موقعك يستخدم www.example.com، أضف www.example.com بدلاً من example.com فقط).
أخطاء تحميل السكريبت
المشكلة: فشل سكريبت التضمين في التحميل أو يعيد أخطاء اتصال.
الحل:
- تحقق من صحة عنوان URL الخاص بـ Discourse في مصدر السكريبت وقابلية الوصول إليه
- تأكد من تفعيل إعداد الموقع
embed_topics_list - تأكد من أن موقع Discourse الخاص بك لا يتطلب تسجيل الدخول للمواضيع العامة
سلوك سياق SameSite
في سياقات SameSite حيث يشارك موقع التضمين والمنتدى نطاقًا أبويًا مشتركًا، يحترم Discourse حالة تسجيل الدخول ويعرض النتائج وفقًا لذلك. قد يرى المستخدمون المسجلون دخولهم محتوى من فئات آمنة لا يمكن للمستخدمين المجهولين الوصول إليها.
الأسئلة الشائعة
س: هل يمكنني تضمين مواضيع من موقع Discourse خاص؟
ج: لا، يعمل تضمين المواضيع فقط مع مواقع Discourse العامة. لا يمكن تضمين المواقع الخاصة التي تتطلب تسجيل الدخول.
س: هل يمكنني تضمين قوائم مواضيع متعددة على نفس الصفحة؟
ج: نعم، يمكنك تضمين عناصر \u003cd-topics-list\u003e متعددة على نفس الصفحة بمعلمات مختلفة لعرض مجموعات مواضيع متنوعة.
س: كيف أقوم بتضمين مواضيع مع صور مميزة؟
ج: استخدم المعلمة template="complete" في عنصر \u003cd-topics-list\u003e الخاص بك لعرض المواضيع مع الصور المصغرة والصور المميزة.
س: هل يمكنني تغيير مكان فتح روابط المواضيع؟
ج: افتراضيًا، تفتح روابط المواضيع في النافذة الأصلية. يمكنك تعديل هذا السلوك من خلال التخصيص باستخدام CSS أو JavaScript.








