Tuesday, February 2, 2021

Set rendering datasource programmatically

  

Device definition and renderings


 LayoutField layoutField = new LayoutField(item.Fields[FieldIDs.LayoutField]);                    LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value);                   

                    DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(Context.Device.ID.ToString());                    

                    //DeviceRecords devices = item.Database.Resources.Devices;

                    //DeviceItem defaultDevice = devices.GetAll().Where(d => d.Name.ToLower() == "default").First();

                    // Get the rendering references for the default device

                    //layoutField = item.Fields["__renderings"];

                    RenderingReference[] renderings = layoutField.GetReferences(Context.Device);





using Globus.Feature.Products.Repositories;

using Globus.Feature.Products.Util;

using Globus.Foundation.Extensions.Pipelines.AddFromTemplate;

using Globus.Foundation.SitecoreExtensions.Extensions;

using Sitecore;

using Sitecore.Configuration;

using Sitecore.Data;

using Sitecore.Data.Fields;

using Sitecore.Data.Items;

using Sitecore.Diagnostics;

using Sitecore.Layouts;

using Sitecore.Mvc.Presentation;

using Sitecore.Pipelines.HttpRequest;

using System;

using System.Collections.Generic;

using System.Diagnostics;

using System.Linq;

using System.Net;

using System.Web;

RenderingReference[] renderings = targetItem.Visualization.GetRenderings(Context.Device, true);


                    // Get the layout definitions and the device

                    LayoutField layoutField = new LayoutField(targetItem.Fields[Sitecore.FieldIDs.LayoutField]);

                    LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value);

                    DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString());


                    foreach (RenderingReference rendering in renderings)

                    {

                        bool doUpdate = false;

                        string datasourceToSet = string.Empty;


                        if (rendering.RenderingID == new ID("{E9BC9AAE-3D18-4B5B-978E-BE17FAABEB36}")) // Header

                        {

                            //rendering.Datasource = siteSettings.Fields["Header"].ToString();

                            doUpdate = true;

                            datasourceToSet = siteSettingsItem.Fields["Header"].ToString();

                        }

                        //else if (rendering.ItemID == "{6C0922BC-3B4B-4B89-B691-A3EA476764F7}") // Footer

                        //{

                        //    rendering.Datasource = siteSettings.Fields["Footer"].ToString();

                        //}


                        // Update the renderings datasource value accordingly 


                        if(doUpdate)

                        {

                            deviceDefinition.GetRendering(rendering.RenderingID.ToString()).Datasource = datasourceToSet;


                            // Save the layout changes

                            //targetItem.Editing.BeginEdit();

                            //layoutField.Value = layoutDefinition.ToXml();

                            //targetItem.Editing.EndEdit();

                        }                        

                    }



=========

Altering presentation xml on an item

 using (new Sitecore.SecurityModel.SecurityDisabler())

                    {

                        requestedItem.Add(tempItem.Name, template);


                        //Get layout details from the found item

                        var field = requestedItem.Fields["__Final Renderings"];

                        var layoutXml = Sitecore.Data.Fields.LayoutField.GetFieldValue(field);


                        //Replace header datasource from the one in Canada

                        var newXmlString = layoutXml.Replace("{6FE87552-2098-41F0-B139-71D4F970CB3E}", siteSettingsItem[Templates.SiteSettings.Fields.Footer])

                            .Replace("{C1D1834D-5023-45F9-901A-15FB61396F8C}", siteSettingsItem[Templates.SiteSettings.Fields.Nav])

                            .Replace("{660ACCC9-B012-4CBD-BC0C-E7F2A6701D2F}", siteSettingsItem[Templates.SiteSettings.Fields.Footer]);


                        var tempField = tempItem.Fields["__Final Renderings"];



                        tempItem.Editing.BeginEdit();

                        Sitecore.Data.Fields.LayoutField.SetFieldValue(tempField, newXmlString);

                        tempItem.Editing.EndEdit();

                    }

No comments:

Post a Comment