مكون متخصص جدًا لموقعي، ولكني سأشاركه هنا لأنه قد يكون مفيدًا. يضيف قالبًا إلى المُنشئ بناءً على سلسلة نصية في عنوان URL.
كانت هناك الكثير من المناقشات حول وجود قوالب مُنشئ للوسوم (tags). لم ينجح ذلك في حالة الاستخدام الخاصة بي، لذا قمت ببناء هذا بدلاً من ذلك. يمكن استخدامه عند الضرورة، أو تعديله قليلاً ليعمل مع الوسوم أيضًا.
جيت هب (Github): GitHub - focallocal/url-composer-templates: Reads url strings and adds template text to the composer if a match is found
قوالب مُنشئ عنوان URL (URL Composer Templates)
مكون سمة (Theme Component) لمنصة Discourse يقوم بملء المُنشئ مسبقًا بنص قالب بناءً على معلمات عنوان URL. مصمم للعمل بسلاسة مع Docuss لتوفير قوالب خاصة بالسياق لأنواع مختلفة من التفاعلات.
الميزات
- دعم معلمات عنوان URL: يكتشف تلقائيًا
?composer_template=Xفي عناوين URL ويطبق القالب المقابل. - أنواع قوالب متعددة: قم بتكوين ما يصل إلى 6 قوالب مختلفة لأغراض مختلفة (تقرير، حضور، دعوة، قوالب مخصصة).
- فتح المُنشئ تلقائيًا: اختياريًا، يفتح المُنشئ تلقائيًا عند زيارة رابط Docuss بدون سلاسل (threads) موجودة.
- تطبيق مرن: يمكن تطبيق القوالب على المنشور الأول فقط، أو جميع الردود، أو كليهما.
- استمرارية الجلسة: يستخدم
sessionStorageللحفاظ على اختيار القالب عبر تنقلات الصفحة. - وضع التصحيح (Debug Mode): تمكين تسجيل مفصل لوحدة التحكم لاستكشاف أخطاء تطبيق القالب وإصلاحها.
التثبيت
-
تثبيت مكون السمة على Discourse:
- انتقل إلى المسؤول (Admin) ← تخصيص (Customize) ← السمات (Themes).
- انقر على “تثبيت” (Install) ← “من مستودع Git” (From a Git repository).
- أدخل:
https://github.com/focallocal/url-composer-templates - أضف المكون إلى السمة النشطة لديك.
-
لا حاجة لإعادة بناء المكون الإضافي (plugin rebuild)! دعم معلمة
composer_templateموجود بالفعل فيdcs-discourse-pluginوdcs-client. -
نشر تطبيق React الخاص بك (fl-maps) باستخدام مكونات DCSLink المحدثة التي تمرر الخاصية
composerTemplate. -
تكوين القوالب في إعدادات المكون (المسؤول ← تخصيص ← السمات ← سمتك ← url-composer-templates ← الإعدادات).
التكوين
إعدادات القالب
يحتوي كل قالب على ثلاثة خيارات تكوين:
القالب 1 (تقرير - Report)
- template_1_id:
report- قيمة معلمة عنوان URL لتشغيل هذا القالب. - template_1_text: النص الذي سيتم ملؤه مسبقًا في المُنشئ.
- template_1_use_for:
first_post- يتم التطبيق فقط عند إنشاء مواضيع جديدة.
القالب 2 (حضور - Going)
- template_2_id:
going- لتفاعلات من نوع “أنا قادم”. - template_2_text: النص المملوء مسبقًا لتأكيدات الحضور.
- template_2_use_for:
all_replies- يتم التطبيق على جميع الردود (وليس المنشورات الأولى).
القالب 3 (دعوة - Invite)
- template_3_id:
invite- لتفاعلات الدعوة. - template_3_text: النص المملوء مسبقًا للدعوات.
- template_3_use_for:
all_replies- يتم التطبيق على جميع الردود.
القوالب 4-6 (مخصصة - Custom)
- معطلة افتراضيًا.
- يمكن تمكينها وتخصيصها لحالات استخدام محددة.
- قم بتكوين المعرف (ID) والنص ونطاق التطبيق حسب الحاجة.
إعدادات الفتح التلقائي
- enable_auto_open_composer:
true- عند التمكين، يفتح المُنشئ تلقائيًا إذا:- تم النقر على رابط Docuss (يحتوي عنوان URL على
?composer_template=X). - لا توجد مواضيع موجودة بعد لمجموعة الوسوم الحالية.
- يساعد المستخدمين على بدء المناقشات على الفور.
- تم النقر على رابط Docuss (يحتوي عنوان URL على
وضع التصحيح
- debug_mode:
false- قم بالتمكين لرؤية سجلات وحدة التحكم التفصيلية مع بادئات الرموز التعبيرية (emoji):
سجلات تطبيق القالب.
سجلات فتح المُنشئ التلقائي.
تكامل Docuss
التكامل التلقائي
تم تصميم مكون url-composer-templates للعمل تلقائيًا مع Docuss. عندما يكون لديك كل من:
- هذا المكون مثبتًا على مثيل Discourse الخاص بك.
- عميل Docuss والمكون الإضافي المحدث (مع دعم
composer_template).
سيتم تطبيق القوالب تلقائيًا بناءً على:
- وضع التفاعل (Interact Mode):
- وضع
DISCUSS← يستخدم تلميحاتtriggerId(حضور، دعوة) أو يعود إلىreport. - وضع
COMMENT← يستخدم قالبreport.
- وضع
القوالب المخصصة عبر سمات HTML
لمزيد من التحكم الدقيق، يمكنك تحديد القوالب مباشرة في HTML الخاص بك باستخدام السمة data-dcs-composer-template:
<!-- مثال: زر التقرير -->
<div class="dcs-trigger"
data-dcs-trigger-id="issue-report"
data-dcs-interact-mode="DISCUSS"
data-dcs-composer-template="report">
الإبلاغ عن مشكلة
</div>
<!-- مثال: زر الحضور -->
<div class="dcs-trigger"
data-dcs-trigger-id="event-rsvp"
data-dcs-interact-mode="DISCUSS"
data-dcs-composer-template="going">
أنا قادم!
</div>
<!-- مثال: زر الدعوة -->
<div class="dcs-trigger"
data-dcs-trigger-id="invite-friends"
data-dcs-interact-mode="DISCUSS"
data-dcs-composer-template="invite">
دعوة الأصدقاء
</div>
<!-- مثال: قالب مخصص -->
<div class="dcs-trigger"
data-dcs-trigger-id="feedback"
data-dcs-interact-mode="DISCUSS"
data-dcs-composer-template="custom1">
قدم ملاحظاتك
</div>
مطابقة معرف القالب (Template ID Matching)
يطابق المكون معرفات القالب من معلمة عنوان URL مع معرفات القالب المكونة:
| معلمة عنوان URL | إعداد القالب | الغرض الافتراضي |
|---|---|---|
?composer_template=report |
template_1_id |
تقارير الأخطاء، المشكلات |
?composer_template=going |
template_2_id |
تأكيدات الحضور في الفعاليات |
?composer_template=invite |
template_3_id |
الدعوات |
?composer_template=custom1 |
template_4_id |
استخدام مخصص |
?composer_template=custom2 |
template_5_id |
استخدام مخصص |
?composer_template=custom3 |
template_6_id |
استخدام مخصص |
كيف يعمل
تدفق تطبيق القالب
- اكتشاف عنوان URL: عندما ينتقل المستخدم إلى عنوان URL يحتوي على
?composer_template=X، يقوم المكون بتخزين معرف القالب فيsessionStorage. - اعتراض المُنشئ: عند فتح المُنشئ، يتحقق المكون من وجود معرف قالب مخزن.
- مطابقة القالب: يجد القالب المطابق بناءً على المعرف.
- التحقق من النطاق: يتحقق مما إذا كان يجب تطبيق القالب (المنشور الأول، الرد، أو كليهما).
- إدراج النص: يملأ المُنشئ مسبقًا بنص القالب.
- التنظيف: يضع علامة على القالب على أنه تم تطبيقه لمنع إعادة التطبيق.
تدفق الفتح التلقائي
- اكتشاف المعلمة: يتحقق مما إذا كان عنوان URL يحتوي على
?composer_template=Xوما إذا كان الفتح التلقائي ممكّنًا. - البحث عن الموضوع: يبحث عن مواضيع موجودة مع مجموعة الوسوم الحالية.
- فتح المُنشئ: إذا لم يتم العثور على مواضيع، يقوم بفتح المُنشئ تلقائيًا.
- تطبيق القالب: يتم تطبيق القالب بعد ذلك عبر التدفق العادي المذكور أعلاه.
حالات الاستخدام المثالية
موقع الفعالية
# settings.yml
template_2_id: "going"
template_2_text: "أنا أخطط للحضور! 🎉\n\nأتطلع لرؤية الجميع هناك."
template_2_use_for: "all_replies"
template_3_id: "invite"
template_3_text: "أود دعوة الأصدقاء لهذا الحدث.\n\nمن أدعو:\n- \n\nلماذا يجب أن يأتوا:\n"
template_3_use_for: "first_post"
تتبع المشكلات
template_1_id: "bug"
template_1_text: "**وصف الخطأ:**\n\n**خطوات إعادة الإنتاج:**\n1. \n2. \n3. \n\n**السلوك المتوقع:**\n\n**السلوك الفعلي:**\n"
template_1_use_for: "first_post"
template_4_enabled: true
template_4_id: "feature"
template_4_text: "**طلب ميزة:**\n\n**حالة الاستخدام:**\n\n**الحل المقترح:**\n"
template_4_use_for: "first_post"
مشاركة المجتمع
template_1_id: "question"
template_1_text: "**سؤالي:**\n\n**ما جربته:**\n\n**سياق إضافي:**\n"
template_1_use_for: "first_post"
template_2_id: "answer"
template_2_text: "إليك ما نجح معي:\n\n**الحل:**\n\n**لماذا ينجح:**\n"
template_2_use_for: "all_replies"
استكشاف الأخطاء وإصلاحها
القوالب لا يتم تطبيقها
- تحقق من معلمة عنوان URL: تأكد من أن عنوان URL يحتوي على
?composer_template=Xحيث تتطابق X مع معرف القالب. - تمكين وضع التصحيح: قم بتشغيل
debug_modeفي الإعدادات لرؤية سجلات وحدة التحكم. - التحقق من نطاق القالب: تحقق مما إذا كان إعداد
use_forيطابق الإجراء الخاص بك (إنشاء موضوع مقابل الرد). - مسح
SessionStorage: افتح وحدة تحكم المتصفح وقم بتشغيل:sessionStorage.clear()
الفتح التلقائي لا يعمل
- التحقق من الإعداد: تأكد من تعيين
enable_auto_open_composerعلىtrue. - التحقق من عنوان URL: يعمل الفتح التلقائي فقط عندما يحتوي عنوان URL على
?composer_template=X. - التحقق من المواضيع الحالية: يتم تشغيل الفتح التلقائي فقط عندما لا توجد مواضيع موجودة لمجموعة الوسوم.
- تمكين وضع التصحيح: ابحث عن سجلات وحدة التحكم التي تحمل الرمز التعبيري
.
تطبيق القالب الخاطئ
- التحقق من معرفات القالب: تأكد من أن معلمة عنوان URL تطابق معرف القالب بالضبط (حساسة لحالة الأحرف).
- التحقق من الأولوية: إذا كان من الممكن أن يتطابق أكثر من قالب، يتم استخدام أول قالب مطابق.
- مسح الجلسة: قد تحتوي
SessionStorageعلى قيم قديمة:sessionStorage.clear().
مشكلات تكامل Docuss
- تحديث Docuss: تأكد من أن لديك أحدث إصدارات من:
dcs-client(مع دعمcomposerTemplateفيHtmlBased.js).dcs-discourse-plugin(مع إنشاء معلمات عنوان URL فيDcsIFrame.js.es6).
- التحقق من سمات HTML: تأكد من تعيين
data-dcs-composer-templateبشكل صحيح على المشغلات (triggers). - فحص الشبكة: تحقق من علامة تبويب الشبكة (Network) في أدوات المطور بالمتصفح لمعرفة ما إذا كانت معلمات عنوان URL تتم إضافتها.
سجل الإصدارات
الإصدار 1.0.0 (الحالي)
- الإصدار الأولي.
- دعم لـ 6 قوالب قابلة للتكوين.
- اختيار القالب بناءً على معلمة عنوان URL.
- فتح المُنشئ تلقائيًا لروابط Docuss.
- استمرارية
SessionStorage. - وضع التصحيح لاستكشاف الأخطاء وإصلاحها.
المساهمة
هل وجدت خطأً أو لديك طلب ميزة؟ يرجى فتح مشكلة على مستودع GitHub.
الترخيص
هذا المكون مفتوح المصدر ومتاح بموجب ترخيص MIT.
الاعتمادات
تم تطويره بواسطة Andy@Focallocal للاستخدام مع Docuss - نظام لتضمين مناقشات Discourse في أي موقع ويب.