EpiServer - 我如何才能知道某个块是否正在任何已发布的页面上使用?
EpiServer - How can I find out if a block is being used on any published page?
我有一个 episerver 项目,随着时间的推移有很多块,其中一些块不再需要,有没有办法查看我的 episerver 网站的任何页面上是否正在使用创建的块?
我很少这样做,但上次我用这段代码获取自定义的所有已发布实例 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
中找到未使用的块实例
现在,像往常一样,不要使用 ServiceLocator,除非您想隐藏依赖项。
我有一个 episerver 项目,随着时间的推移有很多块,其中一些块不再需要,有没有办法查看我的 episerver 网站的任何页面上是否正在使用创建的块?
我很少这样做,但上次我用这段代码获取自定义的所有已发布实例 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
现在,像往常一样,不要使用 ServiceLocator,除非您想隐藏依赖项。