テーマ設定のサポート対象型 に新しい type: objects を導入しました。これにより、近日中に廃止を予定している既存の json_schema 型を置き換えることができます。
objects 型のテーマ設定の定義
objects 型のテーマ設定を作成するには、まず設定名として使用されるトップレベルのキーを、他のテーマ設定と同様に定義します。
links: ...
```\n
次に、設定に `type`、`default`、`schema` キーワードを追加します。
```yaml
links:
type: objects
default: []
schema: ...
type: objects はこれが objects 型の設定であることを示し、default: [] アノテーションは設定のデフォルト値を空の配列に設定します。デフォルト値は、schema の定義後に説明するオブジェクトの配列にも設定できることに注意してください。
スキーマを定義するには、まず以下のようにスキーマの name を定義します。
links:
type: objects
default: []
schema:
name: link
```\n
次に、スキーマに `properties` キーワードを追加し、各オブジェクトの外見と検証方法を定義します。
```yaml
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: プロパティの値は有効なタグ名の配列です。
スキーマが定義されると、設定のデフォルト値は以下のように 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 にはユーザーに見えるグループのみが含まれるからです。
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_ プレフィックスを付けたブール値を追加します。
for (const section of settings.menu_sections) {
if (section.user_in_groups) {
// ユーザーはこのセクションの選択されたグループのいずれかに属しています。
}
}
このオプションは、type: groups を持つオブジェクトスキーマプロパティでのみ有効です。ネストされたオブジェクトスキーマや、logged_in_users や anonymous_users のような自動グループでも動作します。
ネストされたオブジェクト構造
オブジェクトには、オブジェクトの配列を含むプロパティを持つこともできます。ネストされたオブジェクト構造を作成するには、プロパティに 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 をご利用ください。



