public void Render(ViewContext viewContext, TextWriter writer) { if (viewContext == null) { throw new ArgumentNullException("viewContext"); } var shopifyContext = _themeAdaptor.WorkContext.ToShopifyModel(_themeAdaptor.UrlBuilder); //Set current template shopifyContext.Template = _viewName; var formErrors = new FormErrors(viewContext.ViewData.ModelState); if (shopifyContext.Form == null) { //Set single Form object with errors for shopify compilance shopifyContext.Form = new Form(); shopifyContext.Form.PostedSuccessfully = !String.Equals(viewContext.HttpContext.Request.HttpMethod, "GET", StringComparison.InvariantCultureIgnoreCase); if (formErrors.Any()) { shopifyContext.Form.Errors = formErrors; shopifyContext.Form.PostedSuccessfully = false; } } // Copy data from the view context over to DotLiquid var parameters = shopifyContext.ToLiquid() as Dictionary <string, object>; //Add settings to context parameters.Add("settings", _themeAdaptor.GetSettings()); foreach (var item in viewContext.ViewData) { parameters.Add(Template.NamingConvention.GetMemberName(item.Key), item.Value); } foreach (var item in viewContext.TempData) { parameters.Add(Template.NamingConvention.GetMemberName(item.Key), item.Value); } var viewTemplate = _themeAdaptor.RenderTemplateByName(_viewName, parameters); var masterViewName = _masterViewName; object layoutFromTemplate; if (parameters.TryGetValue("layout", out layoutFromTemplate)) { masterViewName = layoutFromTemplate.ToString(); } //if layout specified need render with master page if (!String.IsNullOrEmpty(masterViewName)) { //add special placeholder 'content_for_layout' to content it will be replaced in master page by main content parameters.Add("content_for_layout", viewTemplate); viewTemplate = _themeAdaptor.RenderTemplateByName(masterViewName, parameters); } writer.Write(viewTemplate); }
public void Render(ViewContext viewContext, TextWriter writer) { if (viewContext == null) throw new ArgumentNullException("viewContext"); var shopifyContext = _themeAdaptor.WorkContext.ToShopifyModel(_themeAdaptor.UrlBuilder); //Set current template shopifyContext.Template = _viewName; var formErrors = new FormErrors(viewContext.ViewData.ModelState); if (shopifyContext.Form == null) { //Set single Form object with errors for shopify compilance shopifyContext.Form = new Form(); shopifyContext.Form.PostedSuccessfully = !String.Equals(viewContext.HttpContext.Request.HttpMethod, "GET", StringComparison.InvariantCultureIgnoreCase); if (formErrors.Any()) { shopifyContext.Form.Errors = formErrors; shopifyContext.Form.PostedSuccessfully = false; } } // Copy data from the view context over to DotLiquid var parameters = shopifyContext.ToLiquid() as Dictionary<string, object>; //Add settings to context parameters.Add("settings", _themeAdaptor.GetSettings()); foreach (var item in viewContext.ViewData) { parameters.Add(Template.NamingConvention.GetMemberName(item.Key), item.Value); } foreach (var item in viewContext.TempData) { parameters.Add(Template.NamingConvention.GetMemberName(item.Key), item.Value); } var viewTemplate = _themeAdaptor.RenderTemplateByName(_viewName, parameters); var masterViewName = _masterViewName; object layoutFromTemplate; if (parameters.TryGetValue("layout", out layoutFromTemplate)) { masterViewName = layoutFromTemplate.ToString(); } //if layout specified need render with master page if (!String.IsNullOrEmpty(masterViewName)) { //add special placeholder 'content_for_layout' to content it will be replaced in master page by main content parameters.Add("content_for_layout", viewTemplate); viewTemplate = _themeAdaptor.RenderTemplateByName(masterViewName, parameters); } writer.Write(viewTemplate); }
public Task RenderAsync(ViewContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var shopifyContext = _workContextAccessor.WorkContext.ToShopifyModel(_urlBuilder); //Set current template shopifyContext.Template = _viewName; var formErrors = new FormErrors(context.ViewData.ModelState); if (shopifyContext.Form == null) { //Set single Form object with errors for shopify compilance shopifyContext.Form = new Form(); } shopifyContext.Form.PostedSuccessfully = !string.Equals(context.HttpContext.Request.Method, "GET", StringComparison.InvariantCultureIgnoreCase); if (formErrors.Any()) { shopifyContext.Form.Errors = formErrors; shopifyContext.Form.PostedSuccessfully = false; } //EU General Data Protection Regulation (GDPR) support var consentFeature = context.HttpContext.Features.Get <ITrackingConsentFeature>(); if (consentFeature != null) { shopifyContext.CanTrack = !consentFeature?.CanTrack ?? false; shopifyContext.ConsentCookie = consentFeature?.CreateConsentCookie(); } // Copy data from the view context over to DotLiquid var parameters = shopifyContext.ToLiquid() as Dictionary <string, object>; //Add settings to context parameters.Add("settings", _liquidThemeEngine.GetSettings()); foreach (var item in context.ViewData) { parameters.Add(Template.NamingConvention.GetMemberName(item.Key), item.Value); } foreach (var item in context.TempData) { parameters.Add(Template.NamingConvention.GetMemberName(item.Key), item.Value); } if (!parameters.ContainsKey("error_message") && !string.IsNullOrEmpty(_workContextAccessor.WorkContext.ErrorMessage)) { parameters.Add("error_message", _workContextAccessor.WorkContext.ErrorMessage); } var viewTemplate = _liquidThemeEngine.RenderTemplateByName(_viewName, parameters); // don't use layouts for partial views when masterViewName is not specified if (_isMainPage) { var masterViewName = "theme"; if (parameters.TryGetValue("layout", out object layoutFromTemplate)) { if (layoutFromTemplate != null && !string.IsNullOrEmpty(layoutFromTemplate.ToString())) { masterViewName = layoutFromTemplate.ToString(); } } var headerTemplate = _liquidThemeEngine.RenderTemplateByName("content_header", parameters); //add special placeholder 'content_for_layout' to content it will be replaced in master page by main content parameters.Add("content_for_layout", viewTemplate); parameters.Add("content_for_header", headerTemplate); try { viewTemplate = _liquidThemeEngine.RenderTemplateByName(masterViewName, parameters); } catch (FileSystemException ex) { var message = ex.Message.Replace("<br/>", "\r\n"); throw new InvalidOperationException(message); } } context.Writer.Write(viewTemplate); return(Task.FromResult(0)); }