C# Sitecore 获取继承模板

C# Sitecore get inherited templates

我试图找到所有通过代码继承特定模板的模板。我有基本模板的 ID (Base Web Page),我正在遍历 Sitecore 中的所有模板项目,寻找继承 Base Web Page 的项目。

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,而是给我 Base Web Page 继承自(AdvancedAppearanceHelp 等)

的模板

因此我不知道该项目是否真的继承了 Base Web Page

有没有直接获取继承模板的方法?我怎样才能找到所有继承 Base Web Page 的模板?

中的item.Template部分
var baseTemplates = item.Template.BaseTemplates.ToList();

行不正确。

item.Template returns /sitecore/templates/System/Templates/Template 在这里,所以你总是检查 BaseTemplate of 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());
        }
    }
}

更好的方法可能是使用 LinkDatabaseBaseTemplate 字段中找到您项目的所有引荐来源网址 link 像这样:

var links = Sitecore.Globals.LinkDatabase.GetItemReferrers(templateItem, false);
foreach (var link in links)
{
    if (link.SourceFieldID == Sitecore.FieldIDs.BaseTemplate)
    {
        inheritors.Add(link.SourceItemID.ToString());
    }
}