Error executing template "Designs/Swift/Swift_ProductComponentEdit.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_11837efdb87d4f34921b2a5af70ff540.ExecuteAsync()
at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
2 @using Dynamicweb
3 @using Dynamicweb.Environment
4
5 @{
6 string swiftVersion = ReadFile("/Files/Templates/Designs/Swift/swift_version.txt");
7 @* Branding Themes Fonts *@
8 var brandingPageId = Model.Area.Item.GetLink("BrandingPage") != null ? Model.Area.Item.GetLink("BrandingPage").PageId : 0;
9 var themePageId = Model.Area.Item.GetLink("ThemesPage") != null ? Model.Area.Item.GetLink("ThemesPage").PageId : 0;
10
11 var disableWideBreakpoints = Model.Area?.Item?.GetRawValueString("DisableWideBreakpoints", "default");
12
13 string customHeaderInclude = Model.Area.Item.GetFile("CustomHeaderInclude") != null ? Model.Area.Item.GetFile("CustomHeaderInclude").Name : string.Empty;
14
15 string masterTheme = !string.IsNullOrWhiteSpace(Model.Area.Item.GetRawValueString("Theme")) ? " theme " + Model.Area.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : "";
16
17 string favicon = Model.Area.Item.GetFile("Favicon") != null ? Model.Area.Item.GetFile("Favicon").Path : "/Files/Templates/Designs/Swift/Assets/Images/favicon.png";
18
19 var brandingPage = Dynamicweb.Content.Services.Pages?.GetPage(brandingPageId) ?? null;
20 var themesParagraphLastChanged = Dynamicweb.Content.Services.Paragraphs.GetParagraphsByPageId(themePageId).OrderByDescending(p => p.Audit.LastModifiedAt).FirstOrDefault();
21 var cssLastModified = brandingPage.Audit.LastModifiedAt > themesParagraphLastChanged.Audit.LastModifiedAt ? brandingPage.Audit.LastModifiedAt : themesParagraphLastChanged.Audit.LastModifiedAt;
22
23 var cssStyleFileInfo = new System.IO.FileInfo(Dynamicweb.Core.SystemInformation.MapPath("/Files/Templates/Designs/Swift/Assets/css/styles.css"));
24 var jsFileInfo = new System.IO.FileInfo(Dynamicweb.Core.SystemInformation.MapPath("/Files/Templates/Designs/Swift/Assets/js/scripts.js"));
25
26 string googleTagManagerID = Model.Area.Item.GetString("GoogleTagManagerID");
27 string googleAnalyticsMeasurementID = Pageview.AreaSettings.GetString("GoogleAnalyticsMeasurementID");
28
29 bool allowTracking = true;
30 if (CookieManager.IsCookieManagementActive)
31 {
32 var cookieOptInLevel = CookieManager.GetCookieOptInLevel();
33 allowTracking = cookieOptInLevel == CookieOptInLevel.All || (cookieOptInLevel == CookieOptInLevel.Functional && CookieManager.GetCookieOptInCategories().Contains("Statistical"));
34 }
35
36 // Schema.org details for PDP
37 string productId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("ProductID")) ? Dynamicweb.Context.Current.Request.QueryString.Get("ProductID") : "";
38 bool isProductDetailsPage = !string.IsNullOrEmpty(productId);
39 bool isArticlePage = Model.ItemType == "Swift_Article";
40 string schemaOrgType = string.Empty;
41
42 if(isProductDetailsPage)
43 {
44 schemaOrgType = "itemscope=\"\" itemtype=\"https://schema.org/Product\"";
45 }
46
47 if(isArticlePage)
48 {
49 schemaOrgType = "itemscope=\"\" itemtype=\"https://schema.org/Article\"";
50 }
51 }
52
53 <!doctype html>
54 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName">
55 <head>
56 <!-- @swiftVersion -->
57 @* Required meta tags *@
58 <meta charset="utf-8">
59 <meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0">
60 <link rel="preload" href="/Files/Templates/Designs/Swift/Assets/css/styles.css?@cssStyleFileInfo.LastWriteTime.Ticks" as="style">
61 <link rel="preload" href="/Files/Templates/Designs/Swift/Assets/js/scripts.js?@jsFileInfo.LastWriteTime.Ticks" as="script">
62
63 <link rel="shortcut icon" href="@favicon">
64 <link rel="apple-touch-icon" href="/Files/Templates/Designs/Swift/Assets/Images/logo_transparent.png">
65 <meta http-equiv="X-UA-Compatible" content="ie=edge">
66 <meta name="googlebot-news" content="nosnippet">
67
68 @Model.MetaTags
69
70 <title>@Model.Title</title>
71
72 @* Bootstrap + Swift stylesheet *@
73 <link href="/Files/Templates/Designs/Swift/Assets/css/styles.css?@cssStyleFileInfo.LastWriteTime.Ticks" rel="stylesheet" media="all" type="text/css">
74
75 @if (disableWideBreakpoints != "disableBoth")
76 {
77 <style>
78 @@media ( min-width: 1600px ) {
79 .container-xxl,
80 .container-xl,
81 .container-lg,
82 .container-md,
83 .container-sm,
84 .container {
85 max-width: 1520px;
86 }
87 }
88 </style>
89
90 if (disableWideBreakpoints != "disableUltraWideOnly")
91 {
92 <style>
93 @@media ( min-width: 1920px ) {
94 .container-xxl,
95 .container-xl,
96 .container-lg,
97 .container-md,
98 .container-sm,
99 .container {
100 max-width: 1820px;
101 }
102 }
103 </style>
104 }
105 }
106
107 @* Branding and Themes min stylesheet *@
108 <link href="/Files/Templates/Designs/Swift/_parsed/Swift_css/Swift_styles_@(Model.Area.ID).min.css?@cssLastModified.Ticks" rel="stylesheet" media="all" type="text/css" data-last-modified-content="@cssLastModified">
109 <script src="/Files/Templates/Designs/Swift/Assets/js/scripts.js?@jsFileInfo.LastWriteTime.Ticks"></script>
110
111 <script type="module">
112 swift.Scroll.hideHeadersOnScroll();
113 swift.Scroll.handleAlternativeTheme();
114
115 //Only load if AOS
116 const aosColumns = document.querySelectorAll('[data-aos]');
117 if (aosColumns.length > 0) {
118 swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/js/aos.js?@jsFileInfo.LastWriteTime.Ticks', 'js');
119 document.addEventListener('load.swift.assetloader', function () {
120 AOS.init({ duration: 400, delay: 100, easing: 'ease-in-out', mirror: false, disable: window.matchMedia('(prefers-reduced-motion: reduce)') });
121 });
122 }
123 </script>
124
125 @* Google tag manager *@
126 @if (!string.IsNullOrWhiteSpace(googleTagManagerID) && allowTracking)
127 {
128 <script>
129 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
130 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
131 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
132 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
133 })(window, document, 'script', 'dataLayer', '@(googleTagManagerID)');
134
135 function gtag() { dataLayer.push(arguments); }
136 </script>
137 }
138
139 @if (!string.IsNullOrWhiteSpace(googleAnalyticsMeasurementID) && allowTracking)
140 {
141 var GoogleAnalyticsDebugMode = "";
142 bool isLoggedInBackendUser = false;
143
144 if (Dynamicweb.Security.UserManagement.User.GetCurrentBackendUser() != null) {
145 isLoggedInBackendUser = true;
146 }
147
148 if (Model.Area.Item.GetBoolean("EnableGoogleAnalyticsDebugMode") && @isLoggedInBackendUser)
149 {
150 GoogleAnalyticsDebugMode = ", {'debug_mode': true}";
151 }
152
153 <script async src="https://www.googletagmanager.com/gtag/js?id=@googleAnalyticsMeasurementID"></script>
154 <script>
155 window.dataLayer = window.dataLayer || [];
156 function gtag(){dataLayer.push(arguments);}
157 gtag('js', new Date());
158 gtag('config', '@googleAnalyticsMeasurementID'@GoogleAnalyticsDebugMode);
159 </script>
160 }
161
162 @if (!string.IsNullOrWhiteSpace(customHeaderInclude)) {
163 @RenderPartial($"Components/Custom/{customHeaderInclude}")
164 }
165 </head>
166
167 <body class="brand @(masterTheme)">
168
169 <div data-intersect></div>
170
171 <main id="content" @(schemaOrgType)>
172 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
173 @using System
174 @using Dynamicweb.Ecommerce.ProductCatalog
175
176
177 @{
178 bool isVisualEditor = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("VisualEdit")) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.QueryString.Get("VisualEdit")) : false;
179 string theme = "";
180 string contentPadding = "";
181 string gridContent = "";
182
183 if (Model.PropertyItem != null)
184 {
185 theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : string.Empty;
186
187 contentPadding = Model.Item.GetRawValueString("ContentPadding", "");
188 contentPadding = contentPadding == "none" ? "p-0" : contentPadding;
189 contentPadding = contentPadding == "small" ? "p-2 p-md-3" : contentPadding;
190 contentPadding = contentPadding == "large" ? "p-4 p-md-5" : contentPadding;
191 contentPadding = contentPadding == "small-x" ? "px-2 px-md-3" : contentPadding;
192 contentPadding = contentPadding == "large-x" ? "px-4 px-md-5" : contentPadding;
193 }
194
195 if (Model.Item != null)
196 {
197 gridContent = Model.Grid("Grid", "Grid", "default:true;sort:1", "Page");
198 }
199
200 string viewType = Model.Item.GetRawValueString("ViewType", "3-columns");
201 string viewTypeMobile = Model.Item.GetRawValueString("ViewTypeMobile", "2-columns");
202 string mobileColumns = viewTypeMobile == "list" ? "g-col-12" : "";
203 mobileColumns = viewTypeMobile == "2-columns" ? "g-col-6" : mobileColumns;
204
205 <div class="bg-light w-100 position-relative">
206 <div class="p-5 position-fixed" style="z-index: 10">
207 <h3 class="h5">@Translate("Component builder for"): @Model.Item.GetString("Title")</h3>
208 </div>
209 <div class="container-xl d-flex flex-row align-items-center justify-content-center min-vh-100">
210 <div class="grid w-100">
211 @if (viewType == "list")
212 {
213 <div class="@mobileColumns g-col-lg-12 shadow @contentPadding @theme p-2">
214 @gridContent
215 </div>
216 }
217 @if (viewType == "2-columns")
218 {
219 <div class="@mobileColumns g-col-lg-6 shadow @contentPadding @theme p-2">
220 @gridContent
221 </div>
222 <div class="@mobileColumns g-col-lg-6 bg-black" style="opacity: 10%"></div>
223 }
224 @if (viewType == "3-columns")
225 {
226 <div class="@mobileColumns g-col-lg-4 shadow @contentPadding @theme p-2">
227 @gridContent
228 </div>
229 <div class="@mobileColumns g-col-lg-4 bg-black" style="opacity: 10%"></div>
230 <div class="@mobileColumns g-col-lg-4 bg-black" style="opacity: 10%"></div>
231 }
232 @if (viewType == "4-columns")
233 {
234 <div class="@mobileColumns g-col-lg-3 shadow @contentPadding @theme p-2">
235 @gridContent
236 </div>
237 <div class="@mobileColumns g-col-lg-3 bg-black" style="opacity: 10%"></div>
238 <div class="@mobileColumns g-col-lg-3 bg-black" style="opacity: 10%"></div>
239 <div class="@mobileColumns g-col-lg-3 bg-black" style="opacity: 10%"></div>
240 }
241 @if (viewType == "6-columns")
242 {
243 <div class="@mobileColumns g-col-lg-2 shadow @contentPadding @theme p-2">
244 @gridContent
245 </div>
246 <div class="@mobileColumns g-col-lg-2 bg-black" style="opacity: 10%"></div>
247 <div class="@mobileColumns g-col-lg-2 bg-black" style="opacity: 10%"></div>
248 <div class="@mobileColumns g-col-lg-2 bg-black" style="opacity: 10%"></div>
249 <div class="@mobileColumns g-col-lg-2 bg-black" style="opacity: 10%"></div>
250 <div class="@mobileColumns g-col-lg-2 bg-black" style="opacity: 10%"></div>
251 <div class="@mobileColumns g-col-lg-2 bg-black" style="opacity: 10%"></div>
252 }
253 </div>
254 </div>
255 </div>
256 }
257
258 <script>
259 document.querySelector('#VisualEditoForcedTopHeight').style.height = 0;
260 </script>
261
262 </main>
263
264 @* Render any offcanvas menu here *@
265 @RenderSnippet("offcanvas")
266 </body>
267
268 </html>
269