عرض الردود المتداخلة (/n/) يملأ الصفحات بمسافات محجوبة للمنشورات المحذوفة التي يتجاهلها العرض المسطح

إذا قمت بالتحقق من موضوع @angus Custom Wizard Plugin كمستخدم مجهول، في عرض الردود المتداخلة: https://meta.discourse.org/n/-/73345.json?page=0&sort=old

/n/-/73345.json?page=0&sort=old يعيد 20 منشوراً جذرياً، وكل واحد منها هو عنصر نائب محذوف — محتوى مطبوخ فارغ، بدون مؤلف، وtotal_descendant_count: 0. لذلك فإن الصفحة الأولى بأكملها تتكون من صفوف «مزالة» فارغة.

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

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

الإعداد مفعل بالتأكيد — أعاد نقطة النهاية رمز 200 بدلاً من 404.

يبدو أن السبب هو apply_visibility في NestedReplies::TreeLoader — حيث يقوم scope.unscope(where: :deleted_at) بجلب كل منشور محذوف إلى الشجرة. هذا منطقي لوالد محذوف لا يزال لديه ردود نشطة تحته، لكنه أيضاً يحافظ على الأوراق المحذوفة والفروع المحذوفة بالكامل، وتستهلك هذه الأماكن في نافذة ROOTS_PER_PAGE (وتحسب ضمن has_more_roots).

بالنسبة للمستخدمين غير المسؤولين، أعتقد أنك تريد إزالة المنشور المحذوف ما لم يكن لديه نسل غير محذوف واحد على الأقل — احتفظ به فقط عندما يكون total_descendant_count المرئي > 0. يستبعد NestedViewPostStat بالفعل النسل المحذوف/المهموس من هذا العدد، لذا فلا حاجة إلى استعلام إضافي.

سيكون من الضروري تطبيق ذلك في الأماكن الثلاثة التي تبني الصفحة حتى لا تحصل على صفحات قصيرة: root_posts_scope، وbatch_preload_tree، وجزء ملء الصفحة / has_more_roots. يبقى مسار المسؤولين كما هو لأغراض الاسترداد.

إعجابَين (2)

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

إعجاب واحد (1)

للعلم @markvanlan في حال كان لديك بعض الأفكار.

إعجاب واحد (1)

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

شيء يجب ملاحظته هو أن المواضيع التي تحتوي على ردود متداخلة تعود الآن إلى /t/ بدلاً من /n/. ستلاحظ ذلك عند تحديث Discourse في المرة القادمة.

4 إعجابات

حسنًا، هناك نقطة يجب ملاحظتها: لقطة الشاشة ليست من منتداقي، بل من meta.discourse.org. لقد قمت باختبار meta ضد تطبيق العميل الخاص بي لعدة حالات تتضمن ردودًا متداخلة.

3 إعجابات

وضعتُ نصوصًا مؤقتة مكان العناصر المحذوفة، مع إيقاف الردود المتداخلة من إعدادات التطبيق، وبقيت طريقة عرض الردود الصحيحة.

إعجاب واحد (1)

هل يمكننا فعل ذلك بطريقة مختلفة ونقل العناصر المحذوفة التي لا تحتوي على عناصر فرعية إلى النهاية؟

إعجاب واحد (1)

@falco هناك نقطة تستحق التأكيد فيما يتعلق بأوضاع الترتيب: مع old/new/top، هل سيؤدي التبديل إلى ترتيب العناصر النائبة المُخفَّضة فيما بينها باستخدام نفس المفتاح، أم أنها ستبقى فقط في ترتيبها الأصلي؟ كلا الخيارين مقبولان بالنسبة لي، أريد فقط التأكد من أن الجذر المحذوف الذي لا ينتمي إليه أي عناصر فرعية لا يمكن أن يظهر في منتصف القائمة عند استخدام ترتيب مختلف.

إعجاب واحد (1)