关于 umbraco-property-value-preset
umbraco-property-value-preset 是用于创建 Umbraco 属性值预设的技能,指导开发者为属性编辑器设置默认值。它涵盖配置驱动或异步默认值,以及按权重组合多个预设。
主要功能
- 01创建属性值预设清单
- 02实现预设值 API
- 03设置静态或配置驱动的默认值
- 04支持异步默认值
- 05按权重排列多个预设
适用场景
- 01为新内容设置初始值
- 02根据编辑器配置生成默认值
- 03从 API 获取默认值
- 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 属性协同工作,逐步修改值。
文档
实施前务必获取最新文档:
- 主要文档:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-types/property-value-preset
- 属性编辑器:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/property-editors
- 基础: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
- 提问 - 使用哪个属性编辑器?默认值是什么?静态还是动态?
- 生成文件 - 根据最新文档创建清单和预设 API
- 说明 - 展示创建的内容以及测试方法
最小示例
清单(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