mcpField
U
umbraco-property-editor-schema

umbraco-property-editor-schema

github.com/umbraco開発27389 回インストール6 週間前に更新
リポジトリ

umbraco-property-editor-schema について

Umbraco のプロパティエディター UI と対になる、サーバー側スキーマの役割を解説するスキルです。検証、データ変換、レンダリングに応じて、組み込みスキーマとカスタム C# 実装を選ぶ方法を示します。

主な機能

  1. 01スキーマの役割とデータ処理の解説
  2. 02カスタムスキーマを作る条件
  3. 03組み込みスキーマのエイリアス一覧
  4. 04C# スキーマとコンバーターの例
  5. 05最新ドキュメントを確認する手順

活用シーン

  1. 01プロパティエディターのスキーマ選定
  2. 02独自のサーバー側検証の追加
  3. 03保存前のプロパティデータ変換
  4. 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 と対になります)。スキーマは、データの検証、保存形式、およびウェブサイトのレンダリング時にプロパティデータがどのように利用可能になるかを決定します。ほとんどのカスタムエディターは組み込みスキーマを使用できますが、特殊なデータ処理にはカスタムスキーマが必要です。

ドキュメント

実装前に必ず最新のドキュメントを取得してください:

カスタムスキーマを作成するタイミング

可能な限り組み込みスキーマを使用してください。以下の場合にカスタムスキーマを作成します:

  • カスタムのサーバー側検証が必要な場合
  • 保存前に特別なデータ変換が必要な場合
  • レンダリング用のカスタムプロパティ値コンバーターが必要な場合
  • 組み込みスキーマでは対応できない複雑なデータ構造が必要な場合

ワークフロー

  1. ドキュメントを取得 - 上記の URL に対して WebFetch を使用します
  2. 質問する - 組み込みスキーマで対応できますか?どのようなデータ検証が必要ですか?カスタム値コンバーターは必要ですか?
  3. ファイルを生成 - 必要に応じて C# スキーマクラスを作成するか、組み込みスキーマのエイリアスを使用します
  4. 説明 - 作成した内容とテスト方法を示します

組み込みスキーマのエイリアス

プロパティエディター UI マニフェストの propertyEditorSchemaAlias でこれらを使用します:

エイリアス用途
Umbraco.Plain.Stringシンプルな文字列、検証なし
Umbraco.Plain.Integerシンプルな整数
Umbraco.Plain.Decimal小数値
Umbraco.Plain.DateTime日付/時刻値
Umbraco.Plain.JsonJSON オブジェクト/配列
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;
    }
}

以上です!常に最新のドキュメントを取得し、例は最小限に保ち、完全に動作するコードを生成してください。

コメント