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