根据对外部文档存储的查找设置umbraco节点名称

本文关键字:umbraco 设置 节点 查找 对外部 文档 存储 | 更新日期: 2023-09-27 18:23:44

当存在具有相同名称的现有节点时,我正试图复制Umbraco(Umbraco v7)更新节点名称的过程。

但在这种情况下,我正在构建一个归档过程,将节点从Umbraco数据库复制到归档数据库中。我面临的问题是试图使URL唯一,因为我需要对照我的存档进行查找,以确保节点名称是唯一的。

目前,当Umbraco保存事件被触发时,我正在启动一个自定义保存方法,该事件会根据存档查找名称并检查URL是否是唯一的

    protected override void ApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
    {
        ContentService.Saving += ContentService_Saving;
    }
    void ContentService_Saving(IContentService sender, Umbraco.Core.Events.SaveEventArgs<IContent> e)
    {
        // create the content global ID
        foreach (var entity in e.SavedEntities)
        {
            var url = Helper.GetNiceUrlPath(entity);
            // fetch all items from the database with that name + url
            var result = AppArchiver.GetContentByUrl(Helper.CreateUrlFromName(entity.Name)).ToList();                
            if(result.Any())
            {
                // do something here with the name if possible?
            }
            if (!entity.HasAppId())
            {
                entity.SetAppId();
            }
        }
    }

我无法将Name设置为其只读属性。。。我无法使用entity.SetValue("name", "blah (1)") 进行设置

那么,我做这件事的最佳选择是什么呢?有什么建议吗?因为我正在撞墙搜索Umbraco源代码,试图找出它们是如何做到的。

将这些节点存储在数据库中的原因是,每月将创建大约300个新节点,而在Umbraco中导航这些节点将是难以忍受的。

更新:好的,所以看起来Umbraco在将项目发布回后端保存之前,会在角度代码中进行URL唯一性检查。如果可能的话,我将不得不创建一个这样做的服务。

根据对外部文档存储的查找设置umbraco节点名称

我可能误解了这个问题,但与其试图复制流程,为什么不使用Umbraco已经创建的唯一url呢?

我在Document.BeforeSave事件上的Umbraco安装触发中设置了类似的设置。如果我尝试运行以下代码:

private void Document_BeforeSave(Document sender, global::umbraco.cms.businesslogic.PublishEventArgs e)
{
    var url = umbraco.library.NiceUrl(sender.Id);
}

然后url已经是唯一的,因为Umbraco已经确保在保存节点之前对其进行重命名。

好的,所以它看起来不可能通过umbraco的后端实现。我必须在umbraco前端angular代码中编写一个钩子,该代码通过服务查找我的档案,并在url/name唯一的情况下返回。

当你保存/发布一个文档时,看看postumbraco所做的http,它已经在节点名上添加了一个唯一的标识符(即(1))

如果/当我有时间写这个过程时,我会更新这个问题。