mcpField
U
umbraco-property-action

umbraco-property-action

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

关于 umbraco-property-action

umbraco-property-action 是面向 Umbraco 后台开发者的技能,用于为属性编辑器构建辅助操作。它指导创建基于清单的操作,包括转换属性值和打开模态框。

主要功能

  1. 01在属性标签旁添加按钮
  2. 02指定部分或全部属性编辑器
  3. 03读取和修改属性值
  4. 04从操作中打开模态框
  5. 05生成操作清单和类

适用场景

  1. 01为属性编辑器添加快捷操作
  2. 02转换属性的当前值
  3. 03从属性操作启动模态框

安装

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

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

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

详细介绍

Umbraco 属性操作

这是什么?

属性操作是显示在后台属性标签旁的按钮,可为属性编辑器提供辅助功能。点击后会展开并显示可用操作。属性操作让你无需修改现有属性编辑器,就能为其添加辅助功能,适用于快捷操作、转换或上下文相关的操作。

文档

实现前始终获取最新文档:

相关基础技能

  • 上下文 API:访问属性上下文以读取或修改值时

    • 参考技能:umbraco-context-api
  • 模态框:操作会打开模态对话框时

    • 参考技能:umbraco-modals

工作流

  1. 获取文档 - 对上述 URL 使用 WebFetch
  2. 提问 - 要针对哪些属性编辑器?要执行什么操作?
  3. 生成文件 - 根据最新文档创建清单和操作类
  4. 说明 - 展示创建的内容以及测试方法

最简示例

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

const manifest: ManifestPropertyAction = {
  type: 'propertyAction',
  alias: 'My.PropertyAction.Clear',
  name: 'Clear Value',
  api: () => import('./clear-action.js'),
  forPropertyEditorUis: ['Umb.PropertyEditorUi.TextBox', 'Umb.PropertyEditorUi.TextArea'],
  meta: {
    icon: 'icon-trash',
    label: 'Clear',
  },
  weight: 100,
};

export const manifests = [manifest];
操作实现(clear-action.ts)
import { UmbPropertyActionBase } from '@umbraco-cms/backoffice/property-action';
import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';

export class ClearPropertyAction extends UmbPropertyActionBase {
  constructor(host: UmbControllerHost, args: any) {
    super(host, args);
  }

  async execute() {
    const propertyContext = await this.getContext(UMB_PROPERTY_CONTEXT);
    propertyContext?.setValue('');
  }
}

export default ClearPropertyAction;
转换值的操作
import { UmbPropertyActionBase } from '@umbraco-cms/backoffice/property-action';
import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property';

export class UppercasePropertyAction extends UmbPropertyActionBase {
  async execute() {
    const propertyContext = await this.getContext(UMB_PROPERTY_CONTEXT);
    const currentValue = propertyContext?.getValue() as string;

    if (currentValue) {
      propertyContext?.setValue(currentValue.toUpperCase());
    }
  }
}

export default UppercasePropertyAction;
带模态框的操作
import { UmbPropertyActionBase } from '@umbraco-cms/backoffice/property-action';
import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property';
import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';

export class PickerPropertyAction extends UmbPropertyActionBase {
  async execute() {
    const propertyContext = await this.getContext(UMB_PROPERTY_CONTEXT);
    const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT);

    const modal = modalManager.open(this, MY_PICKER_MODAL, {
      data: {
        currentValue: propertyContext?.getValue(),
      },
    });

    const result = await modal.onSubmit();
    if (result?.value) {
      propertyContext?.setValue(result.value);
    }
  }
}

export default PickerPropertyAction;
针对所有属性编辑器
const manifest: ManifestPropertyAction = {
  type: 'propertyAction',
  alias: 'My.PropertyAction.Copy',
  name: 'Copy to Clipboard',
  api: () => import('./copy-action.js'),
  // Omit forPropertyEditorUis to target all editors
  meta: {
    icon: 'icon-documents',
    label: 'Copy',
  },
};

常见属性编辑器 UI 别名

  • Umb.PropertyEditorUi.TextBox
  • Umb.PropertyEditorUi.TextArea
  • Umb.PropertyEditorUi.RichText
  • Umb.PropertyEditorUi.Integer
  • Umb.PropertyEditorUi.Decimal
  • Umb.PropertyEditorUi.ContentPicker
  • Umb.PropertyEditorUi.MediaPicker

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

评论

支持 Markdown