C#Sitecore获得继承模板
问题描述:
我试图找到所有通过代码继承特定模板的模板。我有基本模板的标识(Base Web Page
),并且遍历Sitecore中的所有模板项目,以查找继承Base Web Page
的项目。C#Sitecore获得继承模板
foreach (var item in templateItems)
{
var baseTemplates = item.Template.BaseTemplates.ToList();
foreach (var baseTemplate in baseTemplates)
{
if (baseTemplate.ID == templateItem.ID)
{
inheritors.Add(item.ID.ToString());
}
}
}
然而,item.Template.BaseTemplates
给我的根水平基本模板列表;而不是给我Base Web Page
,它让我从(Advanced
,Appearance
,Help
等)Base Web Page
继承
所以我不知道,如果该项目实际上是继承Base Web Page
与否的模板。
有没有一种方法可以直接获取模板?如何找到继承Base Web Page
的所有模板?
答
在
var baseTemplates = item.Template.BaseTemplates.ToList();
线的部分item.Template
不正确。
item.Template
返回/sitecore/templates/System/Templates/Template
在这里,所以你总是检查一个BaseTemplate
Template
模板。
你的代码应该是:
foreach (var item in templateItems)
{
var baseTemplates = new TemplateItem(item).BaseTemplates.ToList();
foreach (var baseTemplate in baseTemplates)
{
if (baseTemplate.ID == templateItem.ID)
{
inheritors.Add(item.ID.ToString());
}
}
}
而且更好的方法可以使用LinkDatabase
找到从BaseTemplate
场链接一样,在你的项目的所有引用:
var links = Sitecore.Globals.LinkDatabase.GetItemReferrers(templateItem, false);
foreach (var link in links)
{
if (link.SourceFieldID == Sitecore.FieldIDs.BaseTemplate)
{
inheritors.Add(link.SourceItemID.ToString());
}
}
你的解决之道在于LinkDatabase –
关心详细说明? –