تضمين منتدى 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). والسبب في ذلك هو تنفيذ نظام DOM افتراضي لتحسين الأداء (A tour of how the Widget (Virtual DOM) code in Discourse works).

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

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