Register route
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
using Sitecore.Pipelines;
namespace Globus.Feature.API.Pipelines.Initialize
{
public class CustomRoutes
{
public virtual void Process(PipelineArgs args)
{
RouteTable.Routes.MapHttpRoute("Globus.Nav", "globusapi/{controller}/{action}");
}
}
}
==========================
Patch the config
<configuration<
<sitecore>
<pipelines>
<initialize>
<processor type="Globus.Feature.API.Pipelines.Initialize.CustomRoutes, Globus.Feature.API" patch:before="processor[@type='Sitecore.Mvc.Pipelines.Loader.InitializeRoutes, Sitecore.Mvc']" />
</initialize>
</pipelines>
</sitecore>
</configuration>
using Globus.Foundation.SitecoreExtensions.Extensions;
using Sitecore;
using Sitecore.Data;
using Sitecore.Data.Fields;
using Sitecore.Data.Items;
using Sitecore.Layouts;
using System;
using System.Net.Http;
using System.Web;
using System.Web.Http;
namespace Globus.Feature.API.Controllers.UtilityAPIs
{
public class UtilitiesController : ApiController
{
//[System.Web.Http.AcceptVerbs("GET", "POST")]
[System.Web.Http.HttpGet]
//[Route("glob/test")]
public HttpResponseMessage SetDatasources(string itemid)
{
string message = "You have =================== successfully resent navigation components datasources";
try
{
//get item based on id in url
Item homeItem = Context.Database.GetItem(Sitecore.Data.ID.Parse(HttpContext.Current.Request.QueryString["itemid"]));
var siteSettingsItem = SiteExtensions.GetSiteSettingsItem(Context.Site.GetStartItem());
foreach(Item item in homeItem.Axes.GetDescendants())
{
if (item != null && item.Fields[Sitecore.FieldIDs.LayoutField] != null
&& !String.IsNullOrEmpty(item.Fields[Sitecore.FieldIDs.LayoutField].Value))
{
RenderingReference[] renderings = item.Visualization.GetRenderings(Context.Device, true);
// Get the layout definitions and the device
LayoutField layoutField = new LayoutField(item.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(Constants.NavRenderingsIDs.Header)) // Header
{
//rendering.Datasource = siteSettings.Fields["Header"].ToString();
doUpdate = true;
datasourceToSet = siteSettingsItem[Constants.SiteSettings.Fields.Header];
}
else if (rendering.RenderingID == new ID(Constants.NavRenderingsIDs.DesktopNavigation)
|| rendering.RenderingID == new ID(Constants.NavRenderingsIDs.MobileNavigation)) // Nav
{
doUpdate = true;
datasourceToSet = siteSettingsItem[Constants.SiteSettings.Fields.Navigation];
}
else if (rendering.RenderingID == new ID(Constants.NavRenderingsIDs.Footer)) // Footer
{
doUpdate = true;
datasourceToSet = siteSettingsItem[Constants.SiteSettings.Fields.Footer];
}
else if (rendering.RenderingID == new ID(Constants.NavRenderingsIDs.StickyFooter)) // Sticky Footer
{
doUpdate = true;
datasourceToSet = siteSettingsItem[Constants.SiteSettings.Fields.StickyFooter];
}
// Update the renderings datasource value accordingly
//if (doUpdate)
//{
// deviceDefinition.GetRendering(rendering.RenderingID.ToString()).Datasource = datasourceToSet;
// // Save the layout changes
// item.Editing.BeginEdit();
// layoutField.Value = layoutDefinition.ToXml();
// item.Editing.EndEdit();
//}
}
}
////check if item exists and has presentation
//if (item != null
// && item.Fields[Sitecore.FieldIDs.LayoutField] != null
// && !String.IsNullOrEmpty(item.Fields[Sitecore.FieldIDs.LayoutField].Value))
//{
// using (new Sitecore.SecurityModel.SecurityDisabler())
// {
// //Get layout details from the found item
// var field = item.Fields["__Final Renderings"];
// var layoutXml = Sitecore.Data.Fields.LayoutField.GetFieldValue(field);
// //Build new xml for final renderings field value
// var newXmlString = layoutXml
// .Replace("", siteSettingsItem[Constants.SiteSettings.Fields.Header])
// .Replace("", siteSettingsItem[Constants.SiteSettings.Fields.Navigation])
// .Replace("", siteSettingsItem[Constants.SiteSettings.Fields.Footer])
// .Replace("", siteSettingsItem[Constants.SiteSettings.Fields.StickyFooter]);
// //Replace value in final renderings field
// item.Editing.BeginEdit();
// Sitecore.Data.Fields.LayoutField.SetFieldValue(field, newXmlString);
// item.Editing.EndEdit();
// }
//}
}
}
catch (Exception ex)
{
message = "There has been an error resetting navigations components datasources. " + ex.Message;
}
return new HttpResponseMessage()
{
Content = new StringContent(message, System.Text.Encoding.UTF8, "application/json")
};
}
}
}
No comments:
Post a Comment