gpt4 book ai didi

c# - EpiServer - 我如何才能知道某个 block 是否正在任何已发布的页面上使用?

转载 作者:行者123 更新时间:2023-12-05 03:06:20 24 4
gpt4 key购买 nike

我有一个 episerver 项目,随着时间的推移有很多 block ,其中一些 block 不再需要,有没有办法查看我的 episerver 网站的任何页面上是否正在使用创建的 block ?

最佳答案

我很少这样做,但上次我用这段代码获取自定义 CodeBlock 的所有已发布实例

// initiate the repos (use dependency injection instead of the ServiceLocator)
var contentTypeRepository = ServiceLocator.Current.GetInstance<EPiServer.DataAbstraction.IContentTypeRepository>();
var contentModelUsage = ServiceLocator.Current.GetInstance<IContentModelUsage>();
var repository = ServiceLocator.Current.GetInstance<IContentRepository>();
var linkRepository = ServiceLocator.Current.GetInstance<IContentSoftLinkRepository>();

// loading a block type
var blockType = contentTypeRepository.Load(typeof(CodeBlock));

// get usages, also includes versions
IList<ContentUsage> usages = contentModelUsage.ListContentOfContentType(blockType);

List<IContent> blocks = usages.Select(contentUsage =>
contentUsage.ContentLink.ToReferenceWithoutVersion())
.Distinct()
.Select(contentReference =>
repository.Get<IContent>(contentReference)).ToList();


var unusedBlocks = new List<IContent>();

foreach (IContent block in blocks)
{
var referencingContentLinks = linkRepository.Load(block.ContentLink, true)
.Where(link =>
link.SoftLinkType == ReferenceType.PageLinkReference &&
!ContentReference.IsNullOrEmpty(link.OwnerContentLink))
.Select(link => link.OwnerContentLink);

// if no links
if (!referencingContentLinks.Any())
{
unusedBlocks.Add(block);
}
}

您将在 unusedBlocks

中找到未使用的 block 实例

现在,像往常一样,除非您想隐藏依赖项,否则不要使用 ServiceLocator。

关于c# - EpiServer - 我如何才能知道某个 block 是否正在任何已发布的页面上使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49454291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com