Created
June 10, 2019 17:15
-
-
Save haliphax/b3589171fd294cb51a6d71b8cea8d515 to your computer and use it in GitHub Desktop.
Sitecore bucket condition for determining if a new item is made or derived from a specific template
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Sitecore.Buckets.Rules.Bucketing; | |
using Sitecore.Data; | |
using Sitecore.Data.Managers; | |
using Sitecore.Data.Templates; | |
using Sitecore.Rules.Conditions; | |
namespace Custom.Sitecore.Feature.Blog.BucketConditions | |
{ | |
public class WhenNewItemTemplateIsDerivedFrom<T> : WhenCondition<T> where T : BucketingRuleContext | |
{ | |
private ID templateId; | |
public WhenNewItemTemplateIsDerivedFrom() | |
{ | |
templateId = ID.Null; | |
} | |
public WhenNewItemTemplateIsDerivedFrom(ID templateId) | |
{ | |
this.templateId = templateId; | |
} | |
public ID TemplateId | |
{ | |
get | |
{ | |
return templateId; | |
} | |
set | |
{ | |
templateId = value; | |
} | |
} | |
protected override bool Execute(T ruleContext) | |
{ | |
ID newItemTemplateId = ruleContext.NewItemTemplateId; | |
if (ID.IsNullOrEmpty(newItemTemplateId)) return false; | |
Template itemTemplate = TemplateManager.GetTemplate(newItemTemplateId, ruleContext.Database); | |
Template baseTemplate = TemplateManager.GetTemplate(templateId, ruleContext.Database); | |
return IsDerivedFrom(itemTemplate, baseTemplate); | |
} | |
private bool IsDerivedFrom(Template target, Template baseTemplate) | |
{ | |
if (target.ID == baseTemplate.ID) return true; | |
var baseTemplates = target.GetBaseTemplates(); | |
if (baseTemplates == null || baseTemplates.Count == 0) return false; | |
foreach (Template bt in baseTemplates) | |
if (IsDerivedFrom(bt, baseTemplate)) return true; | |
return false; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment