Sitecore for Developers
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.
Now this bucket will use the GuidFolderPath bucket strategy from Alex Shyba's autohaus solution.
Thanks Alex Shyba for your help with this one.