2017-10-11 3 views
1

J'essaie de trouver tous les modèles qui héritent d'un modèle particulier à travers le code. J'ai l'ID du modèle de base (Base Web Page), et je suis itérer à travers tous les éléments de modèle dans Sitecore à la recherche d'éléments qui héritent Base Web Page.C# Sitecore obtenir des modèles hérités

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

Cependant, item.Template.BaseTemplates me donne une liste des modèles de base de niveau racine; au lieu de me donner Base Web Page, il me donne les modèles qui Base Web Page hérite de (Advanced, Appearance, Help, etc.)

enter image description here

Je ne sais donc pas si l'élément hérite effectivement Base Web Page ou non.

Existe-t-il une méthode pour obtenir des modèles directement hérités? Comment puis-je trouver tous les modèles qui héritent Base Web Page?

+0

Votre solution réside dans Lien à la base de données –

+0

à élaborer? –

Répondre

1

La partie item.Template dans la ligne

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

est incorrect.

item.Template renvoie /sitecore/templates/System/Templates/Template ici, donc vous vérifiez pour un modèle BaseTemplate de Template toujours.

Votre code doit être:

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

Et la meilleure approche peut utiliser LinkDatabase pour trouver tous les référants de votre article qui lien à partir BaseTemplate domaine comme celui:

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