أحتاج إلى تحميل مشاركات على موقع خارجي حيث لا أعرف post_id ولكني أعرف external_id الذي قمت بتكوينه عند إنشاء الموضوع.\n\nهل يمكن لأحد أن يكشف عن متغير external_id في منطق embed.js أو يعلمني ما الذي أفتقده؟\n\nمثال للدعم المطلوب:\n\n\u003e window.DiscourseEmbed = {\n\u003e discourseUrl: ‘https://forums.blah.org/’,\n\u003e external_id: ‘2023-4’\n\u003e };
أفترض أنك أنشأت المواضيع عبر واجهة برمجة التطبيقات (API) وقمت بتعيين المعلمة external_id.
لست متأكدًا مما إذا كان هذا يساعد، ولكن لدى Discourse المسار t/external_id/:external_id. يبدو أنه يعيد بيانات JSON فقط:
لذلك يمكنك الحصول على JSON الخاص بالموضوع على (على سبيل المثال)
/t/external_id/2023-4.json
هذا سيعيد المحتوى و id الخاص بموضوع Discourse. لا أعتقد أن هذا يحل مشكلتك.
اختبار هذا الآن، يتم إرجاع بيانات JSON، ولكن Discourse يقوم بإعادة توجيه تلقائي إلى عنوان URL الفعلي لموضوع Discourse عند إجراء الطلب. على سبيل المثال، إعادة توجيه طلب GET إلى http://localhost:4200/t/external_id/1.json يعيدني إلى http://localhost:4200/t/testing-the-external-id-param/206.json
أتطلع إلى الحصول على شيء بتنسيق المشاركات المضمنة. يقوم Discourse بعمل رائع مع هذا التخطيط بالفعل ولا أريد إعادة اختراع العجلة.
من خلال عدم السماح بالبحث عن طريق external_id، سأحتاج إلى تخزين معرف موضوع المنتدى في قاعدة البيانات الخاصة بي والبحث بهذه الطريقة. يبدو الأمر زائدًا عن الحاجة عندما يكون لدينا بالفعل متغير فريد مخزن في external_id عندما أنشأت الموضوع من واجهة برمجة التطبيقات.
أعتقد أنني فهمت الآن. أنت ترغب في استخدام البرنامج النصي المعروض هنا: https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963#alternate-configuration-linking-to-existing-topics-6. ولكن بدلاً من استخدام المعلمة topicId، تريد استخدام المعلمة external_id.
ربما يمكن إضافة هذا كميزة.
قد يكون من الممكن أيضًا إجراء طلب من جانب العميل (على سبيل المثال) إلى
http://localhost:4200/t/external_id/1.json
ثم استخراج عنوان URL الفعلي للموضوع من الاستجابة و إما تحليل عنوان URL هذا لاستخراج id الموضوع، أو إجراء طلب ثانٍ إلى عنوان URL للموضوع للحصول على معرف الموضوع.
يبدو هذا عرضة للخطأ.
إذا كنت تضيف برنامج تضمين النص البرمجي من جانب الخادم بدلاً من جانب العميل، يمكنك ببساطة إجراء طلب GET إلى http://localhost:4200/t/external_id/1.json، وتنفيذ أي إجراءات تحتاجها للحصول على id موضوع Discourse، ثم إدراج البرنامج النصي في صفحة الويب الخاصة بك باستخدام هذا id.
هذه ملاحظات جيدة وتمنحني بعض الأشياء للتفكير فيها. طلب الميزة هو الأكثر مباشرة ولكنني أحب بعض أفكارك التي لم أفكر فيها!