테마 설정에 사용할 수 있는 새로운 type: objects를 지원되는 유형 목록에 도입합니다. 이 유형은 곧 비추천(deprecate)될 예정인 기존 json_schema 유형을 대체하는 데 사용할 수 있습니다.
objects 유형 테마 설정 정의
objects 유형 테마 설정을 만들려면 먼저 설정 이름으로 사용할 최상위 키를 다른 테마 설정과 마찬가지로 정의합니다.
links: ...
이제 설정에 type, default, schema 키워드를 추가합니다.
links:
type: objects
default: []
schema: ...
type: objects는 이 설정이 objects 유형임을 나타내며, default: [] 주석은 설정의 기본값을 빈 배열로 설정합니다. 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 객체가 string 유형의 name 속성을 가진다고 명시하며, 이는 해당 속성에 문자열 값만 허용됨을 의미합니다. 현재 지원되는 유형은 다음과 같습니다:
string: 속성 값이 문자열로 저장됩니다.integer: 속성 값이 정수로 저장됩니다.float: 속성 값이 부동소수점으로 저장됩니다.boolean: 속성 값은true또는false입니다.upload: 속성 값은 첨부 파일 URL입니다.enum: 속성 값은choices키워드에 정의된 값 중 하나여야 합니다.links: type: objects default: [] schema: name: link properties: name: type: enum choices: - name 1 - name 2 - name 3categories: 속성 값은 유효한 카테고리 ID 배열입니다.groups: 속성 값은 유효한 그룹 ID 배열입니다.tags: 속성 값은 유효한 태그 이름 배열입니다.icon: 속성 값은 Discourse 아이콘 세트의 단일 아이콘 이름입니다. 선택된 아이콘은 스프라이트 시트에 자동으로 추가되므로 별도로 등록하지 않고도 렌더링할 수 있습니다.
스키마가 정의되면, 다음과 같이 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
빈 string, datetime, icon 값과 빈 categories, groups, tags 목록은 누락된 것으로 간주됩니다: 필수 속성은 이러한 값을 거부하고, 선택 속성은 검증을 건너뜁니다. false는 설정된 것으로 간주됩니다.
사용자 정의 검증
특정 속성 유형에는 validations 키워드를 사용하여 선언할 수 있는 내장 사용자 정의 검증 기능이 있습니다.
links:
type: objects
default: []
schema:
name: link
properties:
name:
type: string
required: true
validations:
min_length: 1
max_length: 2048
url: true
string 유형에 대한 검증
min_length: 속성의 최소 길이. 키워드 값은 정수여야 합니다.max_length: 속성의 최대 길이. 키워드 값은 정수여야 합니다.url: 속성이 유효한 URL인지 검증합니다. 키워드 값은true/false일 수 있습니다.
integer 및 float 유형에 대한 검증
min: 속성의 최소 값. 키워드 값은 정수여야 합니다.max: 속성의 최대 값. 키워드 값은 정수여야 합니다.
tags, groups, categories 유형에 대한 검증
min: 속성의 최소 레코드 수. 키워드 값은 정수여야 합니다.max: 속성의 최대 레코드 수. 키워드 값은 정수여야 합니다.
그룹 멤버십 해결
Object 설정은 현재 사용자를 위해 type: groups 속성을 boolean으로 해결할 수 있습니다. 이는 테마 코드가 현재 사용자가 설정된 그룹 중 하나에 속하는지 여부를 알기만 하면 되는 경우에 유용하며, currentUser.groups에는 사용자에게 표시되는 그룹만 포함되기 때문입니다.
groups 속성에 resolve_group_membership: true를 추가합니다:
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
관리자 UI와 저장된 설정 값은 여전히 원래 groups 배열을 사용합니다. 프론트엔드 런타임 settings 객체에서 Discourse는 각 객체에서 그룹 ID를 제거하고, user_in_ 접두사가 붙은 동일한 속성 이름의 boolean을 추가합니다:
for (const section of settings.menu_sections) {
if (section.user_in_groups) {
// User is in at least one selected group for this section.
}
}
이 옵션은 type: groups인 object 스키마 속성에서만 유효합니다. 중첩된 object 스키마 및 logged_in_users와 anonymous_users와 같은 자동 그룹에서도 작동합니다.
중첩된 objects 구조
객체는 객체 배열을 포함하는 속성을 가질 수도 있습니다. 중첩된 objects 구조를 만들려면 속성에 type: objects와 관련 schema 정의를 주석으로 추가할 수 있습니다.
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 로케일에서 설정에 설명을 추가하려면, 다음과 같은 objects 유형 테마 설정을 가정할 때 다음 형식의 locales/en.yml 파일을 생성합니다.
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에서 제안하십시오.



