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,它让我从(AdvancedAppearanceHelp等)Base Web Page继承

enter image description here

所以我不知道,如果该项目实际上是继承Base Web Page与否的模板。

有没有一种方法可以直接获取模板?如何找到继承Base Web Page的所有模板?

+0

你的解决之道在于LinkDatabase –

+0

关心详细说明? –

var baseTemplates = item.Template.BaseTemplates.ToList(); 

线的部分item.Template不正确。

item.Template返回/sitecore/templates/System/Templates/Template在这里,所以你总是检查一个BaseTemplateTemplate模板。

你的代码应该是:

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()); 
    } 
}