【问题标题】:C# Sitecore get inherited templatesC# Sitecore 获取继承的模板
【发布时间】:2017-10-11 20:08:40
【问题描述】:

我正在尝试通过代码查找所有继承特定模板的模板。我有基本模板的 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的模板?

【问题讨论】:

  • 您的解决方案在于 LinkDatabase
  • 需要详细说明吗?

标签: c# templates inheritance sitecore


【解决方案1】:

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

行不正确。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2012-12-06
    • 2012-10-05
    • 1970-01-01
    相关资源
    最近更新 更多