إخفاء الفئات الفرعية دون إخفاء مواضيعها في قائمة المواضيع؟

مرحبًا يا أصدقاء

هل توجد طريقة لـ “إخفاء” الفئات الفرعية من قوائم المواضيع وعرض الفئات الرئيسية أسفل عنوان الموضوع بدلاً منها؟

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

أود عرض الفئة الرئيسية أسفل عنوان الموضوع في قائمة المواضيع بدلاً من الفئة الفرعية.

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

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

قالب العناصر في قائمة المواضيع يعرض فقط رابط فئة الموضوع، على النحو التالي:
{{category-link topic.category}}

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

{{#if topic.category.parentCategory}}
  {{category-link topic.category.parentCategory}}
{{else}}
  {{category-link topic.category}}
{{/if}}

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

يمكن أن تكون هناك طريقة أخرى وهي عرض روابط الفئة والفئة الأب دائمًا، ثم إخفاء الروابط غير المرغوب فيها باستخدام CSS.

إعجابَين (2)

لم أتحقق، لكن أظن أنه يجب أن تتمكن من إخفائها باستخدام CSS.

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

هل أحتاج إلى تعديل القالب لهذه الطريقة أيضًا؟ لم أستطع العثور على إعداد موقع مماثل في لوحة الإدارة الخاصة بي.

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

لا توجد إعدادات موقع لتعديل القوالب، وسأرسل لك الكود لتجربته عبر الرسائل الخاصة.

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

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

ما يمكنك فعله هو التراجع خطوة وتعديل البيانات التي يتم تمريرها إلى القالب بدلاً من ذلك.

topic-list-item هو مكون Ember، لذا يمكنك استخدام api.modifyClass لإجراء التغييرات التي تريدها.

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

<script type="text/discourse-plugin" version="0.8">
  const { on } = require("discourse-common/utils/decorators");

  // معرفات الفئات الرئيسية
  const targetCategoryIds = [9, 15, 50];

  const useParentCategory = function () {
    const parentCategory = this.attrs.topic.category.parentCategory;
    const switchToParent = parentCategory && targetCategoryIds.includes(parentCategory.id)

    if (switchToParent) {
      this.attrs.topic.set("category", parentCategory);
    }
  };

  api.modifyClass("component:topic-list-item", {
    @on("didReceiveAttrs")
    setCategory() {
      useParentCategory.call(this);
    }
  });

  api.modifyClass("component:latest-topic-list-item", {
    @on("didReceiveAttrs")
    setCategory() {
      useParentCategory.call(this);
    }
  });
</script>
4 إعجابات

هذا رائع!

هل توجد أي طريقة للحد منه إلى فئة أو فئات محددة؟

طريقتان مختلفتان لمعالجة هذه المسألة بناءً على ما تحاول تحقيقه. ما هي النتيجة المطلوبة؟

  1. يجب أن يكون لهذا السلوك جميع الفئات الفرعية تحت الفئة الرئيسية “foo”.
  2. يجب أن يكون لهذا السلوك بعض الفئات الفرعية تحت فئات رئيسية مختلفة.

@Johani

هذا هو ما نبحث عنه

لقد قمت بتعديل المقطع أعلاه ليعكس هذا التغيير. كل ما عليك فعله هو إضافة معرفات الفئة الأصلية إلى مصفوفة targetCategoryIds. يمكنك العثور على معرف الفئة بزيارة صفحة الفئة والتحقق من عنوان URL.

 https://meta.discourse.org/c/support/6

الرقم “6” في نهاية عنوان URL أعلاه هو معرف فئة الدعم هنا في ميتا.

3 إعجابات

شكرًا لك على مشاركة هذا يا @Johani! أنا في بداية رحلتي مع Ember.. أنتم حقًا داعمون جدًا! :pray: :relaxed:

إعجابَين (2)

هذا رائع! شكرًا جزيلاً للمساعدة السريعة.

إعجابَين (2)

هذا رائع!

Two Thumbs Up

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

إعجابَين (2)

هذا رائع حقًا. شكرًا لك، وشكرًا لمن يمنحك الوقت للقيام بذلك.

:+1:

إعجابَين (2)

@Johani أين بالضبط يجب أن أضع هذا المقطع البرمجي؟
لقد حاولت وضعه داخل وسم </head> وفي جزء الرأس (header) لمكوّن السمة الذي أحتفظ فيه بكل ملفات CSS الخاصة بي. لكن قائمة المواضيع تُقطع بالضبط في المكان الذي يُفترض أن تُعرض فيه أول موضوع متأثر من الفئة الفرعية.

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

نعم، كانت هناك مشكلة في طريقة تعيين الفئة التي لم أنتبه لها محليًا. قمت بتعديل المقطع أعلاه، ويجب أن يعمل الآن.

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

<script type="text/discourse-plugin" version="0.8">
  const { on } = require("discourse-common/utils/decorators");

  const useParentCategory = function () {
    const parentCategory = this.attrs.topic.category.parentCategory;

    if (parentCategory) {
     this.attrs.topic.set("category", parentCategory);
    }
  };

  api.modifyClass("component:topic-list-item", {
    @on("didReceiveAttrs")
    setCategory() {
      useParentCategory.call(this);
    }
  });

  api.modifyClass("component:latest-topic-list-item", {
    @on("didReceiveAttrs")
    setCategory() {
      useParentCategory.call(this);
    }
  });
</script>
إعجابَين (2)

شكرًا لك @Johani على مساعدتك، نقدر ذلك حقًا!

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

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.