C#Sitecore获取继承的模板

时间:2017-10-11 20:08:41

标签: c# templates inheritance sitecore

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

enter image description here

因此我不知道该项目是否实际上是继承Base Web Page

是否有方法可以直接继承模板?如何查找继承Base Web Page的所有模板?

1 个答案:

答案 0 :(得分:3)

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

行不正确。

item.Template在此处返回/sitecore/templates/System/Templates/Template,因此您始终会检查BaseTemplate Templateforeach (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()); } } 字段的链接:

$('.scalize').on('click', '.item-point', (function() {
  $(this).siblings('.item-point.active').each(function() {
    var popover = $(this).data('popover');
    $(popover).removeClass('fadeIn').css({
      'display': 'none'
    });
    $(this).removeClass('active');
  });
}));
相关问题