umbraco-package-view
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseUmbraco Package View
Umbraco 包视图
What is it?
什么是包视图?
Package Views provide custom UI panels for installed packages in Umbraco. They appear in the Packages section and allow package developers to create dedicated configuration or information pages for their packages. When a user clicks on an installed package, the package view is displayed as a modal or panel.
Package View为Umbraco中已安装的包提供自定义UI面板。它们出现在“包”版块中,允许包开发者为其包创建专用的配置或信息页面。当用户点击已安装的包时,包视图会以模态框或面板的形式显示。
Documentation
文档参考
Always fetch the latest docs before implementing:
Related Foundation Skills
相关基础技能
-
Umbraco Element: Base class for creating UI components
- Reference skill:
umbraco-umbraco-element
- Reference skill:
-
Modals: Package views are displayed in modal context
- Reference skill:
umbraco-modals
- Reference skill:
-
Umbraco Element:用于创建UI组件的基类
- 参考技能:
umbraco-umbraco-element
- 参考技能:
-
模态框:包视图在模态框环境中显示
- 参考技能:
umbraco-modals
- 参考技能:
Workflow
工作流程
- Fetch docs - Use WebFetch on the URLs above
- Ask questions - What package? What configuration options?
- Generate files - Create manifest + element based on latest docs
- Explain - Show what was created and how to test
- 获取文档 - 使用WebFetch访问上述URL
- 提出问题 - 要开发哪个包?需要哪些配置选项?
- 生成文件 - 根据最新文档创建清单(manifest)和元素文件
- 说明解释 - 展示创建的内容以及测试方法
Minimal Examples
最简示例
Manifest (manifests.ts)
清单文件 (manifests.ts)
typescript
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',
},
},
];typescript
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',
},
},
];Element Implementation with Lit (my-package-view.element.ts)
基于Lit的元素实现 (my-package-view.element.ts)
typescript
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;typescript
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;Vanilla JS Element (my-package-view.js)
Vanilla JS 元素实现 (my-package-view.js)
javascript
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);javascript
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 Reference
接口参考
typescript
interface ManifestPackageView extends ManifestElement {
type: 'packageView';
meta: MetaPackageView;
}
interface MetaPackageView {
packageName: string; // Must match the package name in umbraco-package.json
}typescript
interface ManifestPackageView extends ManifestElement {
type: 'packageView';
meta: MetaPackageView;
}
interface MetaPackageView {
packageName: string; // 必须与umbraco-package.json中的包名匹配
}Package Integration
包集成
The package view is linked by matching with your package's name in :
meta.packageNameumbraco-package.jsonjson
{
"$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"
}
}
]
}That's it! Always fetch fresh docs, keep examples minimal, generate complete working code.
通过将与中的包名匹配,即可关联包视图:
meta.packageNameumbraco-package.jsonjson
{
"$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"
}
}
]
}完成!请始终获取最新文档,保持示例简洁,生成可直接运行的完整代码。