Sitecore Item Buckets with Different Bucket Folder Path Strategies

Problem: 

If you have multiple item buckets in your solution, they all use the same bucket folder path in Sitecore.Buckets.config under the BucketConfiguration.DynamicBucketFolderPath setting, mainly DateBasedFolderPath. I wanted to be able to use a different strategy for each bucket.

FIX:

I created a DynamicBucketFolderResolver which implements IDynamicBucketFolderPath:

public class DynamicBucketFolderResolver : IDynamicBucketFolderPath
{
#region Methods

public string GetFolderPath(ID newItemId, ID parentItemId, DateTime creationDateOfNewItem)
{
Database db = Sitecore.Data.Database.GetDatabase(“master”);
Item parentItem = db.GetItem(parentItemId);
if (parentItem != null)
{
string assemblyAndClass = parentItem.GetFieldValue(“__Dynamic Bucket Folder Path Class”);
if (!string.IsNullOrEmpty(assemblyAndClass))
{
Type resolverType = Type.GetType(assemblyAndClass);
IDynamicBucketFolderPath type = Sitecore.Reflection.ReflectionUtil.CreateObject(resolverType) as IDynamicBucketFolderPath;
return type.GetFolderPath(newItemId, parentItemId, creationDateOfNewItem);
}
}
return new Sitecore.Buckets.Util.DateBasedFolderPath().GetFolderPath(newItemId, parentItemId, creationDateOfNewItem);
}

#endregion
}

In Sitecore.Buckets.config, I’ve set the BucketConfiguration.DynamicBucketFolderPath to:

<setting name=”BucketConfiguration.DynamicBucketFolderPath” value=”Site.Web.Code.Buckets.BucketFolderPath.DynamicBucketFolderResolver, Site.Web”/>

In Sitecore, I’ve inserted a template field titled “__Dynamic Bucket Folder Path Class” as a single line text field to /sitecore/templates/System/Templates/Sections/Item Buckets/Item Buckets.

How it works:

I can now specify a namespace.class, assembly in the Standard Field, Dynamic Bucket Folder Path Class, so I can use any custom bucketing strategy I want for that specific bucket.

Capture

Now this bucket will use the GuidFolderPath bucket strategy from Alex Shyba’s autohaus solution.

Thanks Alex Shyba for your help with this one.