如何限制Umbraco中父节点下可创建的子节点数量,仅允许创建1个?
Umbraco 限制父节点下子节点数量实现方法
首先明确结论:Umbraco 原生后台没有提供直接设置子节点数量上限的可视化配置项,该需求需要通过自定义代码实现,无需修改配置文件,适配所有主流Umbraco版本。
实现逻辑(适用于Umbraco 9及以上版本)
核心通过Umbraco自带的SendingContentNotification事件拦截节点创建操作,判断父节点下已有的子节点数量,达到上限就阻止创建:
- 第一步:新建自定义通知处理类,代码示例如下:
using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; public class LimitChildNodeHandler : INotificationHandler<SendingContentNotification> { private readonly IContentService _contentService; public LimitChildNodeHandler(IContentService contentService) { _contentService = contentService; } public void Handle(SendingContentNotification notification) { // 仅拦截新创建的节点 if (notification.Content.Id == 0) { var parentId = notification.Content.ParentId; // 若只需限制特定文档类型的父节点,可放开以下注释修改对应文档类型别名 // var parentNode = _contentService.GetById(parentId); // if (parentNode?.ContentType.Alias != "你要限制的父节点文档类型别名") return; _contentService.GetPagedChildren(parentId, 0, 1, out var totalChildrenCount); if (totalChildrenCount >= 1) { notification.CancelOperation(new EventMessage("创建失败", "该父节点下仅允许创建1个子节点", EventMessageType.Error)); } } } }
- 第二步:注册处理类到依赖注入容器,在项目的
Program.cs(Umbraco 10+)或Startup.cs文件中添加以下代码即可:builder.AddNotificationHandler<SendingContentNotification, LimitChildNodeHandler>();
如果是Umbraco 8及更早版本,原理完全一致,只需替换为ContentService.Saving事件做拦截即可,事件注册方式参考对应版本的官方事件规则即可。
内容的提问来源于stack exchange,提问作者TheAlbear
相关产品推荐
相关产品推荐

