تضمين منتدى Discourse بالكامل على موقع آخر داخل iframe

تم مناقشة هذا الأمر في خيطين آخرين بالفعل، لكنهما مقفلان:

يُشير بعض الأشخاص إلى أنه ينبغي علينا بدلاً من ذلك العمل على إعادة هيكلة علامة “Discourse” التجارية لتتناسب مع تصميم موقع موجود.

من واقع الخبرة، فإن هذا الأمر صعب للغاية. فعلامات التنسيق (Markup) وCSS الخاص بها معقدان للغاية في التعامل معهما وغير مرنين. وعلى سبيل المثال، أشجار DOM بين رأس الصفحة (Header) في Discourse والمحتوى الرئيسي تختلف اختلافاً كبيراً عن بعضها البعض. فإدراج محتوى الرأس (في محرر Discourse المدمج) يضع المحتوى المُدرج بعيداً جداً عن رأس الصفحة الفعلي في Discourse، على سبيل المثال.

صدّقني، من الصعب جداً ببساطة “جعل Discourse يتبع موضوع موقعك الرئيسي”.

ما أود تجربته في الخطوة التالية هو تضمين Discourse داخل وسم <iframe>. لنرَ كيف تسير الأمور.


طلب ميزة! سيكون رائعاً لو أمكن استخدام Discourse كمجموعة من العناصر المخصصة. على سبيل المثال:

<!-- ... بعض علامات التنسيق المخصصة ... -->

<discourse-actions backend="http://url.to/actual/discourse/instance">

<!-- ... بعض علامات التنسيق المخصصة ... -->

<discourse-main backend="http://url.to/actual/discourse/instance">

وهو ما قد يسمح بتضمين أجزاء من Discourse في أي مكان داخل موقع، مع اتصال العناصر بالخادم الخلفي (backend) المحدد.

وسوف يؤدي زيارة http://url.to/actual/discourse/instance مباشرة إلى فتح Discourse بالطريقة المعتادة كتطبيق ويب مستقل.

بشكل أساسي، سيجعل هذا الأجزاء من Discourse قابلة للاستخدام ضمن هياكل HTML شاملة (مثل أجزاء القوالب في Handlebars، ولكن بطريقة آمنة للمستقبل مبنية على معايير الويب).

فقط تخيل ما هو ممكن آخر مع ميزة كهذه (فكر في الحالة التي يكون فيها للعناصر المخصصة قيم مختلفة لسمات backend)…

بالتأكيد لا يمكننا منعك من تجربة Discourse داخل إطار مضمن (iframe)، ولكن كما حُذّر في مواضيع أخرى… يُتوقع أن يكون ذلك هشًا ومشاكل… ولا نعتزم قضاء الوقت في حل المشكلات المتعلقة بالأطر المضمنة.

قد يكون من الأفضل تخصيص الوقت لوصف بالتفصيل المشكلات التي تواجهها عند تخصيص مظهر Discourse، حتى نتمكن من المساعدة و/أو تحسين العملية. لقد قمنا بتحسين عملية التخصيص بشكل كبير خلال العامين الماضيين، وهي مسألة نود بالتأكيد دعمها وتحسينها حيثما أمكن.

هناك عناصر أصعب في التخصيص من غيرها، ويُعد الرأس (header) أحد هذه العناصر. والسبب في ذلك هو تنفيذ نموذج افتراضي للواجهة (Virtual DOM) لتحسين الأداء (A tour of how the Widget (Virtual DOM) code in Discourse works).

لذا، إذا كنت تنوي إدراج محتوى في الرأس، فستحتاج إلى استخدام هذا النظام بدلاً من إضافة محتوى قبله أو بعده من واجهة المسؤول (تم التطرق إلى ذلك قليلاً في قسم واجهة برمجة التطبيقات المتقدمة للمكوّن الإضافي في Developing Discourse Themes & Theme Components). كما توجد بعض الأمثلة الجيدة على معالجة محتوى الرأس في مكونات Customization > Theme component الحالية، مثل Custom Header Links.

سيكون من الرائع توفر هذه الميزة، وأرى أنها لا تزال لا تعمل عند تجربتي، حيث أحصل فقط على