يشرح هذا الدليل كيفية تضمين وعرض قائمة بمواضيع Discourse على مواقع خارجية باستخدام JavaScript، مما يتيح لك عرض محتوى المنتدى مثل المناقشات أو الإعلانات على المدونات أو المواقع الإلكترونية أو منصات المحتوى الخارجية.
مستوى المستخدم المطلوب: مسؤول
ملخص
يتيح لك تضمين مواضيع Discourse على مواقع خارجية عرض قوائم المواضيع من منتدى Discourse الخاص بك مباشرة على مواقع أخرى. يساعد هذا التكامل في توجيه الزيارات إلى منتدى الخاص بك ويبقي جمهورك متفاعلاً مع محتوى مجتمعك. تظهر المواضيع المضمنة كأداة JavaScript تتكامل مع بنية DOM لموقعك، مما يسهل تخصيصها من خلال CSS.
تمكين تضمين المواضيع
لإعداد تضمين المواضيع على موقعك الخارجي:
- انتقل إلى لوحة تحكم مسؤول Discourse وانقر على
site_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- عدد المواضيع المراد عرضهاcategory- معرف الفئة لتصفية المواضيع من فئة معينةtags- تصفية المواضيع حسب علامات محددةallow-create- عند تعيينه على true، يعرض زر “موضوع جديد”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 > Customize > Themes. انقر على السمة الحالية أو الافتراضية وانقر على 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 > Customize > Embedding > Allowed Hosts في موقع Discourse الخاص بك. تأكد من تضمين النطاق الفرعي الصحيح (على سبيل المثال، إذا كان موقعك يستخدم www.example.com، فأضف www.example.com بدلاً من example.com فقط).
أخطاء تحميل النص البرمجي
المشكلة: يفشل نص التضمين البرمجي في التحميل أو يعرض أخطاء في الاتصال.
الحل:
- تحقق من أن عنوان URL الخاص بـ Discourse في مصدر النص البرمجي الخاص بك صحيح ويمكن الوصول إليه.
- تحقق من تمكين إعداد الموقع
embed_topics_list. - تأكد من أن موقع Discourse الخاص بك لا يتطلب تسجيل الدخول للمواضيع العامة.
سلوك سياق SameSite
في سياقات SameSite حيث يتشارك الموقع المضمن والمنتدى نطاقًا أبويًا، يحترم Discourse حالة تسجيل الدخول ويعرض النتائج وفقًا لذلك. قد يرى المستخدمون المسجلون محتوى من فئات آمنة لا يمكن للمستخدمين المجهولين الوصول إليها.
الأسئلة الشائعة
س: هل يمكنني تضمين مواضيع من موقع Discourse خاص؟
ج: لا، يعمل تضمين المواضيع فقط مع مواقع Discourse العامة. لا يمكن تضمين المواقع الخاصة التي تتطلب تسجيل الدخول.
س: هل يمكنني تضمين قوائم مواضيع متعددة في نفس الصفحة؟
ج: نعم، يمكنك تضمين عناصر <d-topics-list> متعددة في نفس الصفحة بمعلمات مختلفة لعرض مجموعات مواضيع متنوعة.
س: كيف يمكنني تضمين مواضيع مع صور مميزة؟
ج: استخدم المعلمة template="complete" في عنصر <d-topics-list> الخاص بك لعرض المواضيع مع الصور المصغرة والصور المميزة.
س: هل يمكنني تغيير مكان فتح روابط المواضيع؟
ج: افتراضيًا، تفتح روابط المواضيع في النافذة الأصلية. يمكنك تعديل هذا السلوك من خلال تخصيص CSS أو JavaScript.








