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
继承自(Advanced
、Appearance
、Help
等)
的模板
因此我不知道该项目是否真的继承了 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());
}
}
}
更好的方法可能是使用 LinkDatabase
从 BaseTemplate
字段中找到您项目的所有引荐来源网址 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());
}
}
我试图找到所有通过代码继承特定模板的模板。我有基本模板的 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
继承自(Advanced
、Appearance
、Help
等)
因此我不知道该项目是否真的继承了 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());
}
}
}
更好的方法可能是使用 LinkDatabase
从 BaseTemplate
字段中找到您项目的所有引荐来源网址 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());
}
}