تخصيص إدخالات قائمة الموضوع (الفرز، التجميع، التصفية) لتنظيم أفضل

ملخص سريع:
ما هي أسرع طريقة لتغيير كيفية تكوين filteredTopics (السطر 26). أود أن يكون لدي تحكم كامل في المواضيع (بخصائصها) التي يتم جمعها.

مرحباً بالمجتمع،

لقد كنت أستخدم مكون الثيم GitHub - discourse/discourse-topic-thumbnails: Display thumbnails in topic lists في بيئتنا المستضافة وأردنا إجراء تغييرات إضافية عليه لتلبية احتياجاتنا.

بدلاً من خلط جميع المواضيع في جزء كبير واحد من عناصر الشبكة، نرغب في إدخال بعض الترتيب.
نحن نهدف إلى ما يلي:
في البداية، نريد الفرز حسب المرئي/غير المرئي، ثم نريد الفرز حسب الفئة؛ ثم بعد ذلك نرغب في تجميعها حسب التسلسل الزمني (وإنشاء مجموعات مثل اليوم (جميع المشاركات ذات الصلة من اليوم)، أمس، الأسبوع الماضي).

لذلك، يجب أن تبدو قائمة المواضيع لدينا كما يلي مع 3 شبكات مميزة أسفل بعضها البعض:

<اليوم، أمس، الأسبوع الماضي> يمثل تجميعًا

مثبتة:
الموضوع 20، الموضوع 30، الموضوع 40

غير مرئية:
<اليوم: [فن: الموضوع 1، الموضوع 2]، [تصميم: الموضوع 4]> <أمس: [مفهوم: الموضوع 3]، [فئة أخرى: الموضوع 6، الموضوع 11]> <الأسبوع الماضي: الموضوع 8، الموضوع 10>

مرئية:
<اليوم: [فن: الموضوع 4، الموضوع 12]، [تصميم: الموضوع 4]> <أمس: [CGI: الموضوع 13]، [فئة أخرى: الموضوع 16، الموضوع 21]>، <الأسبوع الماضي: الموضوع 18، الموضوع 100>

سؤالي الرئيسي هو كيف يمكنني إنشاء/توسيع الاستعلام الذي ينشئ مجموعة النتائج التي يتم تكرارها بعد ذلك في

عبر filteredList.

لقد وجدت مكانًا قد يتم فيه ملء هذا، لكنني لم أكن متأكدًا من كيفية “توسيعه”. يبدو أن هناك نظام queryParam وبعض إعدادات المسار التي يمكن أن تؤثر على مجموعة النتائج ولكنني لم أفهمها.

هل يمكن لأي شخص أن يشيرني إلى المكان الصحيح؟

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

شكراً جزيلاً!

CC @pfaffman

للعلم فقط، فإن Topic List Thumbnails هو Theme component وليس إضافة. :+1:

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

“Jammy، لقد أضفت ملخصًا. هل لديك أي تلميحات حول هذا السؤال المختصر؟\nشكرًا”

أخشى أن هذا خارج نطاق مهاراتي. :slight_smile:

هل اطلعت على كيفية تعديل الفئات في https://meta.discourse.org/t/developer-s-guide-to-discourse-themes/93648؟ قد يكون هناك شيء هناك يمكن أن يساعد. يمكن أن يؤدي البحث أيضًا إلى ظهور بعض الأمثلة المفيدة إذا قمت بتوسيع الكلمات الرئيسية الخاصة بك؟

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

أنا أضيف بعض الأشخاص الآخرين في نسخة كربونية لأنني رأيتهم في كود Git.

للعلم فقط، فإن وضع علامة على أعضاء الفريق بهذه الطريقة يعتبر سلوكًا سيئًا جدًا في Meta، لذلك قمت بإزالة تلك العلامات حتى لا يتم إنشاء نمط قد يحاول الآخرون تكراره. :+1:

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

هل أحرزت أي تقدم في بحثك/محاولاتك؟

اعتقدت أنني كنت ذكيًا بنسخ الأشخاص المناسبين :rofl:

ولا، لم أحصل على أي شيء آخر. حاولت عرض قائمة المواضيع 3 مرات ثم إخفاء المواضيع غير المرغوب فيها في كل منها، ولكن بعد ذلك تدخلت وظيفة “تحميل المزيد” وتمت إعادة كتابة أجزاء كبيرة من DOM وأصبحت حساباتي في JavaScript ثقيلة جدًا وتسببت في تأثيرات غريبة.

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

لقد أحرزت تقدمًا كبيرًا هنا وكان لدي بعض الأسئلة الأخرى على طول الطريق:

  • هل هناك نقطة نهاية لواجهة برمجة التطبيقات (API) يمكنني استخدامها للحصول على جميع المواضيع المثبتة؟ على غرار /latest.json أو /top.json؟
  • هل هناك أمر JavaScript (بافتراض أنني في مكون إضافي) يمكنني استخدامه لإجبار قائمة المواضيع على إعادة العرض، بعد إجراء تغيير في الحالة على عناصر قائمة المواضيع، بحيث ينعكس التغيير على الفور؟ أعتقد أنني سأحتاج إلى العمل مع مراقب على topics.؟

بالإضافة إلى ذلك، وجدت المقالة التالية التي تحتوي على كل ما أحتاجه لتخصيص قائمة المواضيع التي أريدها.

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

يسرني أنك أحرزت بعض التقدم - من الواضح أنك في منطقة مجهولة!

يمكن الحصول على المواضيع المثبتة عن طريق الاستعلام عن /search.json?expanded=true&q=in%3Apinned
باستخدام البحث بدون كلمة مفتاحية بحث فعلية.

هذا يعيد فقط قائمة بمعرفات المواضيع أو لنقل مجموعة بيانات مواضيع مبسطة. سيتعين عليك إجراء طلبات ajax متابعة إلى /t/${topic.id}.json للحصول على مجموعة البيانات الكاملة المحيطة بموضوع ما.

ما زلت مهتمًا بكيفية فرض إعادة عرض قائمة مواضيع عبر JS.