在块类型上获取页面 url

Get Page url on block types

我正在以计划的形式在 Episerver 中生成报告job.This报告基本上用于获取 Episerver 中的所有内容(页面类型、块、媒体)。

有一些很好的 nuget 包用于内容使用,但出于某种原因&有更多的控制和计划来调整和进一步扩展它,我正在创建一个自定义包而不是使用可用的第 3 方包。

预定作业有点类似于 https://www.codeart.dk/blog/2018/12/content-report-generator/。 这篇文章帮助我根据我的要求对报告进行了一些修改。

我在这里苦苦挣扎的一件事是获取块所在位置的 URL。现在这是一个争论点。 我知道本质上共享的块可以在站点的任何地方使用,但关键是它们仍然在页面中使用,或者事实上在其他块中使用,这又被用于 page.What 我是想在这里说的是,它们直接或间接地是 page.So 的一部分,有没有办法获取块的页面 url 而不管它们在多少页中。 我看过的每个论坛,总是有 Pagedata 或 mediadata 的 url 页,而 blockdata.Even 我寻找的第 3 方 nuget 包上没有任何内容没有块类型的 url 页。

我知道没有现成的东西 here.Is 有办法实现这一点,即获取特定块类型的页面 url,它可以是页面列表 urls 如果块在多个页面中使用。

递归函数到达页面:

 private string GetPublicUrl(IContentRepository contentRepository, IContentSoftLinkRepository contentSoftLinkRepository, ContentReference contentReference)
        {
            var publicUrl = string.Empty;
            var content = contentRepository.Get<IContent>(contentReference);
            var referencingContentLinks = contentSoftLinkRepository.Load(content.ContentLink, true)
                .Where(link => link.SoftLinkType == ReferenceType.PageLinkReference && !ContentReference.IsNullOrEmpty(link.OwnerContentLink))
                .Select(link => link.OwnerContentLink);

            foreach (var referencingContentLink in referencingContentLinks)
            {
                publicUrl = UrlResolver.Current.GetUrl(referencingContentLink.GetPublicUrl()) ?? GetPublicUrl(contentRepository, contentSoftLinkRepository, referencingContentLink);

            }

            return publicUrl;
        }

我写了这个递归函数来到达页面,但这只适用于单层。例如页面上的 2Col 块。 如果我有一个块说下载块,它位于一个 2Col 块上,而该块又在一个页面上,那么在这种情况下 url 是空的。

欢迎任何意见。

通过IContentSoftLinkRepository您可以找到块的使用位置。您可以检查 SoftLink 是否指向带有 SoftLink.SoftLinkType == PageLinkReference 的页面,然后使用 IUrlResolver 获取该页面的 URL.