كل شيء ممكن من حيث المبدأ.
على سبيل المثال، قمتُ سابقًا بإنشاء تسلسل هرمي للفئات يتكون من 3 مستويات، ويدعم أيضًا تقاطعات متعددة للوسوم على مستوى الفئة.
هيكل مسار التسلسل الهرمي للفئات المكون من 3 مستويات مع تقاطعات متعددة للوسوم
scope "/multi" do
constraints(tag_id: /[^\/]+?/, format: /json|rss/) do
get '/c/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_category_show'
get '/c/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_parent_category_category_show'
get '/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_grandparent_category_category_show'
Discourse.filters.each do |filter|
get "/c/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_category_show_#{filter}"
get "/c/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_parent_category_category_show_#{filter}"
get "/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_grandparent_category_category_show_#{filter}"
end
end
end
هذا أكثر تعقيدًا مما أعتقد أنك تريد فعله، لكنه ليس مستدامًا ما لم تكن مستعدًا لاستثمار الكثير من الوقت أو الموارد لدعمه. ومن المرجح أن ينكسر في مرحلة ما عند تغيير Discourse القياسي.
مع هذا السياق، هناك أمران يجب فهمهما بخصوص هيكل مسار الفئة/الوسم في Discourse القياسي:
-
تقاطعات الوسوم المتعددة ممكنة فقط على مستوى الموقع بأكمله؛ وليس على مستوى الفئة، أي أنه لا توجد مسارات في Discourse القياسي لعرض قائمة بالمواضيع تحتوي على مواضيع في فئة محددة ومع أكثر من وسم محدد. إذا كنت ترغب في ذلك، فستحتاج إلى إضافة المسار.
-
تقاطعات الفئات غير ممكنة. أي أنه لا يوجد مسار في Discourse لعرض مواضيع من فئتين على نفس المستوى (أي فئتين أبويتين أو فئتين فرعيتين).
لا يزال بإمكانك تحقيق نظام مكون من 4 مستويات (وهو ما يبدو أنه هدفك) دون إجراء إضافات كبيرة على جانب الخادم.
على سبيل المثال، يمكنك استخدام الوسوم حصريًا لتمثيل المستويات الأربعة. https://thepavilion.io/tags/intersection/events/bug/to-do/high يمثل التقاطع بين الوسوم: events و bug و to-do و high على Pavilion. يمكنك استخدام 4 قوائم منسدلة، واحدة لكل مجموعة وسوم تُستمد منها هذه الوسوم، مثل:
[plugin] [type] [status] [importance]
بمجرد أن تحدد كيفية هيكلة تسلسلك الهرمي ضمن هيكل مسار Discourse الحالي، فإن باقي الأشياء التي ذكرتها هي مجرد تعديلات على جانب العميل وهي (نسبيًا) مباشرة.