关于 umbraco-package-view
umbraco-package-view 是面向 Umbraco 包开发者的技能,用于在“Packages”区域创建自定义界面面板。它说明如何将视图关联到对应包,并以模态框或面板实现。
主要功能
- 01创建自定义包界面面板
- 02通过清单注册视图
- 03按包名称关联视图
- 04使用 Lit 或原生 JavaScript 实现
适用场景
- 01展示包的配置选项
- 02提供已安装包的相关信息
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ umbraco/ umbraco-cms-backoffice-skills --skill umbraco-package-view安装后在 Claude Code 中输入/umbraco-package-view确认已加载。
详细介绍
Umbraco 软件包视图
这是什么?
软件包视图为 Umbraco 中已安装的软件包提供自定义 UI 面板。它们会显示在软件包部分,供软件包开发者为其软件包创建专属的配置或信息页面。用户点击已安装的软件包时,软件包视图会以模态框或面板的形式显示。
文档
实现前,请务必获取最新文档:
- Foundation:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/foundation
- Extension Registry:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-registry
- Umbraco Element:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/foundation/umbraco-element
相关 Foundation 技能
-
Umbraco Element:用于创建 UI 组件的基类
- 参考技能:
umbraco-umbraco-element
- 参考技能:
-
Modals:软件包视图会在模态框上下文中显示
- 参考技能:
umbraco-modals
- 参考技能:
工作流
- 获取文档 - 使用 WebFetch 获取上述 URL 的内容
- 询问问题 - 使用什么软件包?有哪些配置选项?
- 生成文件 - 根据最新文档创建清单 + 元素
- 说明 - 展示创建的内容以及测试方法
最简示例
清单(manifests.ts)
import type { ManifestPackageView } from '@umbraco-cms/backoffice/packages';
export const manifests: Array<ManifestPackageView> = [
{
type: 'packageView',
alias: 'My.PackageView',
name: 'My Package View',
element: () => import('./my-package-view.element.js'),
meta: {
packageName: 'My Package',
},
},
];
使用 Lit 实现元素(my-package-view.element.ts)
import { html, customElement } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';
@customElement('my-package-view')
export class MyPackageViewElement extends UmbModalBaseElement {
override render() {
return html`
<umb-body-layout headline="My Package">
<uui-box>
<h2>Package Configuration</h2>
<p>Configure your package settings here.</p>
<uui-form>
<uui-form-layout-item>
<uui-label slot="label">Setting 1</uui-label>
<uui-input></uui-input>
</uui-form-layout-item>
</uui-form>
</uui-box>
<div slot="actions">
<uui-button @click=${this.#onClose} label="Close"></uui-button>
<uui-button look="primary" @click=${this.#onSave} label="Save"></uui-button>
</div>
</umb-body-layout>
`;
}
#onClose() {
this.modalContext?.reject();
}
#onSave() {
// Save logic here
this.modalContext?.submit();
}
}
export default MyPackageViewElement;
原生 JS 元素(my-package-view.js)
const template = document.createElement('template');
template.innerHTML = `
<umb-body-layout>
<h1 slot="header">My Package</h1>
<uui-box>
<p>Package information and settings</p>
</uui-box>
<uui-action-bar slot="footer-info">
<uui-button look="primary" type="button">Close</uui-button>
</uui-action-bar>
</umb-body-layout>
`;
export default class MyPackageViewElement extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
this.shadowRoot.appendChild(template.content.cloneNode(true));
this.shadowRoot.querySelector('uui-button').addEventListener('click', this.onClick.bind(this));
}
onClick() {
this.modalContext.close();
}
}
customElements.define('my-package-view', MyPackageViewElement);
接口参考
interface ManifestPackageView extends ManifestElement {
type: 'packageView';
meta: MetaPackageView;
}
interface MetaPackageView {
packageName: string; // Must match the package name in umbraco-package.json
}
软件包集成
软件包视图通过将 meta.packageName 与软件包在 umbraco-package.json 中的名称相匹配来关联:
{
"$schema": "../../umbraco-package-schema.json",
"name": "My Package",
"version": "1.0.0",
"extensions": [
{
"type": "packageView",
"alias": "My.PackageView",
"name": "My Package View",
"element": "/App_Plugins/MyPackage/my-package-view.js",
"meta": {
"packageName": "My Package"
}
}
]
}
就是这样!务必获取最新文档,保持示例精简,并生成完整可运行的代码。
评论
支持 Markdown