mcpField
U
umbraco-tree-item

umbraco-tree-item

github.com/umbraco设计与 UI27379 次安装6 周前更新
代码仓库

关于 umbraco-tree-item

面向开发者的技能,用于定制 Umbraco 后台树结构和导航中的实体显示。它说明何时使用标准呈现、何时需要自定义上下文,并提供清单及相关实现流程。

主要功能

  1. 01按实体类型定制树项目显示
  2. 02自定义图标、标签和徽章
  3. 03通过自定义上下文添加行为
  4. 04提供清单与上下文示例

适用场景

  1. 01根据项目状态显示图标
  2. 02在树项目中添加徽章或补充标签
  3. 03实现自定义点击或拖放行为

安装

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

$npx skills add https://github.com/umbraco/umbraco-cms-backoffice-skills --skill umbraco-tree-item

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

详细介绍

Umbraco 树项目

这是什么?

树项目定义了如何在 Umbraco 后台的树形结构中呈现实例。它们控制侧边栏和导航树中项目的视觉呈现和行为。树项目与实体类型相关联,并且可以进行自定义,以便为特定实体类型显示其他信息、图标或自定义呈现效果。

文档

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

何时使用自定义树项目上下文

大多数树项目使用 kind: 'default',不需要自定义上下文。仅在以下情况创建自定义上下文:

  • 自定义图标逻辑 - 根据项目状态动态显示图标
  • 自定义标签或徽标 - 添加其他视觉信息
  • 特殊呈现 - 为特定实体类型提供独特行为
  • 其他项目行为 - 点击处理程序、拖放等

如果只需要标准树项目,请使用 kind: 'default',无需自定义上下文。

相关基础技能

  • 树:树项目在树形结构中工作

    • 参考技能:umbraco-tree
    • IMPORTANT:树存储在 Umbraco 14 中已弃用,并在 Umbraco 18 中移除,详情请参阅该技能
  • 仓储模式:加载树数据时使用

    • 参考技能:umbraco-repository-pattern
  • 上下文 API:访问树上下文时使用

    • 参考技能:umbraco-context-api

工作流

  1. 获取文档 - 对上述 URL 使用 WebFetch
  2. 提出问题 - 有哪些实体类型?需要什么自定义呈现?
  3. 生成文件 - 创建清单 + 可选的元素/上下文
  4. 说明 - 展示创建了什么以及如何测试

最简示例

基本清单 (manifests.ts)
export const manifests: Array<UmbExtensionManifest> = [
  {
    type: 'treeItem',
    kind: 'default',
    alias: 'My.TreeItem',
    name: 'My Tree Item',
    forEntityTypes: ['my-entity-type'],
  },
];
带上下文的自定义树项目
import { MY_ENTITY_TYPE, MY_ROOT_ENTITY_TYPE } from '../entity.js';

export const manifests: Array<UmbExtensionManifest> = [
  {
    type: 'treeItem',
    kind: 'default',
    alias: 'My.TreeItem.Custom',
    name: 'My Custom Tree Item',
    forEntityTypes: [MY_ENTITY_TYPE, MY_ROOT_ENTITY_TYPE],
    api: () => import('./my-tree-item.context.js'),
  },
];
树项目上下文 (my-tree-item.context.ts)
import { UmbDefaultTreeItemContext } from '@umbraco-cms/backoffice/tree';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import type { UmbTreeItemModel, UmbTreeRootModel } from '@umbraco-cms/backoffice/tree';

export class MyTreeItemContext extends UmbDefaultTreeItemContext<
  UmbTreeItemModel,
  UmbTreeRootModel
> {
  constructor(host: UmbControllerHost) {
    super(host);
  }

  // Override to customize icon
  override async getIcon() {
    const item = this.getTreeItem();
    if (item?.hasChildren) {
      return 'icon-folder';
    }
    return 'icon-document';
  }

  // Override to add custom labels/badges
  override async getLabel() {
    const item = this.getTreeItem();
    return item?.name ?? 'Unknown';
  }
}

export { MyTreeItemContext as api };
包含树项目的完整树
import { MY_ENTITY_TYPE, MY_ROOT_ENTITY_TYPE } from './entity.js';
import { MY_TREE_ALIAS, MY_TREE_REPOSITORY_ALIAS } from './constants.js';

export const manifests: Array<UmbExtensionManifest> = [
  // Tree definition
  {
    type: 'tree',
    kind: 'default',
    alias: MY_TREE_ALIAS,
    name: 'My Tree',
    meta: {
      repositoryAlias: MY_TREE_REPOSITORY_ALIAS,
    },
  },
  // Tree item for the entities
  {
    type: 'treeItem',
    kind: 'default',
    alias: 'My.TreeItem',
    name: 'My Tree Item',
    forEntityTypes: [MY_ROOT_ENTITY_TYPE, MY_ENTITY_TYPE],
  },
];

接口参考

interface ManifestTreeItem extends ManifestElementAndApi<UmbControllerHostElement, UmbTreeItemContext> {
  type: 'treeItem';
  forEntityTypes: Array<string>;  // Entity types this tree item renders
}

常见实体类型

具有树项目的内置实体类型:

  • document - 内容节点
  • document-root - 内容根节点
  • media - 媒体项目
  • media-root - 媒体根节点
  • member - 成员
  • data-type - 数据类型
  • document-type - 文档类型
  • template - 模板

种类

kind: 'default' 使用标准树项目呈现方式。可以创建自定义种类以实现专门的呈现效果。

最佳实践

  • 为不同实体类型使用合适的图标
  • 考虑异步数据的加载状态
  • 保持树项目轻量,以提升性能
  • 使用实体类型常量确保类型安全

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

评论

支持 Markdown