Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.76 KB | None | 0 0
  1. using Sitecore;
  2. using Sitecore.Configuration;
  3. using Sitecore.Data;
  4. using Sitecore.Data.Fields;
  5. using Sitecore.Data.Items;
  6. using Sitecore.Layouts;
  7. using Sitecore.SecurityModel;
  8.  
  9. private bool RemoveRendering(Item targetItem)
  10. {
  11. bool isRenderingRemoved = false;
  12. Database masterDB = Factory.GetDatabase("master");
  13. Item targetItem = masterDB.GetItem("{2A3E91B0-7987-44C5-AB34-35C2D9DE73B9}");
  14. string renderingId = "{6S32E1G3-3745-2ED4-09Y6-65T1R5R5YG69}";
  15. int targetIndex = 2;
  16. int usecase = 1;
  17. RenderingDefinition instanceOfRendering = null;
  18.  
  19. if (targetItem != null)
  20. {
  21. /// Get the layout definitions and the device definition
  22. LayoutField layoutField = new LayoutField(targetItem.Fields[FieldIDs.LayoutField]);
  23. LayoutDefinition layoutDefinition = layoutField != null ? LayoutDefinition.Parse(layoutField.Value) : null;
  24. DeviceDefinition deviceDefinition = layoutDefinition != null ? layoutDefinition.GetDevice(Context.Device.ID.ToString()) : null;
  25. DeviceDefinition ddef = layoutDefinition.GetDevice(deviceDefinition.ID.ToString());
  26.  
  27. /// Get the array of all renderings for the target page item
  28. IEnumerable<RenderingDefinition> renderingsArray = ddef.Renderings.ToArray().Cast<RenderingDefinition>();
  29.  
  30. if (renderingsArray.Count() > 0)
  31. {
  32. switch (usecase)
  33. {
  34. case 1: /// Remove first instance of rendering
  35.  
  36. instanceOfRendering = GetRenderingDefinition(usecase, renderingId, renderingsArray, targetIndex);
  37.  
  38. if (instanceOfRendering != null && !string.IsNullOrEmpty(instanceOfRendering.UniqueId))
  39. {
  40. ddef.Renderings = new ArrayList(renderingsArray.Where(r => r.UniqueId != instanceOfRendering.UniqueId).ToList());
  41. }
  42.  
  43. break;
  44. case 2: /// Remove last instance of rendering
  45.  
  46. instanceOfRendering = GetRenderingDefinition(usecase, renderingId, renderingsArray, targetIndex);
  47.  
  48. if (instanceOfRendering != null && !string.IsNullOrEmpty(instanceOfRendering.UniqueId))
  49. {
  50. ddef.Renderings = new ArrayList(renderingsArray.Where(r => r.UniqueId != instanceOfRendering.UniqueId).ToList());
  51. }
  52.  
  53. break;
  54. case 3: /// Remove rendering at specified index
  55. instanceOfRendering = GetRenderingDefinition(usecase, renderingId, renderingsArray, targetIndex);
  56.  
  57. if (instanceOfRendering != null && !string.IsNullOrEmpty(instanceOfRendering.UniqueId))
  58. {
  59. ddef.Renderings = new ArrayList(renderingsArray.Where(r => r.UniqueId != instanceOfRendering.UniqueId).ToList());
  60. }
  61.  
  62. break;
  63. case 4: ///Remove all instances of rendering
  64. ddef.Renderings = new ArrayList(renderingsArray.Where(r => r.ItemID != renderingId).ToList());
  65. break;
  66. }
  67.  
  68. /// Save the layout changes
  69. using (new SecurityDisabler())
  70. {
  71. targetItem.Editing.BeginEdit();
  72. layoutField.Value = layoutDefinition.ToXml();
  73. targetItem.Editing.EndEdit();
  74. }
  75. }
  76.  
  77. isRenderingRemoved = ddef.Renderings.Count < renderingsArray.Count();
  78. }
  79.  
  80. return isRenderingRemoved;
  81. }
  82.  
  83. /// <summary>
  84. /// Get the rendering definition of the target rendering from the existing page renderings
  85. /// </summary>
  86. /// <param name="usecase"></param>
  87. /// <param name="renderingId"></param>
  88. /// <param name="renderingsArray"></param>
  89. /// <param name="targetIndex"></param>
  90. /// <returns></returns>
  91. /// <summary
  92. private RenderingDefinition GetRenderingDefinition(int usecase, string renderingId, IEnumerable<RenderingDefinition> renderingsArray, int targetIndex)
  93. {
  94. RenderingDefinition instanceOfRendering = null;
  95.  
  96. switch (usecase)
  97. {
  98. case 1: ///get first instance of rendering
  99. instanceOfRendering = renderingsArray.Where(x => x.ItemID == renderingId).First();
  100. break;
  101. case 2: ///get last instance of rendering
  102. instanceOfRendering = renderingsArray.Where(x => x.ItemID == renderingId).Last();
  103. break;
  104. case 3: ///get rendering definition of rendering at specified index
  105. int renderingIndex = MainUtil.GetInt(targetIndex, -1);
  106.  
  107. if (renderingIndex >= 0 && renderingIndex < renderingsArray.Count())
  108. {
  109. instanceOfRendering = renderingsArray.ElementAt(renderingIndex);
  110.  
  111. if (instanceOfRendering != null && instanceOfRendering.ItemID == renderingId)
  112. {
  113. ///do nothing
  114. }
  115. else
  116. {
  117. instanceOfRendering = null;
  118. }
  119. }
  120.  
  121. break;
  122. }
  123.  
  124. return instanceOfRendering;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement