protected override void ProcessRenderings(Item item, LayoutDefinition layout, DeviceDefinition device, IEnumerable<RenderingDefinition> renderings) { if (renderings.Any()) { if (!ShouldProcess(item.GetProviderPath(), $"Remove rendering(s) '{renderings.Select(r => r.ItemID.ToString()).Aggregate((seed, curr) => seed + ", " + curr)}' from device {Device.Name}")) return; foreach ( var instanceRendering in renderings.Select(rendering => device.Renderings.Cast<RenderingDefinition>() .FirstOrDefault(r => r.UniqueId == rendering.UniqueId)) .Where(instanceRendering => instanceRendering != null) .Reverse()) { device.Renderings.Remove(instanceRendering); } item.Edit(p => { var outputXml = layout.ToXml(); Item[LayoutFieldId] = outputXml; }); } else { WriteError(typeof(ObjectNotFoundException), "Cannot find a rendering to remove", ErrorIds.RenderingNotFound, ErrorCategory.ObjectNotFound, null); } }
public override void Execute(Sitecore.Shell.Framework.Commands.CommandContext context) { if (context.Parameters != null && context.Parameters.Count > 0) { try { string itemID = context.Parameters["itemID"] ?? ""; itemID = Util.FormatID(itemID); string dsID = context.Parameters["dataSourceID"] ?? ""; dsID = Util.FormatID(dsID); string renderingID = context.Parameters["renderingID"] ?? ""; renderingID = Util.FormatID(renderingID); string deviceID = context.Parameters["deviceID"] ?? ""; deviceID = Util.FormatID(deviceID); string dbName = context.Parameters["dbName"] ?? ""; Sitecore.Data.Database db = Sitecore.Data.Database.GetDatabase(dbName); if (db != null) { Item i = db.GetItem(itemID); try { string name = i.Name; } catch { } if (i != null && Sitecore.Data.ID.IsID(renderingID) && Sitecore.Data.ID.IsID(dsID)) { using (new EditContext(i)) { Sitecore.Data.Fields.LayoutField layoutField = new Sitecore.Data.Fields.LayoutField(i.Fields[Sitecore.FieldIDs.LayoutField]); Sitecore.Layouts.LayoutDefinition layoutDefinition = Sitecore.Layouts.LayoutDefinition.Parse(layoutField.Value); Sitecore.Layouts.DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(deviceID); foreach (Sitecore.Layouts.RenderingDefinition rd in deviceDefinition.Renderings) { if (HealthIS.Apps.Util.FormatID(rd.UniqueId) == renderingID) { rd.Datasource = HealthIS.Apps.Util.FormatID(dsID); layoutField.Value = layoutDefinition.ToXml(); } } } } else { Exception ex = new Exception("Update Datasource Issue with id: " + itemID + " or dsID: " + dsID + " or i: " + i); Util.LogError(ex.Message, ex, this); } } } catch (Exception ex) { Util.LogError(ex.Message, ex, this); } } }
protected override void ProcessRenderings(Item item, LayoutDefinition layout, DeviceDefinition device, IEnumerable<RenderingDefinition> renderings) { if (ShouldProcess(item.GetProviderPath(), string.Format("Remove rendering(s) '{0}' from device {1}", renderings.Select(r => r.ItemID.ToString()).Aggregate((seed, curr) => seed + ", " + curr), Device.Name))) { foreach ( var instanceRendering in renderings.Select(rendering => device.Renderings.Cast<RenderingDefinition>() .FirstOrDefault(r => r.UniqueId == rendering.UniqueId)) .Where(instanceRendering => instanceRendering != null)) { device.Renderings.Remove(instanceRendering); } item.Edit(p => { var outputXml = layout.ToXml(); Item["__Renderings"] = outputXml; }); } }
private void SetLayoutFieldValue(RenderingDefinition renderingDefinition, LayoutDefinition layoutDefinition, Item item) { Assert.ArgumentNotNull(item, "item"); using (new Sitecore.Data.Items.EditContext(item)) { renderingDefinition.Datasource = _datasourceId.ToString(); item[Sitecore.FieldIDs.LayoutField] = layoutDefinition.ToXml(); } }
/// <summary> /// Sets the definition. /// </summary> /// <param name="layout"> /// The layout. /// </param> private static void SetDefinition(LayoutDefinition layout) { Assert.ArgumentNotNull(layout, "layout"); string xml = layout.ToXml(); WebUtil.SetSessionValue(AdvancedDeviceEditorForm.GetSessionHandle(), xml); }
protected override void ProcessLayout(Item item, LayoutDefinition layout, DeviceDefinition device) { if (!ShouldProcess(item.GetProviderPath(), "Add rendering " + Instance.ItemID)) { return; } var rendering = new RenderingDefinition { ItemID = Instance.ItemID, Placeholder = PlaceHolder ?? Instance.Placeholder, Datasource = DataSource ?? Instance.Datasource, Cachable = Instance.Cachable, VaryByData = Instance.VaryByData, VaryByDevice = Instance.VaryByDevice, VaryByLogin = Instance.VaryByLogin, VaryByParameters = Instance.VaryByParameters, VaryByQueryString = Instance.VaryByQueryString, VaryByUser = Instance.VaryByUser }; if (Parameter != null) { var parameters = new UrlString(rendering.Parameters ?? string.Empty); foreach (string name in Parameter.Keys) if (parameters.Parameters.AllKeys.Contains(name)) { parameters.Parameters[name] = Parameter[name].ToString(); } else { parameters.Add(name, Parameter[name].ToString()); } rendering.Parameters = parameters.ToString(); } //todo: add support for conditions //renderingDefinition.Conditions //todo: add support for multivariate tests //rendering.MultiVariateTest if (Index > -1) { device.Insert(index, rendering); } else { device.AddRendering(rendering); } item.Edit(p => { var outputXml = layout.ToXml(); Item["__Renderings"] = outputXml; }); }