Wednesday, February 10, 2021

API controllers

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