نقدم الآن نوعًا جديدًا type: objects إلى الأدوات المدعومة لإعدادات الثيمات والذي يمكن استخدامه لاستبدال نوع json_schema الحالي الذي نعتزم إيقافه قريبًا.
تعريف إعداد ثيم من نوع objects
لإنشاء إعداد ثيم من نوع objects، أولاً عرّف مفتاحًا رئيسيًا تمامًا مثل أي إعداد ثيم والذي سيُستخدم كاسم للإعداد.
links: ...
بعد ذلك، أضف الكلمات المفتاحية type و default و schema إلى الإعداد.
links:
type: objects
default: []
schema: ...
يشير type: objects إلى أن هذا سيكون إعدادًا من نوع objects بينما يحدد الترميز default: [] القيمة الافتراضية للإعداد كمصفوفة فارغة. لاحظ أنه يمكن أيضًا تعيين القيمة الافتراضية كمصفوفة من الكائنات والتي سنوضحها بمجرد تعريف schema.
لتعريف المخطط (schema)، أولاً عرّف name للمخطط كما يلي:
links:
type: objects
default: []
schema:
name: link
بعد ذلك، سنضيف الكلمة المفتاحية properties إلى المخطط مما سيسمح لنا بتعريف والتحقق من كيفية ظهور كل كائن.
links:
type: objects
default: []
schema:
name: link
properties:
name: ...
في المثال أعلاه، نحن نذكر أن كائن link يحتوي على خاصية name. لتعريف نوع البيانات المتوقع، يجب على كل خاصية تعريف الكلمة المفتاحية type.
links:
type: objects
default: []
schema:
name: link
properties:
name:
type: string
تعريف المخطط أعلاه يوضح أن كائن link يحتوي على خاصية name من نوع string مما يعني أن القيم النصية فقط سيتم قبولها لهذه الخاصية. حاليًا الأنواع التالية مدعومة:
string: قيمة الخاصية مخزنة كنص.integer: قيمة الخاصية مخزنة كعدد صحيح.float: قيمة الخاصية مخزنة كعدد عشري.boolean: قيمة الخاصية هيtrueأوfalse.upload: قيمة الخاصية هي رابط المرفق.enum: يجب أن تكون قيمة الخاصية واحدة من القيم المحددة في الكلمة المفتاحيةchoices.links: type: objects default: [] schema: name: link properties: name: type: enum choices: - name 1 - name 2 - name 3categories: قيمة الخاصية هي مصفوفة من معرفات الفئات الصالحة.groups: قيمة الخاصية هي مصفوفة من معرفات المجموعات الصالحة.tags: قيمة الخاصية هي مصفوفة من أسماء الوسوم الصالحة.
مع تعريف المخطط، يمكن الآن تعيين القيمة الافتراضية للإعداد عن طريق تعريف مصفوفة في yaml كما يلي:
links:
type: objects
default:
- name: link 1
title: link 1 title
- name: link 2
title: link 2 title
schema:
name: link
properties:
name:
type: string
title:
type: string
الخصائص المطلوبة
جميع الخصائص المحددة هي اختيارية بشكل افتراضي. لوضع علامة على خاصية كمطلوبة، ببساطة قم بتعليق الخاصية بـ required: true. يمكن أيضًا وضع علامة على خاصية كاختيارية عن طريق تعليق الخاصية بـ required: false.
links:
type: objects
default: []
schema:
name: link
properties:
name:
type: string
required: true
title:
type: string
required: false
التحقق المخصص
لبعض أنواع الخصائص، هناك دعم مدمج للتحقق المخصص والذي يمكن الإعلان عنه عن طريق تعليق الخاصية بالكلمة المفتاحية validations.
links:
type: objects
default: []
schema:
name: link
properties:
name:
type: string
required: true
validations:
min: 1
max: 2048
url: true
التحقق لأنواع string
min_length: الحد الأدنى لطول الخاصية. يجب أن تكون قيمة الكلمة المفتاحية عددًا صحيحًا.max_length: الحد الأقصى لطول الخاصية. يجب أن تكون قيمة الكلمة المفتاحية عددًا صحيحًا.url: يتحقق من أن الخاصية هي عنوان URL صالح. يمكن أن تكون قيمة الكلمة المفتاحيةtrue/false.
التحقق لأنواع integer و float
min: الحد الأدنى لقيمة الخاصية. يجب أن تكون قيمة الكلمة المفتاحية عددًا صحيحًا.max: الحد الأقصى لقيمة الخاصية. يجب أن تكون قيمة الكلمة المفتاحية عددًا صحيحًا.
التحقق لأنواع tags و groups و categories
min: الحد الأدنى لعدد السجلات للخاصية. يجب أن تكون قيمة الكلمة المفتاحية عددًا صحيحًا.max: الحد الأقصى لعدد السجلات للخاصية. يجب أن تكون قيمة الكلمة المفتاحية عددًا صحيحًا.
حل عضوية المجموعة
يمكن لإعدادات الكائنات حل خصائص type: groups إلى قيمة منطقية للمستخدم الحالي. هذا مفيد عندما يحتاج كود الثيم فقط إلى معرفة ما إذا كان المستخدم الحالي في إحدى المجموعات المحددة، لأن currentUser.groups يتضمن فقط المجموعات المرئية للمستخدم.
أضف resolve_group_membership: true إلى خاصية groups:
menu_sections:
type: objects
default:
- name: section 1
groups:
- 1
- 3
schema:
name: menu section
properties:
name:
type: string
groups:
type: groups
resolve_group_membership: true
لا يزال واجهة المستخدم الإدارية وقيمة الإعداد المخزنة تستخدم مصفوفة groups الأصلية. في كائن settings وقت التشغيل في الواجهة الأمامية، يقوم Discourse بإزالة معرفات المجموعات من كل كائن وإضافة قيمة منطقية بنفس اسم الخاصية مع بادئة user_in_:
for (const section of settings.menu_sections) {
if (section.user_in_groups) {
// المستخدم في مجموعة واحدة على الأقل مختارة لهذا القسم.
}
}
هذا الخيار صالح فقط على خصائص مخطط الكائن مع type: groups. كما يعمل على مخططات الكائنات المتداخلة ومع المجموعات التلقائية مثل logged_in_users و anonymous_users.
هيكل الكائنات المتداخلة
can also have a property which contains an array of objects. In order to create a nested objects structure, a property can also be annotated with type: objects and the associated schema definition.
sections:
type: objects
default:
- name: section 1
links:
- name: link 1
url: /some/url
- name: link 2
url: /some/other/url
schema:
name: section
properties:
name:
type: string
required: true
links:
type: objects
schema:
name: link
properties:
name:
type: string
url:
type: string
وصف الإعداد والتعريب
لإضافة وصف للإعداد في اللغة en، قم بإنشاء ملف locales/en.yml بالتنسيق التالي المعطى إعداد الثيم من نوع objects التالي.
sections:
type: objects
default:
- name: section 1
links:
- name: link 1
url: /some/url
- name: link 2
url: /some/other/url
schema:
name: section
properties:
name:
type: string
required: true
links:
type: objects
schema:
name: link
properties:
name:
type: string
url:
type: string
en:
theme_metadata:
settings:
sections:
description: This is a description for the sections theme setting
schema:
properties:
name:
label: Name
description: The description for the property
links:
name:
label: Name
description: The description for the property
url:
label: URL
description: The description for the property
هذا المستند يخضع للتحكم بالإصدارات - اقترح التغييرات على github.



