قوالب مُنشئ الـ Url

شكرًا لتنبيهك @NateDhaliwal

لا، إنه يقوم فقط بفحص عنوان URL بحثًا عن سلسلة محددة ويملأ المُنشئ مسبقًا بأحد القوالب القليلة عندما يجد تلك السلسلة.

يضع المكون الإضافي Docus تلك السلسلة في عناوين URL كإحدى وظائفه، ولكن هذا المكون سيعمل مع أي سلسلة أو آلية تسليم يريد شخص ما استخدامها، لذا يمكن أن يكون قائمًا بذاته. سأقوم بتحديث ملف README لشرح ذلك.

على سبيل المثال، يمكنك إخباره بالبحث عن: /tag/introductions وسيصبح مكون قالب وسم. أو يمكنك استخدامه كما أفعل لوضع هذا القالب في تقاطعات الوسوم، مثل: tags/intersection/introductions/webdevs

سأقوم بنقل السلسلة التي يبحث عنها إلى قسم الإدارة لجعلها أسهل على الآخرين تعديلها واستخدامها دون الحاجة للتعمق في الكود.

بصراحة، كنت أعاني من خطأ فيه خلال الأيام القليلة الماضية وكنت أفقد (ما تبقى لي من شعر) وربما لم يكن ينبغي لي مشاركته بعد. إنه يضع قالبًا دائمًا عندما يجد تلك السلسلة في عنوان URL.

في بعض الأحيان تريد ذلك في كل مرة يجد فيها تلك السلسلة، وفي أحيان أخرى تريد ذلك فقط إذا لم تكن هناك سلاسل موجودة بالفعل، وفي أحيان أخرى تريد ذلك فقط إذا لم يكن هذا المستخدم المحدد قد أنشأ بالفعل موضوعًا في هذا الموقع.

ما يحدث الآن:
تراقب أداة التهيئة وسم/سلسلة في عنوان URL وتفتح تلقائيًا قالبًا في Discourse كلما رأت تطابقًا. هذا يعمل بشكل جيد عندما أريد دائمًا فتح قالب، ولكنه ينهار عندما أحتاج إلى شروط مثل “لا تفتح إذا كان أي موضوع موجودًا بالفعل” أو “لا تفتح إذا كان هذا المستخدم قد نشر بالفعل”.

ما حاولت القيام به:

  • قدمت علامة settings.auto_open_check_user_only. عندما تكون قيد التشغيل، يبحث الكود عن tags:tag1+tag2 @username؛ وعندما تكون قيد الإيقاف، فإنه يبحث عن tags:tag1+tag2 فقط. كان الهدف هو التمييز بين “أي موضوع موجود” و “موضوع هذا المستخدم موجود”.
  • أضفت تأخيرًا لمدة 500 مللي ثانية قبل إعادة تشغيل حفظ المسودة لتجنب التعارض مع الحفظ التلقائي لـ Discourse.
  • بدأت في تسجيل المعلومات الأساسية (معرف الزناد، اسم القالب) حتى أتمكن على الأقل من رؤية متى يتم تشغيل الفتح التلقائي.

أشتبه في أن المشكلات هي:

  • تُرجع واجهة برمجة تطبيقات البحث الخاصة بـ Discourse النتائج قبل تحديث فهرس البحث، لذلك يستمر النظام في الاعتقاد بأنه “لا توجد مواضيع موجودة” حتى مباشرة بعد نشر المستخدم.
  • التصفية حسب @username لا تساعد إذا كان اسم المستخدم غير مطابق تمامًا أو إذا لم تتطابق الوسوم مع إعدادات القالب.
  • أنا لا ألغي أبدًا مؤقتات حفظ المسودة المعلقة في Discourse، لذلك على الرغم من أنني أحظر عمليات الحفظ لمدة 500 مللي ثانية، إلا أن عمليات الحفظ المجدولة لا تزال تعمل لاحقًا وتعيد المسودة/المُنشئ.

أحاول حاليًا:

  • بعد استدعاء deleteDraft، إلغاء تحديد مؤقت _saveDraft الخاص بـ Discourse على الفور حتى لا تظهر المسودات القديمة مرة أخرى.
  • إنشاء ذاكرة تخزين مؤقت قصيرة الأجل تتذكر “لقد أنشأت موضوعًا بالفعل هنا بهذه الوسوم” لتغطية تأخير فهرس البحث.
  • إنشاء 3 أوضاع يمكن اختيارها في قسم الإدارة

always
يفتح القالب في كل مرة تتطابق فيها الوسوم. لا عمليات بحث، لا عمليات تحقق - فقط افتح المُنشئ.

ifNoTopics
يستخدم بحث Discourse للسؤال: هل يوجد بالفعل أي موضوع بهذه الوسوم؟

  • إذا كانت الإجابة نعم ← لا تفتح.
  • إذا كانت الإجابة لا ← افتح.
    جيد لحالات “يجب أن يوجد موضوع واحد فقط”.

ifUserHasNoTopic
يبحث عن: هل أنشأ هذا المستخدم المحدد موضوعًا بهذه الوسوم بالفعل؟

  • إذا كانت الإجابة نعم ← لا تفتح.
  • إذا كانت الإجابة لا ← افتح.
    مفيد عندما يجب أن يحصل كل مستخدم على موضوعه الشخصي.

إذا كان لدى أي شخص أي اقتراحات حول كيفية التعامل مع إنشاء تلك الإعدادات، فسأكون سعيدًا بسماعها.