كيفية تكوين كائنات المصفوفة في الإضافة؟ هل استخدام json_schema مع type: objects؟

كيف يمكنني تكوين كائنات المصفوفة في الإضافة؟ لقد جربت json_schema، لكن تكوين خصائص الكائن لا يعمل مع محددات مثل category، حيث يمكن إدخال النص فقط. أما type: objects فلا يعمل على الإطلاق في تكوين الإضافة.

تكوين json_schema

  quectel_online_customer_category_customers:
    default: "[]"
    client: true
    json_schema: QuectelOnlineCustomer::SiteSettings::CategoryCustomersJsonSchema

plugins/quectel-online-customer/lib/quectel_online_customer/site_settings/category_customers_json_schema.rb

# frozen_string_literal: true

module QuectelOnlineCustomer
  module SiteSettings
    class CategoryCustomersJsonSchema
      def self.schema
        @schema ||= begin
          {
            type: "array",
            uniqueItems: true,
            default: [],
            items: {
              type: "object",
              title: "إعدادات خدمة العملاء حسب الفئة",
              additionalProperties: false, # منع إرسال حقول غير معرفة
              required: %w[category customers], # كلا الحقلين إلزاميان
              properties: {
                category: {
                  type: "category",
                  description: "فئة المنتدى المرتبطة",
                  label: "الفئة"
                },
                customers: {
                  type: "usernames", # مستخدمون متعددون كبديل لاسم المستخدم الواحد username
                  description: "حسابات خدمة العملاء المخصصة لهذه الفئة، تدعم الاختيار المتعدد",
                  label: "مستخدمو خدمة العملاء"
                }
              }
            }
          }
        end
      end
    end
  end
end

يجب أن يعمل type:objects في الإضافات! نستخدمه بأنفسنا هنا على سبيل المثال

https://github.com/discourse/discourse/blob/eba9a3b69cf637fccba1a00978f2269b4fccf9d4/plugins/discourse-openid-connect/config/settings.yml#L59-L71

نعم، بالتأكيد يمكن ذلك. لكن type:objects لا يدعم أيضًا type:category. احتياجي هو اختيار الفئة والمجموعة.

أهلاً، إذن يتم إضافة إعدادات الكائن مباشرة إلى ملف settings.yml، ويجب تنسيقه بهذا الشكل:

oauth2_category_example:
    type: objects
    default: []
    area: "oauth2"
    schema:
      name: category_rule
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: اسم القاعدة
          description: تسمية توضيحية لهذه القاعدة
        category:
          type: categories
          required: true
          label: الفئة
          description: الفئة التي تنطبق عليها هذه القاعدة
          validations:
            max: 1
        groups:
          type: groups
          label: المجموعات
          description: المجموعات المرتبطة بهذه الفئة

مما سيؤدي إلى ظهور قائمة منسدلة للفئة بالشكل التالي

هل لا يدعم تحديد type:category كخيار واحد؟

وفقًا لهذا التكوين

quectel_online_customer_category_customer_group:
    type: objects
    default: []
    schema:
      name: "تصنيف مجموعات خدمة العملاء"
      identifier: name
      properties:
        name:
          type: string
          required: true
          label: الاسم
          description: الاسم
        category:
          type: categories
          required: true
          label: "التصنيف"
          description: "اسم التصنيف، يرجى الاطلاع على صفحة <a href=\"/categories\" target=\"_blank\">جميع التصنيفات</a>"
        group_name:
          type: groups
          required: true
          label: "اسم مجموعة خدمة العملاء"
          description: "اسم مجموعة خدمة العملاء، أحرف إنجليزية، يرجى الاطلاع على صفحة <a href=\"/admin/groups\" target=\"_blank\">مجموعات خدمة العملاء</a>"

لقد واجهت الخطأ التالي:

حدث خطأ:

- أثناء العرض:
  {{outlet}} لـ -top-level
    -top-level
      {{outlet}} لـ application
        application
          DiscourseRoot
            {{outlet}} لـ admin
              admin
                {{outlet}} لـ admin.schema
                  schema
                    SchemaSettingNewEditor
                      SchemaSettingField
                        SchemaSettingTypeCategories
                          CategorySelector

section-link.gjs:149
 تم محاولة إعادة العرض، لكن تطبيق Ember واجه خطأً غير قابل للاسترداد أثناء العرض. يجب إعادة تحميل التطبيق بعد إصلاح سبب الخطأ.
categories.gjs:13
 خطأ غير مُلتقط (في الوعد) TypeError: this.args.value?.map ليس دالة
    at SchemaSettingTypeCategories.<anonymous> (categories.gjs:13:9)

هل هذا مرتبط بإصداري؟

Discourse v2026.1.4 — Commits · discourse/discourse · GitHub — Ember v6.6.0

هل لديك أي إعدادات قديمة محفوظة في الإعدادات؟ هل يمكنك محاولة إعادة تعيينها إلى الافتراضي باستخدام زر إعادة التعيين إذا ظهر؟

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

آه، لست متأكدًا مما قد يسبب الخطأ هناك… لقد اختبرت خيار الفئات مع نوع الكائنات، لذا فأنا أعلم أنه يعمل، ولا ينبغي أن تكون هناك مشكلة مع نسختك. لا يزال لدي تساؤل حول ما إذا كان هناك شيء عالق في حالة سيئة في مكان ما، هل يمكنك تجربة إعداد منفصل باسم جديد فقط للاختبار؟ هل هذا الأمر موجود على GitHub أو في أي مكان آخر حتى أتمكن من تجربته؟

type:categories مقبول، بينما type:category غير مقبول.

إلا أن الإعدادات التالية تعمل بشكل جيد أيضًا في حال اختيار عنصر واحد فقط، وبالتالي لا حاجة إلى type:category.

category:
  type: categories
  required: true
  label: "الفئة"
  description: "اسم الفئة"
  validations:
	max: 1