كيف تستخرج البيانات من قاعدة البيانات (DB) لمكونات الثيم الخاصة بك؟

هل يعرف أحد ما إذا كان هناك دليل أو مثال لهذا في أي مكان من فضلك؟

لنفترض مثلاً أنني استخدمت مكون سمة لإنشاء عمود جانبي، كيف يمكنني سرد أحدث 20 موضوعًا ظاهرًا للعامة (أو إذا كان ذلك أسهل، من الفئات التي أذكرها في الاستعلام) في ذلك العمود الجانبي/مكون السمة؟

هناك طريقتان أو أكثر للقيام بذلك. الأبسط هو استخدام استدعاء AJAX إلى نقطة النهاية في واجهة برمجة تطبيقات Rails التي تقدم البيانات التي تريد عرضها. إذا كنت ترغب في الحصول على أحدث 20 موضوعًا، فقد ترغب في تجربة /latest.json.

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

شكرًا لك على الرد، جاستن :slight_smile:

هل توجد طريقة سهلة لإعادة استخدام الخلاصات/البيانات التي يوفرها Discourse بالفعل؟ (بحيث تحترم أيضًا إعدادات المستخدم).

على سبيل المثال، قد يكون لدينا في عمود جانبي:

  • آخر 10 مواضيع (خلاصة من صفحة “الأحدث”، ولكنها تحترم أيضًا الفئات الصامتة)
  • أفضل مواضيع هذا الأسبوع (من /top)
  • أفضل مواضيع هذا الشهر
  • أفضل مواضيع هذا العام
  • أكثر المستخدمين نشاطًا هذا الشهر (من /u?period=monthly)

في الواقع، هذا أمر سهل نسبيًا في منصات منتديات أخرى، وأفتقده حقًا في Discourse :sob:

بالطبع. عند استخدام Ajax مع نقاط النهاية المرتبطة، سيتم احترام إعدادات المستخدم الحالية.

الوصول إلى /latest.json سيظهر فقط أحدث المواضيع التي يمكن لهذا المستخدم رؤيتها.

قم بطلب GET من نفس المسارات مع إضافة .json إلى الرابط وسترى ما ستجده!

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

على أي حال، أحب أن أجرب هذا - هل توجد أدلة أو دروس توضح كيفية جلب البيانات من نقطة نهاية إلى مكون قالب؟ (أو هل من الأفضل/الأكثر كفاءة إنشاء إضافة بدلاً من ذلك؟)

أعلم كيفية إنشاء مكون قالب وإضافة “وهمية”، لكنني لم أعثر على أي أدلة توضح كيفية جلب البيانات من قاعدة البيانات إليها.

https://meta.discourse.org/t/how-to-add-a-featured-topic-list-to-your-discourse-homepage/132949

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