protected override IEnumerable <Rendering> GetRenderings( XElement layoutDefinition, BuildPageDefinitionArgs args) { // replaced parser with custom one XmlBasedRenderingParser parser = new CDNXmlBasedRenderingParser(); foreach (XElement element1 in layoutDefinition.Elements("d")) { XElement deviceNode = element1; Guid deviceId = deviceNode.GetAttributeValueOrEmpty("id").ToGuid(); // replace layout with CDN layout Guid layoutId = RequestExtensions.IsContextRequestForDynamicData() ? Guid.Parse(Constants.Layout.DefaultCDNLayoutId) : deviceNode.GetAttributeValueOrEmpty("l").ToGuid(); IEnumerable <RenderingInfo> dynamicRenderingsInfo = RequestExtensions.GetDynamicRenderingsInfo(); yield return(this.GetRendering(deviceNode, deviceId, layoutId, "Layout", parser)); foreach (XElement element2 in deviceNode.Elements("r")) { // replacing placeholders to match CDN layout placeholder keys var rendering = this.GetRendering(element2, deviceId, layoutId, element2.Name.LocalName, parser); if (RequestExtensions.IsContextRequestForDynamicData()) { var idMatchRendering = dynamicRenderingsInfo .FirstOrDefault(r => r.RenderingId.ToGuid().Equals(rendering.UniqueId)); if (idMatchRendering != null) { rendering["Placeholder"] = Constants.Layout.DefaultCDNPlaceholder; } else { var placeholderMatchRendering = dynamicRenderingsInfo .FirstOrDefault( r => rendering.Placeholder.StartsWith(r.Placeholder) && !rendering.Placeholder.Equals(r.Placeholder)); if (placeholderMatchRendering != null) { rendering["Placeholder"] = rendering["Placeholder"] .Replace( placeholderMatchRendering.Placeholder.TrimStart('/'), Constants.Layout.DefaultCDNPlaceholder); } } } yield return(rendering); } } }
public override void Process(BuildPageDefinitionArgs args) { Assert.ArgumentNotNull((object)args, "args"); var item = Context.Item; if (item == null) { return; } var itemId = item.ID.Guid; var templateId = item.Template.ID.Guid; var currentLanguage = Context.Language.Name; var renderingBuilder = new RenderingBuilder(); PageDefinition pageDefinition = args.Result; if (pageDefinition == null) { return; } if (SitecoreFeatureToggles.ShouldReplaceLayout(itemId, templateId, currentLanguage)) { //resolve all the renderings from the featuretoggle var layoutReplacement = SitecoreFeatureToggles.GetLayoutReplacement(itemId, templateId, currentLanguage); var layoutRendering = renderingBuilder.GetRenederingById(layoutReplacement.LayoutId); layoutRendering.RenderingType = "Layout"; pageDefinition.Renderings.Add(layoutRendering); foreach (var sublayout in layoutReplacement.Sublayouts) { var rendering = renderingBuilder.GetRenederingById(sublayout.SublayoutId); if (rendering != null) { pageDefinition.Renderings.Add(rendering); } } } else { base.Process(args); var renderingReplacements = SitecoreFeatureToggles.GetAllRenderingReplacements(currentLanguage); //loop through and replace the one I need to replace foreach (var replacement in renderingReplacements) { ProcessRenderings(pageDefinition.Renderings, replacement, renderingBuilder); } } }
protected override IEnumerable <Rendering> GetRenderings(XElement layoutDefinition, BuildPageDefinitionArgs args) { var parser = MvcSettings.GetRegisteredObject <XmlBasedRenderingParser>(); foreach (var node in layoutDefinition.Elements((XName)"d")) { var deviceNode = node; var deviceId = deviceNode.GetAttributeValueOrEmpty("id").ToGuid(); var layoutId = deviceNode.GetAttributeValueOrEmpty("l").ToGuid(); if (args.PageContext.RequestContext.HttpContext.IsAmpRequest()) { layoutId = new Guid(Sitecore.Configuration.Settings.GetSetting("MyProject.AmpLayoutId")); } yield return(this.GetRendering(deviceNode, deviceId, layoutId, "Layout", parser)); foreach (var element2 in deviceNode.Elements((XName)"r")) { yield return(this.GetRendering(element2, deviceId, layoutId, element2.Name.LocalName, parser)); } } }
public override void Process(BuildPageDefinitionArgs args) { Assert.ArgumentNotNull(args, "args"); PageDefinition result = args.Result; if (result == null || result.Renderings == null || result.Renderings.Count <= 0) { return; } if (Helper.IsPrototypeMode()) { var layouts = result.Renderings.Where(r => r.RenderingType.Equals("Layout", StringComparison.OrdinalIgnoreCase)) .ToList(); var layoutMap = new Dictionary <Guid, ID>(); if (layouts.Count > 0) { foreach (var layout in layouts) { var itemResolverInfo = Helper.GetPrototypeItem(layout.LayoutId); if (itemResolverInfo != null) { if (itemResolverInfo.PrototypeItem != null && itemResolverInfo.PrototypeItem.ID.Guid != layout.LayoutId) { layoutMap.Add(layout.LayoutId, itemResolverInfo.PrototypeItem.ID); layout.LayoutId = itemResolverInfo.PrototypeItem.ID.Guid; } else if (!string.IsNullOrEmpty(itemResolverInfo.FilePath)) { layout.Renderer = new ReadFileRenderer { FilePath = itemResolverInfo.FilePath }; } } } } var renderings = result.Renderings.Where(r => r.RenderingType.Equals("r", StringComparison.OrdinalIgnoreCase)) .ToList(); if (renderings.Count > 0) { foreach (var rendering in renderings) { var itemResolverInfo = Helper.GetPrototypeItem(rendering.RenderingItem.InnerItem); if (itemResolverInfo != null) { if (itemResolverInfo.PrototypeItem != null && !itemResolverInfo.PrototypeItem.ID.Guid.ToString("B") .Equals(rendering.RenderingItemPath, StringComparison.OrdinalIgnoreCase)) { rendering.RenderingItemPath = itemResolverInfo.PrototypeItem.ID.Guid.ToString("B"); rendering.RenderingItem = new RenderingItem(itemResolverInfo.PrototypeItem); if (layoutMap.ContainsKey(rendering.LayoutId)) { rendering.LayoutId = layoutMap[rendering.LayoutId].Guid; } rendering.Renderer = null; } else if (!string.IsNullOrEmpty(itemResolverInfo.FilePath)) { rendering.Renderer = new ReadFileRenderer { FilePath = itemResolverInfo.FilePath }; } } } } } }