mcpField
U
umbraco-property-value-preset

umbraco-property-value-preset

github.com/umbraco开发27387 次安装6 周前更新
代码仓库

关于 umbraco-property-value-preset

umbraco-property-value-preset 是用于创建 Umbraco 属性值预设的技能,指导开发者为属性编辑器设置默认值。它涵盖配置驱动或异步默认值,以及按权重组合多个预设。

主要功能

  1. 01创建属性值预设清单
  2. 02实现预设值 API
  3. 03设置静态或配置驱动的默认值
  4. 04支持异步默认值
  5. 05按权重排列多个预设

适用场景

  1. 01为新内容设置初始值
  2. 02根据编辑器配置生成默认值
  3. 03从 API 获取默认值
  4. 04按指定顺序组合预设

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/umbraco/umbraco-cms-backoffice-skills --skill umbraco-property-value-preset

安装后在 Claude Code 中输入/umbraco-property-value-preset确认已加载。

详细介绍

Umbraco 属性值预设

这是什么?

属性值预设会在用户创建新内容时提供默认值。它们通过 API 为特定属性编辑器提供预设值,从而使用合理的默认值简化内容创建。多个预设可以通过 weight 属性协同工作,逐步修改值。

文档

实施前务必获取最新文档:

工作流

  1. 获取文档 - 对上述 URL 使用 WebFetch
  2. 提问 - 使用哪个属性编辑器?默认值是什么?静态还是动态?
  3. 生成文件 - 根据最新文档创建清单和预设 API
  4. 说明 - 展示创建的内容以及测试方法

最小示例

清单(manifests.ts)
import type { ManifestPropertyValuePreset } from '@umbraco-cms/backoffice/extension-registry';

const manifest: ManifestPropertyValuePreset = {
  type: 'propertyValuePreset',
  alias: 'My.PropertyValuePreset.DefaultText',
  name: 'Default Text Preset',
  api: () => import('./default-text-preset.js'),
  forPropertyEditorUiAlias: 'Umb.PropertyEditorUi.TextBox',
};

export const manifests = [manifest];
预设实现(default-text-preset.ts)
import type { UmbPropertyValuePresetApi } from '@umbraco-cms/backoffice/property';

export class DefaultTextPreset implements UmbPropertyValuePresetApi {
  async processValue(value: unknown, config: unknown): Promise<unknown> {
    // Return default if no value exists
    return value ? value : 'Default text value';
  }

  destroy() {
    // Cleanup if needed
  }
}

export default DefaultTextPreset;
根据配置设置动态默认值
import type { UmbPropertyValuePresetApi, UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property';

export class DynamicPreset implements UmbPropertyValuePresetApi {
  async processValue(value: unknown, config: UmbPropertyEditorConfigCollection): Promise<unknown> {
    if (value) return value;

    // Use configuration to determine default
    const defaultFromConfig = config?.getValueByAlias('defaultValue');
    return defaultFromConfig || 'Fallback default';
  }

  destroy() {}
}

export default DynamicPreset;
异步默认值(例如,来自 API)
import type { UmbPropertyValuePresetApi } from '@umbraco-cms/backoffice/property';

export class ApiPreset implements UmbPropertyValuePresetApi {
  async processValue(value: unknown, config: unknown): Promise<unknown> {
    if (value) return value;

    // Fetch default from server
    const response = await fetch('/api/defaults/text');
    const data = await response.json();
    return data.defaultValue;
  }

  destroy() {}
}

export default ApiPreset;
按架构别名定位
const manifest: ManifestPropertyValuePreset = {
  type: 'propertyValuePreset',
  alias: 'My.PropertyValuePreset.JsonDefault',
  name: 'JSON Default Preset',
  api: () => import('./json-preset.js'),
  forPropertyEditorSchemaAlias: 'Umbraco.Plain.Json', // Target schema instead of UI
};
使用权重的多个预设
// First preset (runs first due to lower weight)
const basePreset: ManifestPropertyValuePreset = {
  type: 'propertyValuePreset',
  alias: 'My.PropertyValuePreset.Base',
  name: 'Base Preset',
  weight: 100,
  api: () => import('./base-preset.js'),
  forPropertyEditorUiAlias: 'Umb.PropertyEditorUi.TextBox',
};

// Second preset (runs after, can modify base value)
const enhancedPreset: ManifestPropertyValuePreset = {
  type: 'propertyValuePreset',
  alias: 'My.PropertyValuePreset.Enhanced',
  name: 'Enhanced Preset',
  weight: 200,
  api: () => import('./enhanced-preset.js'),
  forPropertyEditorUiAlias: 'Umb.PropertyEditorUi.TextBox',
};
日期默认值示例
export class TodayDatePreset implements UmbPropertyValuePresetApi {
  async processValue(value: unknown, config: unknown): Promise<unknown> {
    if (value) return value;
    return new Date().toISOString().split('T')[0]; // Today's date
  }

  destroy() {}
}

export default TodayDatePreset;

就是这样!务必获取最新文档,保持示例精简,并生成完整可用的代码。

评论

支持 Markdown