Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Sitecore;
- using Sitecore.Configuration;
- using Sitecore.Data;
- using Sitecore.Data.Fields;
- using Sitecore.Data.Items;
- using Sitecore.Layouts;
- using Sitecore.SecurityModel;
- private bool RemoveRendering(Item targetItem)
- {
- bool isRenderingRemoved = false;
- Database masterDB = Factory.GetDatabase("master");
- Item targetItem = masterDB.GetItem("{2A3E91B0-7987-44C5-AB34-35C2D9DE73B9}");
- string renderingId = "{6S32E1G3-3745-2ED4-09Y6-65T1R5R5YG69}";
- int targetIndex = 2;
- int usecase = 1;
- RenderingDefinition instanceOfRendering = null;
- if (targetItem != null)
- {
- /// Get the layout definitions and the device definition
- LayoutField layoutField = new LayoutField(targetItem.Fields[FieldIDs.LayoutField]);
- LayoutDefinition layoutDefinition = layoutField != null ? LayoutDefinition.Parse(layoutField.Value) : null;
- DeviceDefinition deviceDefinition = layoutDefinition != null ? layoutDefinition.GetDevice(Context.Device.ID.ToString()) : null;
- DeviceDefinition ddef = layoutDefinition.GetDevice(deviceDefinition.ID.ToString());
- /// Get the array of all renderings for the target page item
- IEnumerable<RenderingDefinition> renderingsArray = ddef.Renderings.ToArray().Cast<RenderingDefinition>();
- if (renderingsArray.Count() > 0)
- {
- switch (usecase)
- {
- case 1: /// Remove first instance of rendering
- instanceOfRendering = GetRenderingDefinition(usecase, renderingId, renderingsArray, targetIndex);
- if (instanceOfRendering != null && !string.IsNullOrEmpty(instanceOfRendering.UniqueId))
- {
- ddef.Renderings = new ArrayList(renderingsArray.Where(r => r.UniqueId != instanceOfRendering.UniqueId).ToList());
- }
- break;
- case 2: /// Remove last instance of rendering
- instanceOfRendering = GetRenderingDefinition(usecase, renderingId, renderingsArray, targetIndex);
- if (instanceOfRendering != null && !string.IsNullOrEmpty(instanceOfRendering.UniqueId))
- {
- ddef.Renderings = new ArrayList(renderingsArray.Where(r => r.UniqueId != instanceOfRendering.UniqueId).ToList());
- }
- break;
- case 3: /// Remove rendering at specified index
- instanceOfRendering = GetRenderingDefinition(usecase, renderingId, renderingsArray, targetIndex);
- if (instanceOfRendering != null && !string.IsNullOrEmpty(instanceOfRendering.UniqueId))
- {
- ddef.Renderings = new ArrayList(renderingsArray.Where(r => r.UniqueId != instanceOfRendering.UniqueId).ToList());
- }
- break;
- case 4: ///Remove all instances of rendering
- ddef.Renderings = new ArrayList(renderingsArray.Where(r => r.ItemID != renderingId).ToList());
- break;
- }
- /// Save the layout changes
- using (new SecurityDisabler())
- {
- targetItem.Editing.BeginEdit();
- layoutField.Value = layoutDefinition.ToXml();
- targetItem.Editing.EndEdit();
- }
- }
- isRenderingRemoved = ddef.Renderings.Count < renderingsArray.Count();
- }
- return isRenderingRemoved;
- }
- /// <summary>
- /// Get the rendering definition of the target rendering from the existing page renderings
- /// </summary>
- /// <param name="usecase"></param>
- /// <param name="renderingId"></param>
- /// <param name="renderingsArray"></param>
- /// <param name="targetIndex"></param>
- /// <returns></returns>
- /// <summary
- private RenderingDefinition GetRenderingDefinition(int usecase, string renderingId, IEnumerable<RenderingDefinition> renderingsArray, int targetIndex)
- {
- RenderingDefinition instanceOfRendering = null;
- switch (usecase)
- {
- case 1: ///get first instance of rendering
- instanceOfRendering = renderingsArray.Where(x => x.ItemID == renderingId).First();
- break;
- case 2: ///get last instance of rendering
- instanceOfRendering = renderingsArray.Where(x => x.ItemID == renderingId).Last();
- break;
- case 3: ///get rendering definition of rendering at specified index
- int renderingIndex = MainUtil.GetInt(targetIndex, -1);
- if (renderingIndex >= 0 && renderingIndex < renderingsArray.Count())
- {
- instanceOfRendering = renderingsArray.ElementAt(renderingIndex);
- if (instanceOfRendering != null && instanceOfRendering.ItemID == renderingId)
- {
- ///do nothing
- }
- else
- {
- instanceOfRendering = null;
- }
- }
- break;
- }
- return instanceOfRendering;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement