コード例 #1
0
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            if (CurrentPage == null)
            {
                output.Content.SetHtmlContent("Page object (sde-page) cannot be null");
                return;
            }

            if (ModuleActionResults == null)
            {
                output.Content.SetHtmlContent("Module action results  (sde-module-results) cannot be null");
                return;
            }

            if (CurrentPage.Layout == null)
            {
                output.Content.SetHtmlContent("Layout is not configured, choose a layout");
                return;
            }

            try
            {
                ((HtmlHelper)_htmlHelper).Contextualize(ViewContext);

                PageLayout pageLayout = new PageLayout();
                pageLayout.Name = CurrentPage.Layout.Name;

                var properties = _propertyRepository.GetProperties();
                pageLayout.PlaceHolders = JsonConvert.DeserializeObject <List <PlaceHolder> >(CurrentPage.Layout.Config);

                GetPropertyValue(pageLayout.PlaceHolders, properties);

                PageContents = Mapper.Map <ICollection <PageContent> >(CurrentPage.PageContent);

                //Copy property options from master data
                if (PageContents != null && PageContents.Count > 0)
                {
                    foreach (var pageContent in PageContents)
                    {
                        if (pageContent.ContentType.Properties != null && pageContent.ContentType.Properties.Count > 0)
                        {
                            foreach (var prop in pageContent.ContentType.Properties)
                            {
                                var propValue = pageContent.Properties.FirstOrDefault(p => p.Id == prop.Id);
                                if (propValue != null)
                                {
                                    propValue.OptionListId = prop.OptionListId;
                                    propValue.OptionList   = prop.OptionList;
                                }
                            }
                        }
                    }
                }

                if (pageLayout.PlaceHolders != null && pageLayout.PlaceHolders.Count > 0)
                {
                    HtmlContentBuilder result = RenderContentItems(pageLayout.PlaceHolders);
                    if (ModuleActionResults.Count > 0)
                    {
                        //One or more modules are not added in containers
                        foreach (var moduleActionResult in ModuleActionResults)
                        {
                            if (moduleActionResult.Value != null && moduleActionResult.Value.Count > 0)
                            {
                                foreach (var contentResult in moduleActionResult.Value)
                                {
                                    //result += contentResult.HtmlResult;
                                    result.AppendHtml(contentResult.HtmlResult);
                                }
                            }
                        }
                    }
                    output.Content.SetHtmlContent(result);

                    //Release all resources
                    pageLayout.RegisterForDispose(ViewContext.HttpContext);
                    PageContents.GetEnumerator().RegisterForDispose(ViewContext.HttpContext);
                    ModuleActionResults.GetEnumerator().RegisterForDispose(ViewContext.HttpContext);
                    pageLayout.RegisterForDispose(ViewContext.HttpContext);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #2
0
        private IHtmlContent RenderContentItem(PlaceHolder placeHolder)
        {
            IHtmlContent htmlContentItems = null;

            if (placeHolder != null)
            {
                //string currentResult = "";
                var htmlCurrentResult = new HtmlContentBuilder();

                List <ContentResult> currentResults = new List <ContentResult>();
                List <ContentResult> moduleResult   = null;
                var layoutType = placeHolder.Type;
                ViewContext.ViewData["isEditMode"] = false;


                if (ModuleActionResults.ContainsKey(placeHolder.Id.ToString()))
                {
                    //Modules
                    if (ModuleActionResults.TryGetValue(placeHolder.Id.ToString(), out moduleResult))
                    {
                        //sb.Append(moduleResult);
                        ModuleActionResults.Remove(placeHolder.Id.ToString());
                        currentResults.AddRange(moduleResult);
                    }
                }

                if (PageContents.Any(pc => pc.ContainerId == placeHolder.Id))
                {
                    //Page contents
                    var pageContents = PageContents
                                       .Where(pc => pc.ContainerId == placeHolder.Id)
                                       .OrderBy(pc => pc.SortOrder).ToList();
                    foreach (var pageContent in pageContents)
                    {
                        string  typeName           = pageContent.ContentType.Name;
                        var     contentTranslation = pageContent.PageContentTranslation.FirstOrDefault(t => t.CultureCode.ToLower() == CurrentCulture.ToString().ToLower());
                        dynamic content            = (contentTranslation != null) ? SDJsonConvert.DeserializeObject <dynamic>(contentTranslation.ContentData) : null;

                        if (content != null)
                        {
                            var dynamicContent = new DynamicContent
                            {
                                PageContent = pageContent,
                                Content     = content
                            };

                            string contentTypesViewPath = string.Format(Globals.ContentTypesViewPath, _scopeService.PageContext.SelectedTheme, typeName);

                            var htmlPageContent = _htmlHelper.Partial(contentTypesViewPath, dynamicContent);
                            //var contentResult = GetString(htmlContent);
                            currentResults.Add(new ContentResult
                            {
                                //Result = contentResult,
                                HtmlResult = htmlPageContent,
                                SortOrder  = pageContent.SortOrder
                            });
                        }
                    }
                }

                //var placeHolderResult = RenderContentItems(placeHolder.PlaceHolders);
                //currentResults.Add(new ContentResult
                //{
                //    HtmlResult = placeHolderResult,
                //    SortOrder = placeHolder.SortOrder
                //});

                if (placeHolder.PlaceHolders != null && placeHolder.PlaceHolders.Count > 0)
                {
                    foreach (var childPlaceHolder in placeHolder.PlaceHolders)
                    {
                        var placeHolderResult = RenderContentItem(childPlaceHolder);
                        currentResults.Add(new ContentResult
                        {
                            HtmlResult = placeHolderResult,
                            SortOrder  = childPlaceHolder.SortOrder
                        });
                    }
                }


                var sortedResult = currentResults.OrderBy(r => r.SortOrder).ToList();
                foreach (var contentResult in sortedResult)
                {
                    //currentResult += contentResult.Result;
                    htmlCurrentResult.AppendHtml(contentResult.HtmlResult);
                }

                var layoutContent = new LayoutContent
                {
                    PlaceHolder   = placeHolder,
                    ContentResult = htmlCurrentResult
                };

                htmlContentItems = _htmlHelper.Partial(string.Format(Globals.LayoutTypesPath, _scopeService.PageContext.SelectedTheme, layoutType), layoutContent);
                //var layoutResult = GetString(htmlContent);
                //sb.Append(layoutResult);
            }

            return(htmlContentItems);
        }