Error executing template "Designs/OlgerdinVefverslun/_parsed/Frontpage_ViteBridge.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_1d9ce49aee744d44bfddf4645d130292.GetPageStyles() in E:\webcontent\beta.olgerdin.is\Files\Templates\Designs\OlgerdinVefverslun\_parsed\Frontpage_ViteBridge.parsed.cshtml:line 238
at CompiledRazorTemplates.Dynamic.RazorEngine_1d9ce49aee744d44bfddf4645d130292.Execute() in E:\webcontent\beta.olgerdin.is\Files\Templates\Designs\OlgerdinVefverslun\_parsed\Frontpage_ViteBridge.parsed.cshtml:line 227
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
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 Advania.FileSystem;
3 @using Advania.Ecommerce.Infrastructure.Vite;
4 @using Advania.Configuration;
5 @using Advania.Custom;
6 @using Dynamicweb;
7 @using Advania.Users.UserManagement;
8 @using Advania.Users.UserManagement.Extensions;
9 @using Dynamicweb.Security.UserManagement;
10
11 @{
12 var vite = new ViteService(new ViteConfig(Files.GetRelativePath(ConfigManager.General.ViteManifestPath))
13 {
14 ModuleSrc = ConfigManager.General.ViteModuleSrc,
15 PublicPath = ConfigManager.General.VitePublicPath
16 });
17
18 var useViteLocalModule = ConfigManager.Env == AppEnvEnum.Development;
19
20 var contextAttributes = new Dictionary<string, object>() {
21 { "area-id", Model.Area.ID },
22 { "area-name", Model.Area.Name },
23 { "shop-id", Dynamicweb.Content.Services.Areas.GetArea(Model.Area.ID).EcomShopId },
24 { "page-id", Model.ID },
25 { "home-page-id", Model.Area.FirstActivePage.ID },
26 { "user-feed-page-id", GetPageIdByNavigationTag("GetUserFeed") },
27 { "cart-feed-page-id", GetPageIdByNavigationTag("CartFeed") },
28 { "my-pages-page-id", GetPageIdByNavigationTag("MyPages") },
29 { "login-page-id", GetPageIdByNavigationTag("LoginPage") },
30 { "register-page-id", GetPageIdByNavigationTag("RegisterPage") },
31 { "register-company-page-id", GetPageIdByNavigationTag("RegisterCompanyPage") },
32 { "product-search-page-id", GetPageIdByNavigationTag("ProductSearch") },
33 { "active-search-context-page-id", null },
34 { "product-typeahead-page-id", GetPageIdByNavigationTag("ProductTypeaheadSearch") },
35 { "company-invite-page-id", GetPageIdByNavigationTag("CompanyInvitePage") },
36 { "secondary-users-feed-page-id", GetPageIdByNavigationTag("SecondaryUsersFeed") },
37 { "customer-center-list-feed-page-id", GetPageIdByNavigationTag("CustomerCenterListFeed") }
38 };
39
40 if (Model.CurrentUser != null)
41 {
42 contextAttributes["current-user-id"] = Model.CurrentUser.ID;
43 }
44
45 if (Model.Cart != null)
46 {
47 contextAttributes["current-cart-id"] = Model.Cart.ID;
48 }
49
50 /* This loop enables us to have specific page IDs to use for product search & typeahead functionality. It's used to solve */
51 /* Danól being split into 3 departments, each with their own subpage which needs to have its search isolated to their */
52 /* specific products. */
53 var contextSearchPages = Model.Area.Item.GetItems("Context_Search_Pages");
54 if (contextSearchPages != null)
55 {
56 foreach (var item in contextSearchPages)
57 {
58 var topPageContextLink = item.GetLink("Top_Page_Context");
59 if (topPageContextLink != null && topPageContextLink.PageId == Model.TopPage.ID)
60 {
61 var contextSearchPageId = item.GetLink("Search_Page");
62 if (contextSearchPageId != null && contextSearchPageId.PageId != 0)
63 {
64 contextAttributes["active-search-context-page-id"] = contextSearchPageId.PageId;
65 contextAttributes["product-search-page-id"] = contextSearchPageId.PageId;
66 }
67
68 var contextTypeaheadSearchPageId = item.GetLink("Typeahead_Page");
69 if (contextTypeaheadSearchPageId != null && contextTypeaheadSearchPageId.PageId != 0)
70 {
71 contextAttributes["product-typeahead-page-id"] = contextTypeaheadSearchPageId.PageId;
72 }
73 break;
74 }
75 }
76 }
77
78 var myProductsPageId = GetPageIdByNavigationTag("MyProducts");
79 if (myProductsPageId > 0)
80 {
81 var myProductsPage = Dynamicweb.Content.Services.Pages.GetPage(myProductsPageId);
82 if (myProductsPage != null && Dynamicweb.Frontend.SecurityHandler.IsCurrentUserAllowed(myProductsPage))
83 {
84 contextAttributes["my-products-page-id"] = myProductsPageId;
85 }
86 }
87
88 var contextAttributesFormatted = string.Join(" ", contextAttributes.Select(attr => string.Format("{0}='{1}'", attr.Key, attr.Value)));
89
90 var shopContext = Model.Area.Name.ToLower().Contains("danol") ? ShopContext.Danol : ShopContext.Olgerdin;
91
92 if (!Model.IsCurrentUserAllowed)
93 {
94 System.Web.HttpContext.Current.Response.Redirect("/Default.aspx?ID=" + GetPageIdByNavigationTag("LoginPage"));
95 }
96
97 var googleTagManagerID = Model.Area.Item.GetString("Google_Tag_Manager_ID");
98
99
100 /* Restores ability to set background image from Website settings which Ölgerðin & Danól use for Holidaythemes */
101 var layoutStyles = "";
102 if (Model.Area.Item != null)
103 {
104
105 var styles = new Dictionary<string, string>();
106 var image = Model.Area.Item.GetString("Background_Image");
107 if (!string.IsNullOrWhiteSpace(image))
108 {
109 styles.Add("background-image", string.Format("url('{0}')", image));
110 }
111 var backgroundSize = Model.Area.Item.GetString("Background_Image_Size");
112 if (!string.IsNullOrWhiteSpace(backgroundSize))
113 {
114 styles.Add("background-size", backgroundSize);
115 }
116
117 var backgroundRepeat = Model.Area.Item.GetString("Background_Image_Repeat");
118 if (!string.IsNullOrWhiteSpace(backgroundRepeat))
119 {
120 styles.Add("background-repeat", backgroundRepeat);
121 }
122
123 layoutStyles = string.Join(";", styles.Select(prop => string.Format("{0}:{1}", prop.Key, prop.Value)).ToArray());
124 }
125 }
126
127 <!DOCTYPE html>
128 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName">
129 <head>
130 <meta charset="utf-8" />
131 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
132 <meta name="PageID" value="@Model.ID" />
133 @Model.MetaTags
134
135 @if (!string.IsNullOrWhiteSpace(googleTagManagerID))
136 {
137 <script>
138 (function (w, d, s, l, i) {
139 w[l] = w[l] || []; w[l].push({
140 'gtm.start':
141 new Date().getTime(), event: 'gtm.js'
142 }); var f = d.getElementsByTagName(s)[0],
143 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.defer = true; j.src =
144 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
145 })(window, document, 'script', 'dataLayer', '@(googleTagManagerID)');
146 </script>
147 }
148 <title>@Model.Title - @(shopContext == ShopContext.Olgerdin ? "Ölgerðin Egill Skallagrímsson" : "Danól") </title>
149 <style>
150 [v-cloak] {
151 display: none;
152 }
153 </style>
154 <link rel="shortcut icon" type="image/x-icon" href="@Model.Area.Item.GetString("Favicon")" />
155
156 @* Legacy scripts *@
157 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/Prod_Jquery-3.3.1.js" defer></script>
158 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/owl.carousel.min.js" defer></script>
159 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/typeahead-0.11.1.js" defer></script>
160 @if (useViteLocalModule)
161 {
162 @vite.RenderModuleAssets()
163 }
164 else
165 {
166 @vite.RenderManifestAssets()
167 }
168 @* Enable injecting scripts/styles for further down in DW Template renderer, see Files\Templates\eCom7\CheckoutHandler\Borgun3D\Post\Post.cshtml *@
169 @RenderSnippet("MasterHeadEnd")
170 </head>
171
172 <body class="theme theme--@shopContext.ToString().ToLower() scrollbar scrollbar--thick">
173 @{
174 var cacheHit = System.Runtime.Caching.MemoryCache.Default.Get("RUID");
175 if (cacheHit != null)
176 {
177 var ruidInCache = (string)cacheHit;
178
179 if (!string.IsNullOrWhiteSpace(ruidInCache))
180 {
181 <input type="hidden" id="RUID" value="@ruidInCache" />
182 System.Runtime.Caching.MemoryCache.Default.Remove("RUID");
183 }
184 }
185 if (Model.CurrentUser != null)
186 {
187 <input type="hidden" id="UserId" value="@Model.CurrentUser.ID" />
188 }
189 }
190 @if (!string.IsNullOrWhiteSpace(googleTagManagerID))
191 {
192 <noscript>
193 <iframe src="https://www.googletagmanager.com/ns.html?id=@(googleTagManagerID)"
194 height="0" width="0" style="display:none;visibility:hidden"></iframe>
195 </noscript>
196 }
197 <div id="app" v-cloak>
198 <dynamicweb-context-provider @contextAttributesFormatted>
199 <theme-scroll-top-button></theme-scroll-top-button>
200 @Navigation.RenderNavigation("Navigation/Navbar.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings()
201 {
202 StartLevel = 1,
203 StopLevel = 99,
204 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All
205 })
206
207 @{
208 var topPage = Dynamicweb.Content.Services.Pages.GetPage(Model.TopPage.ID);
209 var renderMegamenu = topPage.NavigationTag.Contains("Megamenu");
210
211 if (renderMegamenu)
212 {
213 <div class="legacy">
214 <div class="megamenu-desktop">
215 @Navigation.RenderNavigation("Navigation/Megamenu.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings()
216 {
217 StartLevel = 2,
218 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All,
219 RootPageId = topPage.ID
220 })
221 </div>
222 </div>
223 }
224 }
225
226
227 <layout-master @(renderMegamenu ? "megamenu" : "") style="@layoutStyles">
228 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
229
230
231
232 @functions
233 {
234 string GetPageStyles()
235 {
236 var styles = new Dictionary<string, string>();
237
238 var image = Model.PropertyItem.GetString("Background_Image");
239 if (!string.IsNullOrWhiteSpace(image))
240 {
241 styles.Add("background-image", string.Format("url('{0}')", image));
242 }
243 var backgroundSize = Model.PropertyItem.GetString("Background_Image_Size");
244 if (!string.IsNullOrWhiteSpace(backgroundSize))
245 {
246 styles.Add("background-size", backgroundSize);
247 }
248
249 var backgroundRepeat = Model.PropertyItem.GetString("Background_Image_Repeat");
250 if (!string.IsNullOrWhiteSpace(backgroundRepeat))
251 {
252 styles.Add("background-repeat", backgroundRepeat);
253 }
254
255 return string.Join(";", styles.Select(prop => string.Format("{0}:{1}", prop.Key, prop.Value)).ToArray());
256 }
257 }
258
259 <legacy-provider :is-enabled="true" :is-page="true">
260 <div class="frontPage" style="@GetPageStyles()">
261 <div>
262 @Model.Placeholder("bannerPlaceholder", "Banner Placeholder", "sort:2")
263 </div>
264 <div>
265 @Model.Placeholder("mainContentPlaceholder", "Main Content Placeholder", "default:true;sort:1")
266 </div>
267 </div>
268 </legacy-provider>
269 </layout-master>
270 @Navigation.RenderNavigation("Navigation/Footer.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings()
271 {
272 StartLevel = 1,
273 StopLevel = 99,
274 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All,
275 RootNavigationTag = "Footer",
276 Parameters = new Dictionary<string, object>()
277 {
278 {"serviceDeskNumber", Model.Area.Item.GetString("PhoneNumber") },
279 {"serviceDeskText", Model.Area.Item.GetString("Text_1") },
280 {"companyInformation", Model.Area.Item.GetString("Text_2") }
281 }
282 })
283 @{
284 var currentUser = Dynamicweb.Security.UserManagement.User.GetCurrentFrontendUser();
285 var userManagementService = new UserManagementService();
286
287 if (currentUser != null && !currentUser.IsCustomerUser())
288 {
289 IEnumerable<User> usersForSelection = userManagementService.GetCustomerUsersForUser(currentUser.ID, Pageview.Area.EcomShopId).Result;
290 if (usersForSelection.Count() > 0)
291 {
292 <select-account-prompt></select-account-prompt>
293 }
294 else if (Model.Item == null || Model.Item.SystemName != "UserPage")
295 {
296 var userManagementPageId = GetPageIdByNavigationTag("Advania_UserManagement");
297 if (userManagementPageId > 0)
298 {
299 var userManagementItem = Dynamicweb.Content.Services.Items.GetItemByPageId(GetPageIdByNavigationTag("Advania_UserManagement"), false);
300 if (userManagementItem != null)
301 {
302 int companyAccessAuthParagraphId = -1;
303 object companyAccessAuthObj;
304 if (userManagementItem.TryGetValue("Company_Access_Auth_Paragraph_Id", out companyAccessAuthObj) && companyAccessAuthObj != null)
305 {
306 companyAccessAuthParagraphId = Dynamicweb.Core.Converter.ToInt32(companyAccessAuthObj.ToString());
307 }
308
309 if (companyAccessAuthParagraphId > 0)
310 {
311 <auth-company-access-required-modal>
312 @RenderParagraphContent(companyAccessAuthParagraphId)
313 </auth-company-access-required-modal>
314 }
315 }
316 }
317 }
318 }
319 }
320 <svg-defs></svg-defs>
321 </dynamicweb-context-provider>
322 </div>
323 </body>
324 </html>
325 @* Utility snipper if we need to inject code outside of Master HTML context, like html blocks with injected <script> tags. @see Files/Templates/eCom7/CheckoutHandler/Borgun3D/3DS/ThreeDS.cshtml *@
326 @RenderSnippet("MasterEnd")