/// <summary> /// Sets the definition. /// </summary> /// <param name="layout"> /// The layout. /// </param> private static void SetDefinition(LayoutDefinition layout) { Assert.ArgumentNotNull(layout, "layout"); string value = layout.ToXml(); WebUtil.SetSessionValue(DeviceEditorForm.GetSessionHandle(), value); }
public void CleanRenderings(Item item, string renderingID, string placeholder) { LayoutField layoutField = new LayoutField(item.Fields[FieldIDs.FinalLayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(GetDefaultDeviceItem(item.Database).ID.ToString()); List <string> placeholders = new List <string>(); foreach (RenderingDefinition rendering in deviceDefinition.Renderings) { if (rendering.ItemID.ToLower() == "{C1624533-ED68-41AC-B03C-BFDE4D9B1F2A}".ToLower()) { placeholders.Add(StringUtil.EnsurePrefix('/', rendering.Placeholder + "/" + placeholder + "_" + new Guid(rendering.UniqueId).ToString("D").ToLower())); } } List <RenderingDefinition> renderingsToRemove = new List <RenderingDefinition>(); foreach (RenderingDefinition rendering in deviceDefinition.Renderings) { if (rendering.ItemID.ToLower() == renderingID.ToLower() && placeholders.Contains(rendering.Placeholder)) { renderingsToRemove.Add(rendering); } } foreach (var rendering in renderingsToRemove) { deviceDefinition.Renderings.Remove(rendering); } using (new SecurityDisabler()) { item.Editing.BeginEdit(); layoutField.Value = layoutDefinition.ToXml(); item.Editing.EndEdit(); } }
protected static void SetDefinition_exposed(LayoutDefinition layout) { Assert.ArgumentNotNull(layout, "layout"); string xml = layout.ToXml(); WebUtil.SetSessionValue(GetSessionHandle_exposed(), xml); }
public void ClearsAllRenderings() { ID[] ids; var layoutDefinition = new LayoutDefinition() { Devices = new ArrayList() { new DeviceDefinition() } }; using (var db = GetDatabase(out ids)) { var item = db.GetItem("/sitecore/home/page"); var args = new GetPlaceholderRenderingsArgs("placeholder", layoutDefinition.ToXml(), db.Database) { PlaceholderRenderings = db.Database.SelectItems("//Layouts/*").ToList() }; args.PlaceholderRenderings.Should().NotBeEmpty(); var ctx = new PlaceholderSettingsRuleContext(args, item); var action = new ClearRenderingsAction <PlaceholderSettingsRuleContext>(); action.Apply(ctx); args.PlaceholderRenderings.Should().BeEmpty(); } }
public void AddsAllRenderingsFromFolder() { ID[] renderingIds; ID[] folderIds; var layoutDefinition = new LayoutDefinition() { Devices = new ArrayList() { new DeviceDefinition() } }; using (var db = GetDatabase(out renderingIds, out folderIds)) { var item = db.GetItem("/sitecore/home/page"); var args = new GetPlaceholderRenderingsArgs("placeholder", layoutDefinition.ToXml(), db.Database) { PlaceholderRenderings = new List <Item>() }; var ctx = new PlaceholderSettingsRuleContext(args, item); var action = new AddRenderingFolderAction <PlaceholderSettingsRuleContext>() { RenderingFolderItemId = folderIds[0].ToString() }; action.Apply(ctx); args.PlaceholderRenderings.Select(x => x.ID) .Should().HaveCount(2) .And.Contain(renderingIds.Take(2)); } }
public void AddRendering(Item item, string renderingID, string placeholder, Item datasource) { LayoutField layoutField = new LayoutField(item.Fields[FieldIDs.FinalLayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(GetDefaultDeviceItem(item.Database).ID.ToString()); foreach (RenderingDefinition rendering in deviceDefinition.Renderings) { if (rendering.ItemID.ToLower() == "{C1624533-ED68-41AC-B03C-BFDE4D9B1F2A}".ToLower()) { placeholder = StringUtil.EnsurePrefix('/', rendering.Placeholder + "/" + placeholder + "_" + new Guid(rendering.UniqueId).ToString("D").ToLower()); break; } } var newRendering = new RenderingDefinition { Placeholder = placeholder, ItemID = renderingID, Datasource = datasource.ID.ToString() }; deviceDefinition.AddRendering(newRendering); using (new SecurityDisabler()) { item.Editing.BeginEdit(); layoutField.Value = layoutDefinition.ToXml(); item.Editing.EndEdit(); } }
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); } }
protected override void ProcessPlaceholderSettings(Item item, LayoutDefinition layout, DeviceDefinition device, List <PlaceholderDefinition> placeholders) { if (placeholders.Any()) { if (!ShouldProcess(item.GetProviderPath(), $"Remove placeholder setting(s) '{placeholders.Select(r => r.MetaDataItemId.ToString()).Aggregate((seed, curr) => seed + ", " + curr)}' from device {Device.Name}") ) { return; } foreach ( var placeholderSetting in placeholders.Select(rendering => device.Placeholders.Cast <PlaceholderDefinition>() .FirstOrDefault(r => r.UniqueId == rendering.UniqueId)) .Where(placeholder => placeholder != null) .Reverse()) { device.Placeholders.Remove(placeholderSetting); } item.Edit(p => { var outputXml = layout.ToXml(); LayoutField.SetFieldValue(Item.Fields[LayoutFieldId], outputXml); }); } else { WriteError(typeof(ObjectNotFoundException), "Cannot find a placeholder setting to remove", ErrorIds.PlaceholderSettingNotFound, ErrorCategory.ObjectNotFound, null); } }
public void AddsSelectedRenderings() { ID[] ids; var layoutDefinition = new LayoutDefinition() { Devices = new ArrayList() { new DeviceDefinition() } }; using (var db = GetDatabase(out ids)) { var item = db.GetItem("/sitecore/home/page"); var args = new GetPlaceholderRenderingsArgs("placeholder", layoutDefinition.ToXml(), db.Database) { PlaceholderRenderings = new List <Item>() }; var ctx = new PlaceholderSettingsRuleContext(args, item); var action = new AddRenderingAction <PlaceholderSettingsRuleContext>() { RenderingItemIds = string.Join("|", ids.Select(x => x.ToString())) }; action.Apply(ctx); args.PlaceholderRenderings.Should().HaveSameCount(ids); } }
private static string ApplyActionToLayoutXml(string xml, Func <RenderingDefinition, RenderingActionResult> action) { LayoutDefinition layout = LayoutDefinition.Parse(xml); xml = layout.ToXml(); // normalize the output in case of any minor XML differences (spaces, etc) // loop over devices in the rendering for (int deviceIndex = layout.Devices.Count - 1; deviceIndex >= 0; deviceIndex--) { var device = layout.Devices[deviceIndex] as DeviceDefinition; if (device == null) { continue; } // loop over renderings within the device for (int renderingIndex = device.Renderings.Count - 1; renderingIndex >= 0; renderingIndex--) { var rendering = device.Renderings[renderingIndex] as RenderingDefinition; if (rendering == null) { continue; } // run the action on the rendering RenderingActionResult result = action(rendering); // remove the rendering if the action method requested it if (result == RenderingActionResult.Delete) { device.Renderings.RemoveAt(renderingIndex); } } } string layoutXml = layout.ToXml(); // save a modified layout value if necessary if (layoutXml != xml) { return(layoutXml); } return(null); }
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, ClearOnIndexUpdate = Instance.ClearOnIndexUpdate, 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(); LayoutField.SetFieldValue(item.Fields[LayoutFieldId], outputXml); }); }
public override void Execute(CommandContext context) { string formValue = WebUtil.GetFormValue("scLayout"); string xml = WebEditUtil.ConvertJSONLayoutToXML(formValue); string id = ShortID.Decode(WebUtil.GetFormValue("scDeviceID")); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(xml); if (layoutDefinition == null) { ReturnLayout(); return; } DeviceDefinition device = layoutDefinition.GetDevice(id); if (device == null) { ReturnLayout(); return; } string uniqueId = Guid.Parse(context.Parameters["renderingUid"]).ToString("B").ToUpperInvariant(); RenderingDefinition renderingByUniqueId = device.GetRenderingByUniqueId(uniqueId); if (renderingByUniqueId == null) { ReturnLayout(); return; } if (string.IsNullOrEmpty(renderingByUniqueId.Parameters)) { if (!string.IsNullOrEmpty(renderingByUniqueId.ItemID)) { RenderingItem renderingItem = Client.ContentDatabase.GetItem(renderingByUniqueId.ItemID); renderingByUniqueId.Parameters = ((renderingItem != null) ? renderingItem.Parameters : string.Empty); } else { renderingByUniqueId.Parameters = string.Empty; } } NameValueCollection nameValueCollection = WebUtil.ParseUrlParameters(renderingByUniqueId.Parameters); string input = nameValueCollection["FieldNames"]; string text = context.Parameters["variant"]; if (Guid.TryParse(input, out Guid result) && result == Guid.Parse(text)) { ReturnLayout(); return; } nameValueCollection["FieldNames"] = text; renderingByUniqueId.Parameters = new UrlString(nameValueCollection.EscapeDataValues()).GetUrl(); formValue = WebEditUtil.ConvertXMLLayoutToJSON(layoutDefinition.ToXml()); ReturnLayout(formValue); }
protected override void ProcessLayout(Item item, LayoutDefinition layout, DeviceDefinition device) { var key = Key ?? Instance.Key; if (string.IsNullOrWhiteSpace(key)) { WriteError(typeof(ObjectNotFoundException), "A placeholder setting requires a key provided here or in the instance.", ErrorIds.ValueNotFound, ErrorCategory.ObjectNotFound, key); return; } var metadataItemId = MetaDataItemId ?? Instance.MetaDataItemId; if (string.IsNullOrWhiteSpace(metadataItemId)) { WriteError(typeof(ObjectNotFoundException), "A placeholder setting requires a MetaDataItemId provided here or in the instance.", ErrorIds.ValueNotFound, ErrorCategory.ObjectNotFound, metadataItemId); return; } if (!ShouldProcess(item.GetProviderPath(), $"Add placeholder setting '{metadataItemId}'")) { return; } var placeholder = new PlaceholderDefinition { Key = key, MetaDataItemId = metadataItemId, UniqueId = ID.NewID.ToString() }; if (!PlaceholderSettingExists(device, placeholder)) { device.AddPlaceholder(placeholder); item.Edit(p => { var outputXml = layout.ToXml(); LayoutField.SetFieldValue(item.Fields[LayoutFieldId], outputXml); }); } else { WriteError(typeof(DuplicateNameException), $"A placeholder setting with key '{key}' and metadata '{metadataItemId}' already exists.", ErrorIds.PlaceholderSettingAlreadyExists, ErrorCategory.InvalidArgument, placeholder); return; } }
public void OnItemSaving(object sender, EventArgs args) { Item item = Event.ExtractParameter(args, 0) as Item; if (item == null) { return; } LayoutField layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]); if (!layoutField.InnerField.HasValue) { return; } Item existingItem = item.Database.GetItem( item.ID, item.Language, item.Version); if (existingItem == null) { return; } LayoutField oldLayout = new LayoutField(existingItem.Fields[Sitecore.FieldIDs.LayoutField]); if (string.IsNullOrEmpty(layoutField.Value) || layoutField.Value == oldLayout.Value) { return; } LayoutDefinition layout = LayoutDefinition.Parse(layoutField.Value); for (int i = 0; i < layout.Devices.Count; i++) { DeviceDefinition device = layout.Devices[i] as DeviceDefinition; for (int j = 0; j < device.Renderings.Count; j++) { RenderingDefinition rendering = device.Renderings[j] as RenderingDefinition; if (!string.IsNullOrEmpty(rendering.Datasource) && rendering.Datasource.StartsWith("/")) { Item datasourceItem = item.Database.GetItem(rendering.Datasource); if (datasourceItem == null) { Sitecore.Diagnostics.Log.Warn(string.Format("Could not find datasource item at path {0} while saving item {1}", rendering.Datasource, item.ID), this); continue; } rendering.Datasource = datasourceItem.ID.ToString(); } } } layoutField.Value = layout.ToXml(); }
protected override List <XElement> MigratePersonalizationSettings(XElement layoutXml, LayoutDefinition definition) { LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutXml.ToString()); foreach (DeviceDefinition device in definition.Devices) { foreach (RenderingDefinition rendering in device.Renderings) { var deviceRendering = layoutDefinition?.GetDevice(device.ID)?.GetRenderingByUniqueId(rendering.UniqueId); if (deviceRendering != null) { deviceRendering.Rules = rendering.Rules; } } } return(layoutDefinition.ToXml().ToXmlNode().ToXElement().Descendants((XName)"d").ToList()); }
public void RemoveComponent(Item item, RenderingDefinition rendering, string deviceId) { LayoutField layoutField = new LayoutField(item.Fields[FieldIDs.FinalLayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(deviceId); for (int i = 0; i < deviceDefinition.Renderings.Count; i++) { var tempRend = (RenderingDefinition)deviceDefinition.Renderings[i]; if (tempRend.UniqueId == rendering.UniqueId) { deviceDefinition.Renderings.RemoveAt(i); break; } } layoutField.Value = layoutDefinition.ToXml(); }
private bool UpdateRendering(Database db, Sitecore.Data.Items.Item homeItem, Sitecore.Data.Items.Item newHomeItem) { try { // get rendering, layout Sitecore.Layouts.RenderingReference[] renderings = newHomeItem.Visualization.GetRenderings(Sitecore.Context.Device, true); LayoutField layoutField = new LayoutField(newHomeItem.Fields[Sitecore.FieldIDs.LayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString()); // update rendering's datasource foreach (RenderingReference rendering in renderings) { string datasouceString = deviceDefinition.GetRendering(rendering.RenderingID.ToString()).Datasource; if (!string.IsNullOrEmpty(datasouceString)) { // get datasource item var currentDatasouceItem = Sitecore.Data.ID.IsID(datasouceString) ? db.GetItem(new Sitecore.Data.ID(datasouceString)) : db.GetItem(datasouceString); if (currentDatasouceItem != null) { // get new path datasouceString = currentDatasouceItem.Paths.FullPath.Replace(homeItem.DisplayName, newHomeItem.DisplayName); var newItem = db.GetItem(datasouceString); if (newItem != null) { // set new datasource id deviceDefinition.GetRendering(rendering.RenderingID.ToString()).Datasource = newItem.ID.ToString(); newHomeItem.Editing.BeginEdit(); layoutField.Value = layoutDefinition.ToXml(); newHomeItem.Editing.EndEdit(); } } } } return(true); } catch (Exception ex) { SetMesasgeInCookie(ex.Message, 1); return(false); } }
protected void EditPlaceholderPipeline(ClientPipelineArgs args) { Assert.ArgumentNotNull(args, "args"); LayoutDefinition definition = LayoutDefinition.Parse(this.GetDoc().OuterXml); PlaceholderDefinition placeholder = definition.GetDevice(args.Parameters["deviceid"]).GetPlaceholder(args.Parameters["uniqueid"]); if (placeholder != null) { if (args.IsPostBack) { if (!string.IsNullOrEmpty(args.Result) && (args.Result != "undefined")) { string str; Item item = SelectPlaceholderSettingsOptions.ParseDialogResult(args.Result, Client.ContentDatabase, out str); if (item != null) { placeholder.MetaDataItemId = item.Paths.FullPath; } if (!string.IsNullOrEmpty(str)) { placeholder.Key = str; } this.SetActiveLayout(definition.ToXml()); this.Refresh(); } } else { Item item2 = string.IsNullOrEmpty(placeholder.MetaDataItemId) ? null : Client.ContentDatabase.GetItem(placeholder.MetaDataItemId); SelectPlaceholderSettingsOptions options = new SelectPlaceholderSettingsOptions { TemplateForCreating = null, PlaceholderKey = placeholder.Key, CurrentSettingsItem = item2, SelectedItem = item2, IsPlaceholderKeyEditable = true }; SheerResponse.ShowModalDialog(options.ToUrlString().ToString(), "460px", "460px", string.Empty, true); args.WaitForPostBack(); } } }
public void AddComponent(Item item, Item datasource, string placeholder, string componentId, string deviceId, string parameters, bool isSXA) { var datasourceValue = isSXA ? datasource?.Paths.FullPath.Replace(item.Paths.FullPath, "local:") : datasource?.ID.ToString(); LayoutField layoutField = new LayoutField(item.Fields[FieldIDs.FinalLayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(deviceId); var rendering = new RenderingDefinition { ItemID = componentId, Datasource = datasourceValue, Placeholder = placeholder, Parameters = parameters }; deviceDefinition.AddRendering(rendering); layoutField.Value = layoutDefinition.ToXml(); }
/// <summary> /// Ends the wizard. /// </summary> protected override void EndWizard() { if (ShowPageEditorFunctionality && (CurrentPoll != null)) { Assert.IsNotNullOrEmpty(ParentItem[FieldIDs.LayoutField], String.Format("Item {0} has no layout", ParentItem.Paths.Path)); LayoutDefinition definition = LayoutDefinition.Parse(ParentItem[FieldIDs.LayoutField]); var rendering = new RenderingDefinition(); rendering.ItemID = PollConstants.PollRenderingID; rendering.Placeholder = Context.ClientPage.Request.Form["__LISTACTIVE"]; rendering.Datasource = String.Format("{0}/{1}", CurrentPoll.InnerItem.Parent.Paths.Path, CurrentPoll.Name); definition.GetDevice(PollConstants.PollRenderingDefaultDevice).AddRendering(rendering); using (new EditContext(ParentItem)) { ParentItem[FieldIDs.LayoutField] = definition.ToXml(); } } base.EndWizard(); }
public ResponsePlaceholder(Item contextItem, LayoutDefinition layoutDefinition, string name, string parentUniqueId, bool exists = true, bool dynamic = true) { Name = name; ParentUniqueId = parentUniqueId; Exists = exists; Icon = "<img src=\"/temp/IconCache/Business/16x16/table_selection_block.png\" alt=\"\" />"; Dynamic = dynamic; //DynamicPlaceholderName = name + "-" + ParentUniqueId + ""; ValidRenderings = new List <ResponsePlaceholderRendering>(); // TODO: find all the valid renderings! GetPlaceholderRenderingsArgs args = new GetPlaceholderRenderingsArgs(Name, layoutDefinition.ToXml(), contextItem.Database); //args.ContextItemPath = contextItem.Paths.FullPath; //args.ShowDialogIfDatasourceSetOnRenderingItem = true; CorePipeline.Run("getPlaceholderRenderings", args); if (args.PlaceholderRenderings != null) { foreach (var placeholderRendering in args.PlaceholderRenderings) { ValidRenderings.Add(new ResponsePlaceholderRendering(placeholderRendering, layoutDefinition, contextItem)); } } }
public static void AddRenderings(Item parentItem) { if (parentItem == null) { return; } if (parentItem.Children.Count == 0) { return; } else { localDatasource = parentItem.Children.FirstOrDefault(); } if (localDatasource.Children.Count == 0) { return; } ResetRenderings(parentItem); // Get the default device DeviceRecords devices = parentItem.Database.Resources.Devices; DeviceItem defaultDevice = devices.GetAll().Where(d => d.Name.ToLower() == "default").First(); var renderingsList = parentItem.Visualization.GetRenderings(defaultDevice, true); if (renderingsList == null) { return; } LayoutField layoutField = new LayoutField(parentItem.Fields[FieldIDs.FinalLayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(defaultDevice.ID.ToString()); foreach (Item child in localDatasource.Children) { if (child.TemplateID.ToString() == NewsChild.Text) { Guid newGuid = Guid.NewGuid(); string renderingUniqueID = newGuid.ToString().TrimStart('{').TrimEnd('}').ToLower(); if (layoutDefinition.Devices.Count > 0) { if (!RenderingAvailable(layoutDefinition, Renderings.BodyContent_Rendering)) { RenderingDefinition textSubLayout = new RenderingDefinition(); textSubLayout.ItemID = Renderings.BodyContent_Rendering; textSubLayout.Placeholder = "page-layout"; textSubLayout.UniqueId = renderingUniqueID; deviceDefinition.AddRendering(textSubLayout); } else { var rendering = deviceDefinition.GetRendering(Renderings.BodyContent_Rendering); renderingUniqueID = rendering.UniqueId; renderingUniqueID = renderingUniqueID.TrimStart('{').TrimEnd('}').ToLower(); } } RenderingDefinition newRenderingDefinition = new RenderingDefinition(); newRenderingDefinition.ItemID = Renderings.Text; string placeholderValue = !string.IsNullOrEmpty(renderingUniqueID) ? "/page-layout/body-content_" + renderingUniqueID : "/page-layout/body-content"; newRenderingDefinition.Placeholder = placeholderValue; newRenderingDefinition.Datasource = child.ID.ToString(); deviceDefinition.AddRendering(newRenderingDefinition); } else if (child.TemplateID.ToString() == NewsChild.Quote) { Guid newGuid = Guid.NewGuid(); string renderingUniqueID = newGuid.ToString().TrimStart('{').TrimEnd('}').ToLower(); if (layoutDefinition.Devices.Count > 0) { if (!RenderingAvailable(layoutDefinition, Renderings.BodyContent_Rendering)) { RenderingDefinition quoteSubLayout = new RenderingDefinition(); quoteSubLayout.ItemID = Renderings.BodyContent_Rendering; quoteSubLayout.Placeholder = "page-layout"; quoteSubLayout.UniqueId = renderingUniqueID; deviceDefinition.AddRendering(quoteSubLayout); } else { var rendering = deviceDefinition.GetRendering(Renderings.BodyContent_Rendering); renderingUniqueID = rendering.UniqueId; renderingUniqueID = renderingUniqueID.TrimStart('{').TrimEnd('}').ToLower(); } } RenderingDefinition newRenderingDefinition = new RenderingDefinition(); newRenderingDefinition.ItemID = Renderings.Quote; string placeholderValue = !string.IsNullOrEmpty(renderingUniqueID) ? "/page-layout/body-content_" + renderingUniqueID : "/page-layout/body-content"; newRenderingDefinition.Placeholder = placeholderValue; newRenderingDefinition.Datasource = child.ID.ToString(); deviceDefinition.AddRendering(newRenderingDefinition); } } using (new SecurityDisabler()) { parentItem.Editing.BeginEdit(); if (parentItem.Editing.IsEditing) { parentItem["__Renderings"] = layoutDefinition.ToXml(); } parentItem.Editing.EndEdit(); } }
/// <summary> /// Sets the definition. /// </summary> /// <param name="layout"> /// The layout. /// </param> private void SetLayoutDefinition(LayoutDefinition layout) { Assert.ArgumentNotNull(layout, "layout"); WebUtil.SetSessionValue(HandleName, layout.ToXml()); }
private static void SaveLayoutDefinition(LayoutDefinition definition) { Assert.ArgumentNotNull(definition, "layout"); WebUtil.SetSessionValue(GetSessionHandle(), definition.ToXml()); }
// update datasource references on target page item private void UpdateDatasourcePaths(Item target) { try { if (target != null) { //Log.Info("target: " + target.ID + " - " + target.Name, this); // get all target's renderings RenderingReference[] renderings = target.Visualization.GetRenderings(Context.Device, true); //Log.Info("Total # target's renderings: " + renderings.Length + ".", this); Item targetResourceFolder = GetResourceFolder(target.Paths.Path); string targetDatasourceID = string.Empty; // Get the layout definitions and the device LayoutDefinition sharedLayout = LayoutDefinition.Parse(LayoutField.GetFieldValue(target.Fields[FieldIDs.LayoutField])); LayoutDefinition finalLayout = LayoutDefinition.Parse(LayoutField.GetFieldValue(target.Fields[FieldIDs.FinalLayoutField])); DeviceDefinition device = finalLayout.Devices[0] as DeviceDefinition; //int count = 1; foreach (RenderingReference rend in renderings) { string renderingDatasourceID = rend.Settings.DataSource; if (!String.IsNullOrEmpty(renderingDatasourceID)) { //Log.Info("rend[" + count + "] = " + rend.RenderingItem.Name + " = " + rend.RenderingID.ToString(), this); string renderingUID = rend.UniqueId; //Log.Info("rend.UniqueId = " + renderingUID, this); // get target datasource ID if (targetResourceFolder != null && targetResourceFolder.HasChildren) { //Log.Info("targetResourceFolder has " + targetResourceFolder.Children.Count + " children.", this); targetDatasourceID = GetTargetDatasourceID(targetResourceFolder.Paths.Path, renderingDatasourceID); } else { if (ItemIsSourceRootChild(renderingDatasourceID)) { targetDatasourceID = GetTargetDatasourceID(renderingDatasourceID); } else { return; } // datasource exists in area of content tree that was not copied, do not update } //Log.Info("targetDatasourceID: " + targetDatasourceID, this); // Update rendering datasource value accordingly and verify if (!String.IsNullOrEmpty(targetDatasourceID)) { //Log.Info("Datasource should be pointing to : " + targetDatasourceID + " | but it is pointing to: " + renderingDatasourceID, this); device.GetRenderingByUniqueId(renderingUID).Datasource = targetDatasourceID; VerifyReferenceUpdate(target, device.GetRenderingByUniqueId(renderingUID).Datasource); // Save the layout changes target.Editing.BeginEdit(); ItemUtil.SetLayoutDetails(target, sharedLayout.ToXml(), finalLayout.ToXml()); target.Editing.EndEdit(); } } //count++; } } } catch (Exception ex) { Log.Error("Failed to update item references after CopyTo - " + target.ID.ToString() + " - " + ex.Message, ex, this); } }
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, ClearOnIndexUpdate = Instance.ClearOnIndexUpdate, VaryByData = Instance.VaryByData, VaryByDevice = Instance.VaryByDevice, VaryByLogin = Instance.VaryByLogin, VaryByParameters = Instance.VaryByParameters, VaryByQueryString = Instance.VaryByQueryString, VaryByUser = Instance.VaryByUser }; if (Parameter != null && Parameter.Keys.Count > 0) { var parameters = new UrlString(rendering.Parameters ?? string.Empty); var renderingItem = Sitecore.Client.ContentDatabase.GetItem(Instance.ItemID); if (renderingItem == null) { WriteError(new ItemNotFoundException($"The rendering with Id {Instance.ItemID} could not be found in the ContentDatabase."), ErrorIds.ItemNotFound, ErrorCategory.ObjectNotFound, this); return; } var standardValuesItem = RenderingItem.GetStandardValuesItemFromParametersTemplate(renderingItem); var excludedFields = new List <string> { "additional parameters", "placeholder", "data source", "caching", "personalization", "test" }; foreach (Field standardValueField in standardValuesItem.Fields) { var fieldName = standardValueField.Name; var lowerInvariant = fieldName.ToLowerInvariant(); if (excludedFields.Contains(lowerInvariant)) { continue; } if (!RenderingItem.IsRenderingParameterField(standardValueField)) { continue; } var fieldValue = standardValueField.Value ?? string.Empty; if (parameters.Parameters.AllKeys.Contains(fieldName)) { parameters.Parameters[fieldName] = fieldValue; } else { parameters.Add(fieldName, fieldValue); } } 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(); LayoutField.SetFieldValue(item.Fields[LayoutFieldId], outputXml); }); if (PassThru) { WriteObject(rendering); } }
private List <KeyValuePair <string, string> > ChangeLayoutFieldForItem(Item currentItem, Field field) { var result = new List <KeyValuePair <string, string> >(); string xml = LayoutField.GetFieldValue(field); try { if (!string.IsNullOrWhiteSpace(xml)) { LayoutDefinition details = LayoutDefinition.Parse(xml); var device = details.GetDevice(DefaultDeviceId); DeviceItem deviceItem = currentItem.Database.Resources.Devices["Default"]; RenderingReference[] renderings = currentItem.Visualization.GetRenderings(deviceItem, false); bool needUpdate = false; foreach (RenderingDefinition rendering in device.Renderings) { if (!string.IsNullOrWhiteSpace(rendering.Placeholder)) { var newPlaceholder = rendering.Placeholder; string placeHolderRegex = "([0-9a-f]{8}[-][0-9a-f]{4}[-][0-9a-f]{4}[-][0-9a-f]{4}[-][0-9a-f]{12})$"; foreach (Match match in Regex.Matches(newPlaceholder, placeHolderRegex, RegexOptions.IgnoreCase)) { var renderingId = match.Value; var newRenderingId = "-{" + renderingId.Substring(0) + "}-0"; newPlaceholder = newPlaceholder.Replace("_" + match.Value, newRenderingId); needUpdate = true; } if (newPlaceholder.Contains("_-{")) { newPlaceholder = newPlaceholder.Replace("_-{", "-{"); needUpdate = true; } //newPlaceholder = newPlaceholder.Replace("_-", "-"); rendering.Placeholder = newPlaceholder; } } if (needUpdate) { string newXml = details.ToXml(); using (new EditContext(currentItem)) { LayoutField.SetFieldValue(field, newXml); } result.Add(new KeyValuePair <string, string>(currentItem.ID.ToString(), currentItem.Name)); //write it to log _log.Info("Updated placeholder for " + currentItem.ID + " - Name - " + currentItem.Name); } } } catch (Exception ex) { Sitecore.Diagnostics.Log.Error("UpcomingEventsandWebinarsController.Default", ex); } return(result); }
public static void UpdateLayoutDefinition(this Item item, LayoutDefinition layoutDefinition) { var layoutField = item.Fields[SitecoreIDs.LayoutFieldId]; LayoutField.SetFieldValue(layoutField, layoutDefinition.ToXml()); }
/// <summary>Sets the definition.</summary> /// <param name="layout">The layout.</param> private static void SetDefinition(LayoutDefinition layout) { Assert.ArgumentNotNull((object)layout, "layout"); WebUtil.SetSessionValue(CustomDeviceEditor.GetSessionHandle(), (object)layout.ToXml()); }