public string RenderPageTemplate(int? pageTemplateId, PageRenderModel model) { var pageTemplate = GetById(pageTemplateId); var config = _templateServices.GetConfig(); using (var templateService = new TemplateService(config)) { /* * Get default master template for all content * This template is used for including some scripts or html for all page contents and file contents */ var defaultTemplate = GetDefaultTemplate(); var template = defaultTemplate.Content; template = CurlyBracketParser.ParseProperties(template); template = CurlyBracketParser.ParseRenderBody(template); var layout = TemplateServices.GetTemplateCacheName(defaultTemplate.Name, defaultTemplate.Created, defaultTemplate.Updated); if (Razor.Resolve(layout) == null) { templateService.Compile(template, typeof(PageRenderModel), layout); } /* * Loop all the parent template to compile and render layout */ if (pageTemplate != null) { // Using hierarchy to load all parent templates var pageTemplates = _pageTemplateRepository.GetAll().Where(t => pageTemplate.Hierarchy.Contains(t.Hierarchy)) .OrderBy(t => t.Hierarchy) .Select(t => new { t.Content, t.Name, t.Updated, t.Created }); if (pageTemplates.Any()) { foreach (var item in pageTemplates) { //Convert curly bracket properties to razor syntax template = CurlyBracketParser.ParseProperties(item.Content); //Insert master page for child template and parsing template = InsertMasterPage(template, layout); template = FormatMaster(template); template = templateService.Parse(template, model, null, null); template = ReformatMaster(template); //This used for re-cache the template layout = TemplateServices.GetTemplateCacheName(item.Name, item.Created, item.Updated); //Convert {RenderBody} to @RenderBody() for next rendering template = CurlyBracketParser.ParseRenderBody(template); if (Razor.Resolve(layout) == null) { templateService.Compile(template, typeof(PageRenderModel), layout); } } } } return template; } }
/// <summary> /// Render page content by friendly url /// </summary> /// <param name="url"></param> /// <returns></returns> public PageRenderModel RenderContent(string url) { var page = GetPage(url); if (page != null) { WorkContext.ActivePageId = page.Id; var model = new PageRenderModel(page); if (model.IsFileTemplate) return model; var template = _pageTemplateServices.RenderPageTemplate(page.PageTemplateId, model); if (template.IndexOf(Configurations.RenderBody, StringComparison.Ordinal) > -1) { template = template.Replace(Configurations.RenderBody, "@Raw(Model.Content)"); } template = _templateServices.Parse(template, model, null, page.Title); model.Content = _curlyBracketServices.Render(template); return model; } return null; }
/// <summary> /// Render curly bracket /// </summary> /// <param name="parameters"></param> /// <returns></returns> public string Render(string[] parameters) { ParseParams(parameters); var page = _pageServices.GetById(PageId); if(page == null) { return _localizedResourceServices.T("CurlyBracketsRendering:::PageContent:::Messages:::GetPageContentIdNotFounded:::Page id is invalid. Please check the data again."); } var pageRenderModel = new PageRenderModel(page); var template = _templateServices.GetTemplateByName(Template) ?? _templateServices.GetTemplateByName(DefaultTemplate); return _templateServices.Parse(template.Content, pageRenderModel, null, template.CacheName); }