umbraco-property-editor-schema について
Umbraco のプロパティエディター UI と対になる、サーバー側スキーマの役割を解説するスキルです。検証、データ変換、レンダリングに応じて、組み込みスキーマとカスタム C# 実装を選ぶ方法を示します。
主な機能
- 01スキーマの役割とデータ処理の解説
- 02カスタムスキーマを作る条件
- 03組み込みスキーマのエイリアス一覧
- 04C# スキーマとコンバーターの例
- 05最新ドキュメントを確認する手順
活用シーン
- 01プロパティエディターのスキーマ選定
- 02独自のサーバー側検証の追加
- 03保存前のプロパティデータ変換
- 04レンダリング用値コンバーターの作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ umbraco/ umbraco-cms-backoffice-skills --skill umbraco-property-editor-schemaインストール後、Claude Code で/umbraco-property-editor-schemaを入力して読み込まれたか確認します。
詳細
Umbraco プロパティエディタースキーマ
これは何ですか?
プロパティエディタースキーマは、プロパティエディターのサーバー側メタデータと構成構造を定義するものです。つまり、データがどのように保存され、処理されるかの「設計図」です。これはプロパティエディターの半分を構成します(プロパティエディター UI と対になります)。スキーマは、データの検証、保存形式、およびウェブサイトのレンダリング時にプロパティデータがどのように利用可能になるかを決定します。ほとんどのカスタムエディターは組み込みスキーマを使用できますが、特殊なデータ処理にはカスタムスキーマが必要です。
ドキュメント
実装前に必ず最新のドキュメントを取得してください:
- メインドキュメント: https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/property-editors
- チュートリアル: https://docs.umbraco.com/umbraco-cms/extend-your-project/tutorials/creating-a-property-editor
- 基礎: https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/foundation
- 拡張機能レジストリ: https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-registry
カスタムスキーマを作成するタイミング
可能な限り組み込みスキーマを使用してください。以下の場合にカスタムスキーマを作成します:
- カスタムのサーバー側検証が必要な場合
- 保存前に特別なデータ変換が必要な場合
- レンダリング用のカスタムプロパティ値コンバーターが必要な場合
- 組み込みスキーマでは対応できない複雑なデータ構造が必要な場合
ワークフロー
- ドキュメントを取得 - 上記の URL に対して WebFetch を使用します
- 質問する - 組み込みスキーマで対応できますか?どのようなデータ検証が必要ですか?カスタム値コンバーターは必要ですか?
- ファイルを生成 - 必要に応じて C# スキーマクラスを作成するか、組み込みスキーマのエイリアスを使用します
- 説明 - 作成した内容とテスト方法を示します
組み込みスキーマのエイリアス
プロパティエディター UI マニフェストの propertyEditorSchemaAlias でこれらを使用します:
| エイリアス | 用途 |
|---|---|
Umbraco.Plain.String | シンプルな文字列、検証なし |
Umbraco.Plain.Integer | シンプルな整数 |
Umbraco.Plain.Decimal | 小数値 |
Umbraco.Plain.DateTime | 日付/時刻値 |
Umbraco.Plain.Json | JSON オブジェクト/配列 |
Umbraco.TextBox | 最大長検証付きの文字列 |
Umbraco.TextArea | 複数行テキスト |
Umbraco.TrueFalse | ブール値 |
Umbraco.ColorPicker | 色の値 |
Umbraco.ContentPicker | コンテンツノード参照 |
Umbraco.MediaPicker | メディア参照 |
Umbraco.MultiUrlPicker | 複数の URL リンク |
Umbraco.Tags | タグコレクション |
Umbraco.RichText | リッチテキスト HTML |
最小限の例
組み込みスキーマの使用(最も一般的)
{
"type": "propertyEditorUi",
"alias": "My.PropertyEditorUi.Custom",
"name": "My Custom Editor",
"element": "/App_Plugins/MyEditor/editor.js",
"meta": {
"propertyEditorSchemaAlias": "Umbraco.Plain.String"
}
}
カスタムスキーマ(C#)- 必要な場合のみ
using Umbraco.Cms.Core.IO;
using Umbraco.Cms.Core.PropertyEditors;
using Umbraco.Cms.Core.Services;
namespace MyPackage.PropertyEditors;
[DataEditor(
alias: "My.PropertyEditor.Custom",
name: "My Custom Editor",
view: "~/App_Plugins/MyEditor/editor.html")]
public class MyPropertyEditor : DataEditor
{
private readonly IIOHelper _ioHelper;
private readonly IEditorConfigurationParser _editorConfigurationParser;
public MyPropertyEditor(
IDataValueEditorFactory dataValueEditorFactory,
IIOHelper ioHelper,
IEditorConfigurationParser editorConfigurationParser)
: base(dataValueEditorFactory)
{
_ioHelper = ioHelper;
_editorConfigurationParser = editorConfigurationParser;
SupportsReadOnly = true;
}
protected override IConfigurationEditor CreateConfigurationEditor() =>
new MyConfigurationEditor(_ioHelper, _editorConfigurationParser);
}
カスタム構成エディター
using Umbraco.Cms.Core.IO;
using Umbraco.Cms.Core.PropertyEditors;
using Umbraco.Cms.Core.Services;
namespace MyPackage.PropertyEditors;
public class MyConfigurationEditor : ConfigurationEditor<MyConfiguration>
{
public MyConfigurationEditor(
IIOHelper ioHelper,
IEditorConfigurationParser editorConfigurationParser)
: base(ioHelper, editorConfigurationParser)
{
}
}
public class MyConfiguration
{
[ConfigurationField("maxItems", "Maximum Items", "number")]
public int MaxItems { get; set; } = 10;
[ConfigurationField("allowNull", "Allow Empty", "boolean")]
public bool AllowNull { get; set; } = true;
}
カスタム値コンバーター
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PropertyEditors;
namespace MyPackage.PropertyEditors;
public class MyValueConverter : PropertyValueConverterBase
{
public override bool IsConverter(IPublishedPropertyType propertyType)
=> propertyType.EditorAlias == "My.PropertyEditor.Custom";
public override Type GetPropertyValueType(IPublishedPropertyType propertyType)
=> typeof(MyModel);
public override object? ConvertSourceToIntermediate(
IPublishedElement owner,
IPublishedPropertyType propertyType,
object? source,
bool preview)
{
if (source is string json && !string.IsNullOrEmpty(json))
{
return JsonSerializer.Deserialize<MyModel>(json);
}
return null;
}
}
以上です!常に最新のドキュメントを取得し、例は最小限に保ち、完全に動作するコードを生成してください。
コメント
Markdown 対応