Theme-Component مقابل Plugin: ما الفرق؟

شكرًا لك، @tshenry. لست متأكدًا من سبب عدم عمل كود مالك المجموعة بالنسبة لي، ربما يكون ذلك مرتبطًا بكيفية إعدادي للإضافة.

لقد وجدت أن نهج AJAX يعمل كطريقة “أقل منتج ممكن” (MVP). بالمناسبة، أعتقد أنه يمكنك إجراء استدعاء API إلى [forum-url]/groups.json لاسترجاع جميع مجموعات الموقع، ثم يمكنك التكرار عليها من هناك، لذا لا داعي لإجراء استدعاءات متعددة.

كنت آمل أن أسأل:

–بالنسبة لنهج AJAX/JSON API، هل تعرف كيف تجعل دالة ما تعمل فقط عندما ينتقل المستخدم إلى صفحة محددة؟ حاليًا، إذا وضعت كود AJAX في قسم من لوحة التحكم المخصصة لدي، يمكنني جعله يعمل، لكنه يعمل في كل مرة يتم فيها تحميل الموقع (بينما أريد فقط أن يعمل عند تحميل صفحة فهرس المجموعات).

–في حالتي، أستخدم AJAX حاليًا خاصةً لأنني لا أحتاج فقط إلى عرض مالكي المجموعات، بل أيضًا بعض السمات الجديدة الأخرى للمجموعة التي أضيفها. ستكون هذه مثل حقول مخصصة للمجموعة أحاول استرجاعها وعرضها. حاليًا، الإصدار “أقل منتج ممكن” (بينما ما زلت أتعلم كيفية عمل قاعدة كود Discourse) هو حفظها في قاعدة بيانات منفصلة غير تابعة لـ Discourse أستخلص منها وأضيفها إلى صفحة فهرس المجموعات.

من الواضح أن الحل الأنظف هو إضافة السمات المخصصة إلى المجموعات في قاعدة بيانات Discourse واستدعائها مرة أخرى. مجرد محاولة لتقدير نوع العملية المطلوبة هنا. هل سيتطلب ذلك إعادة كتابة عدد كبير من ملفات Discourse (التحكم، النماذج، القوالب)؟

يمكنني وضعه في مستودع صغير على GitHub عندما أجد فرصة.

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

بشأن أسئلتك:

  1. المكون السمعي الذي ربطت به يقوم بشيء مشابه لضمان حدوث استدعاء AJAX فقط على /latest أو الصفحة الرئيسية. سأحاول البناء على هذه الفكرة: discourse-featured-topics/common/head_tag.html at ddf3d7e003423e2e5f83446a80cab78d51f09e2d · awesomerobot/discourse-featured-topics · GitHub

    أيضًا، إذا لم تكن قد فعلت ذلك بالفعل، تأكد من الاطلاع على Developing Discourse Themes & Theme Components

  2. لا يوجد مفهوم مدمج لحقل مجموعة مخصص كما هو الحال مع حقول المستخدم المخصصة. أعتقد أنك ستحتاج إلى بناء إضافة تضيف جميع الأجزاء اللازمة لجعل ذلك يعمل.

أنت محق. لقد نسيت—هذا شيء أقوم بتخزينه أيضًا في قاعدة بيانات منفصلة أستدعيها حاليًا عبر AJAX (وبعض الحيل الأخرى).

فكرة رائعة—أرى ما فعلته باستخدام if ((url == "/") || (url == "/latest") ) في ذلك المستودع. يمكنني فعل شيء مشابه.

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

حاشية

قد يكون Ember نظامًا رائعًا لبناء تطبيقات عالية الأداء، لكنني أجد صعوبة في استخلاص كيفية ارتباط الملفات المختلفة ببعضها. على سبيل المثال، لا يخبرك العثور على القالب الصحيح في عرض معين في مستودع Github كثيرًا عن القوالب الأخرى التي يرتبط بها، وخاصةً التحكمات والنماذج الأخرى ذات الصلة. هذا ممكن، لكنه يتطلب وقتًا طويلاً، وتحتاج حقًا إلى فهم هذه العلاقات لتنفيذ هذه التخصيصات.

في Angular، كطريقة بديلة، يتم تجميع أجزاء مكونات العرض عادةً مع ملف HTML وملف TypeScript وملف CSS، ثم يتم تحديد الملفات الأخرى ذات الصلة بوضوح في هذه الملفات (لذا يتم تحديد الخدمات المستخدمة في ملف TypeScript، ويتم تحديد المكونات الأخرى المضمنة بوضوح في ملف HTML). حسب ما أستطيع رؤيته، لا تعمل بنية Ember في Discourse بهذه الطريقة (وليس هذا انتقادًا لهذه البنية—فهي تطبيق مستقر للغاية وعالي الأداء—بل إنها تتطلب مجرد التعود عليها).

ومن هنا استخدامي لأشياء مثل AJAX للحصول على نفس النتيجة بينما أواصل محاولة فهم كيفية تجميع قطع Discourse معًا.