إخفاء الفئات من المستوى الثالث في الصفحة الرئيسية للفئات دون فقدان التنسيق

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

بمجرد أن تحتوي أي فئة في أي مكان داخل الشجرة على فئة حفيدة، تقوم صفحة الفئات الرئيسية بتغيير وضع العرض: بدلاً من الشبكة المدمجة من المربعات (الفئة الأصلية مع أطفالها المباشرين مدرجين داخلها)، يتم عرض جميع الفئات كقائمة طويلة ذات عمود واحد. هذا يجعل الصفحة الرئيسية طويلة للغاية وصعبة المسح لـ ~1,200 موظف لدينا.

يبدو أن هذا يخضع لخاصية isGrandParent الموصوفة في هذا الموضوع ذي الصلة: When you add an additional nesting level, all categories, including child categories, are displayed on the categories page

ما نريده

خيارنا المفضل: طريقة للحفاظ على تخطيط الصفحة الرئيسية “المربعات” القياسي حتى عندما تحتوي الفئة على مستوى ترقيبي ثالث — على سبيل المثال، ببساطة بعدم عرض فئات الأحفاد على الصفحة الرئيسية (سيظل بإمكان الوصول إليها عبر صفحة الفئة الأصلية).

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

لماذا نطلب حلاً أصليًا/رسميًا

نحن على دراية بوجود حلول بديلة باستخدام مكونات السمة/CSS أو JS (مثل تجاوز isGrandParent عبر modifyClass) التي تمت مناقشتها في الموضوع الأقدم المرتبط أعلاه. نفضل عدم اتباع هذا المسار: ليس لدينا خبرة عميقة في الواجهة الأمامية داخل مؤسستنا، ونحن قلقون بشأن الآثار الجانبية غير المتوقعة أو التعطيل في تحديثات Discourse المستقبلية إذا تجاوزنا منطق العرض الأساسي بأنفسنا. سيكون الإعداد المدعوم أو الخيار الرسمي أكثر أمانًا لنا للصيانة على المدى الطويل.

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

سيساعدنا وجود طريقة مدعومة للتحكم في عرض الصفحة الرئيسية في هذه الحالات كثيرًا، ونحن متأكدون من أنه منذ عام 2021، قد يكون هناك حاجة لمستوى ثالث مخفي في منظمات أخرى أيضًا؟

تم إرفاق لقطات الشاشة: تخطيط صفحتنا الرئيسية ذات المستويين الحالي

وكيفية تعطلها حاليًا بمجرد إدخال المستوى الثالث.

5 إعجابات

لست متأكدًا، لكن هذا Customization > Theme component قد يكون قادرًا على تحقيق ما تبحث عنه، أو ربما بعد تعديله. كما أن المطوّر قد يكون منفتحًا على إضافة هذه الميزة أيضًا.

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

هذا طلب معقول، إذ قد يكون من الصعب موازنة تخطيط صفحة /categories إذا كانت هناك فئات قليلة تحتوي على مستويات متعددة من الفئات الفرعية.

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

لدينا الآن بعض الطرق الأحدث للتخصيص التي يمكننا العمل بها، وهي أسهل في الحفاظ على ثباتها. في هذه الحالة، يمكن أن يساعد محوّل القيمة (value transformer). لقد أضفتُ للتو محوّلًا هنا سيكون متاحًا قريبًا في التحديثات: DEV: Add a category-list-subcategories value transformer - Pull Request #42804 - discourse/discourse - GitHub

التجربة البسيطة تشبه ما يلي:

api.registerValueTransformer(
  "category-list-subcategories",
  ({ value, context }) =>
  context.page === "categories" && context.category.level >= 1 ? [] : value
);

هذا سيظهر مستوى واحد فقط من الفئات الفرعية. هناك خيارات أخرى متاحة باستخدام المحوّل الآن، لذا قمتُ بوضع مكوّن موضوع (theme component) يمكننا الحفاظ عليه لدعم هذه الخيارات.

لذلك، بمجرد تحديث Discourse، يمكنك تثبيت هذا المكوّن للتحكم في عدد الفئات الفرعية المعروضة في /categories وبعض قوائم الفئات الأخرى:

اضبط Categories page depth على 2 لإخفاء جميع فئات الأحفاد.

إعجابَين (2)

مرحبًا، شكرًا جزيلاً لك!

هل يمكنك التنبؤ بكيفية تصرف فئات المستوى الثاني؟ على سبيل المثال، هل ستعود إلى ترتيبها الأصلي بجانب بعضها البعض؟

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

نعم، سيبقى الترتيب كما هو… هذا في الأساس طريقة مدعومة لتجاوز isGrandParent

إليك صورة قبل/بعد من موقعي الاختباري

3 إعجابات