Error executing template "Designs/TwenteBranding/_parsed/Homepage.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at TwenteBranding.Repository.Helpers.ItemHelper.GetTwenteBrandingItemForItem(String instanceType, Item item, String culture, Boolean useParent) in D:\a\1\s\TwenteBranding.Repository\Helpers\ItemHelper.cs:line 865
at CompiledRazorTemplates.Dynamic.RazorEngine_4468f4e8cfcf439090f0efb5c866fc9e.Execute() in D:\inetpub\wwwroot\www.twente.com\Files\Templates\Designs\TwenteBranding\_parsed\Homepage.parsed.cshtml:line 518
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 TwenteBranding.Repository.Helpers
3 @using TwenteBranding.Models.Constants
4 @using TwenteBranding.Models.Items.Pages
5 @using Dynamicweb.Frontend
6 @{
7 Title("Master view model template");
8 Description("Master view model template");
9 var currentPageView = Dynamicweb.Frontend.PageView.Current();
10 var contentLanguage = currentPageView.GlobalTags.GetTagByName("Global:Area.Lang").Value;
11 var scheme = currentPageView.GlobalTags.GetTagByName("Global:Request.Scheme").Value;
12 var host = currentPageView.GlobalTags.GetTagByName("Global:Request.Host").Value;
13 var requestHost = string.Format("{0}://{1}", scheme, host);
14 var metaDescription = Model.Description;
15 var metaKeywords = Model.Keywords;
16 var homepage = Dynamicweb.Services.Pages.GetPageByNavigationTag(Model.Area.ID, StringConstants.NavigationTags.Homepage);
17 var homepageUrl = SearchEngineFriendlyURLs.GetFriendlyUrl(homepage.ID);
18 var appJs = FileHelper.GetFilenameWithTimeStamp("/Files/static/twentebranding/main.js");
19 var appCss = FileHelper.GetFilenameWithTimeStamp("/Files/static/twentebranding/main.css");
20 var customJs = FileHelper.GetFilenameWithTimeStamp("/Files/static/twentebranding/custom.js");
21 var showMainNavigation = true; // default show main navigation
22 if (Equals(Model.ItemType, nameof(CampaignPage)) && !Model.Item.GetBoolean("ShowMainMenu")) { showMainNavigation = false; } // campaign page items have option to show main navigation, where the default is hide
23 if (Equals(Model.ItemType, nameof(MiniWebsitePage)) && Model.Item.GetBoolean("HideMainMenu")) { showMainNavigation = false; } // mini website page items have option to hide main navigation, where the default is show
24 <html lang="@contentLanguage">
25 <head>
26 <title>@Model.Title</title>
27 @if (!string.IsNullOrWhiteSpace(metaDescription))
28 {
29 <meta name="description" content="@metaDescription" />
30 }
31 @if (!string.IsNullOrWhiteSpace(metaKeywords))
32 {
33 <meta name="keywords" content="@metaKeywords" />
34 }
35 <meta http-equiv="content-language" content='@contentLanguage' />
36 <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
37 <meta http-equiv="imagetoolbar" content="no" />
38 <meta http-equiv="x-dns-prefetch-control" content="on" />
39 <meta http-equiv="x-ua-compatible" content="ie=edge" />
40 <meta name="viewport" content="width=device-width,initial-scale=1">
41 <meta name="application-name" content="innovadis.com" />
42 <meta name="author" content="Innovadis BV, Enschede" />
43 <meta name="copyright" content='Innovadis BV, Enschede, @DateTime.Now.Year' />
44 <meta name="web_author" content="Innovadis BV, Enschede" />
45 <link rel="dns-prefetch" href='@requestHost' />
46 <link rel="icon" href="/favicon.ico" type="image/x-icon" />
47 <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
48 <link rel="stylesheet" type="text/css" href="@appCss" />
49 <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,700|Ubuntu:300i,400,500,700&display=swap"
50 rel="stylesheet">
51 <script rel="prefetch" src="https://cdn.jsdelivr.net/jquery/2.2.4/jquery.min.js"
52 integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
53 <script acync rel="prefetch"
54 src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.bundle.min.js"></script>
55 <script rel="prefetch" type="text/javascript"
56 src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazy/1.7.9/jquery.lazy.min.js"></script>
57 <script rel="prefetch" type="text/javascript"
58 src="//cdnjs.cloudflare.com/ajax/libs/jquery.lazy/1.7.9/jquery.lazy.plugins.min.js"></script>
59 @{ var gaHeadCode = TwenteBranding.Repository.Helpers.AreaHelper.GetAreaItemStringValueBySystemName(TwenteBranding.Models.Constants.StringConstants.WebsiteSettings.Analytics.GoogleAnalyticsTrackingCode);
60 if (!string.IsNullOrWhiteSpace(gaHeadCode))
61 {
62 <script>
63 (function (i, s, o, g, r, a, m) {
64 i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
65 (i[r].q = i[r].q || []).push(arguments)
66 }, i[r].l = 1 * new Date(); a = s.createElement(o),
67 m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
68 })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
69
70 ga('create', '@gaHeadCode', 'auto');
71 ga('send', 'pageview');
72 </script>
73 }
74 }
75 @{ var gtmHeadCode = TwenteBranding.Repository.Helpers.AreaHelper.GetAreaItemStringValueBySystemName(TwenteBranding.Models.Constants.StringConstants.WebsiteSettings.Analytics.GoogleTagManagerTrackingCode);
76 if (!string.IsNullOrWhiteSpace(gtmHeadCode))
77 {
78 <script>
79 (function (w, d, s, l, i) {
80 w[l] = w[l] || []; w[l].push({
81 'gtm.start':
82 new Date().getTime(), event: 'gtm.js'
83 }); var f = d.getElementsByTagName(s)[0],
84 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
85 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
86 })(window, document, 'script', 'dataLayer', '@gtmHeadCode');</script>
87 }
88 }
89 @RenderSnippet("HeadSection")
90 @* Print alternate links and content-language meta tags *@
91 @LanguageHelper.GetMasterLanguageTags(Model.ID)
92 @{ var gtmBodyCode = TwenteBranding.Repository.Helpers.AreaHelper.GetAreaItemStringValueBySystemName(TwenteBranding.Models.Constants.StringConstants.WebsiteSettings.Analytics.GoogleTagManagerTrackingCode);
93 if (!string.IsNullOrWhiteSpace(gtmBodyCode))
94 {
95 var gtmUrl = string.Format("https://www.googletagmanager.com/ns.html?id={0}", gtmBodyCode);
96 <noscript>
97 <iframe src="@gtmUrl" height="0" width="0" style="display:none;visibility:hidden"></iframe>
98 </noscript>
99 }
100 }
101 @{
102 var hotjarKey = TwenteBranding.Repository.Helpers.AreaHelper.GetAreaItemStringValueBySystemName(TwenteBranding.Models.Constants.StringConstants.WebsiteSettings.Hotjar.Key);
103 if (!string.IsNullOrWhiteSpace(hotjarKey))
104 {
105 <!-- Hotjar Tracking Code -->
106 <script>
107 (function(h,o,t,j,a,r){
108 h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
109 h._hjSettings={hjid:@hotjarKey,hjsv:6};
110 a=o.getElementsByTagName('head')[0];
111 r=o.createElement('script');r.async=1;
112 r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
113 a.appendChild(r);
114 })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
115 </script>
116 }
117 }
118 <script>
119 window.STORE_DATA = {
120 googleMapsApiToken: "@AreaHelper.GetAreaItemStringValueBySystemName(TwenteBranding.Models.Constants.StringConstants.WebsiteSettings.GoogleMaps.GoogleMapsApiToken)"
121 }
122 </script>
123 </head>
124 <body>
125 <div id='app'>
126 @if (showMainNavigation)
127 {
128 <text>
129 @using Dynamicweb.Frontend;
130 @using Dynamicweb.Frontend.Navigation;
131 @using Dynamicweb.Security.Permissions;
132 @using TwenteBranding.Repository.Helpers;
133 @using Dynamicweb.Security.UserManagement;
134
135 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
136 @{
137 List<Dynamicweb.Content.Page> topNavigationPages = null;
138 var areaId = Dynamicweb.Frontend.PageView.Current().AreaID;
139 var topNavigationFolderId = GetPageIdByNavigationTag("TopNavigation");
140 var searchResultsPageId = AreaHelper.GetAreaItemStringValueBySystemName(TwenteBranding.Models.Constants.StringConstants.WebsiteSettings.PageIds.SearchResults);
141 var searchUrl = $"/Default.aspx?ID={searchResultsPageId}";
142 var languagePages = Dynamicweb.Services.Pages.GetLanguagePages(Model.ID);
143 var navigationModel = Navigation.GetNavigationViewModel(new NavigationSettings { StartLevel = 1, StopLevel = 1, ExpandMode = ExpandMode.All });
144 var masterAreaPage = Dynamicweb.Services.Pages.GetPagesByAreaID(1).SingleOrDefault(page => page.GetLanguageVersion(Model.Area.ID) != null && page.GetLanguageVersion(Model.Area.ID).ID.Equals(Model.ID));
145 var loginPageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.LoginPage)?.ID ?? 0;
146 var logoffPageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.LogoffPage)?.ID ?? 0;
147 var myTwentePageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.MyTwentePage)?.ID ?? 0;
148 var profilePageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.CompanyProfile)?.ID ?? 0;
149 var cartPageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.Cart)?.ID ?? 0;
150 var cartPartnerProductsPageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.CartPartnerProducts)?.ID ?? 0;
151 var matchmakerPageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.TwentseMatchMakerPage)?.ID ?? 0;
152
153 if (topNavigationFolderId > 0)
154 {
155 var topNavigationPageList = Dynamicweb.Services.Pages.GetPagesByParentID(topNavigationFolderId);
156 if (topNavigationPageList != null && topNavigationPageList.Any())
157 {
158 topNavigationPages = topNavigationPageList.Where(p => p.Active).ToList();
159 }
160 }
161
162 var extranetPageIds = new List<int>();
163 extranetPageIds.Add(logoffPageId);
164 extranetPageIds.Add(matchmakerPageId);
165
166 <header class="navigation-header">
167 <div class="navigation-header__container container">
168
169 <div class="navigation-header__top-bar">
170 @if (topNavigationPages != null && topNavigationPages.Any())
171 {
172 foreach (var topNavigationPage in topNavigationPages)
173 {
174 // NOTE: For login-, logoff- and profilepage permissions have been configured in the CMS. But sometimes the links appear when they should not.
175 // Therefore some lame continues have been added to force them not to render when they shouldn't
176
177 // Preventing us from rendering the login page link when the user is already logged in
178 if (Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() &&
179 Equals(topNavigationPage.ID, loginPageId))
180 {
181 continue;
182 }
183
184 // Preventing us from rendering the extranet content when the user is not logged in
185 if (!Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() &&
186 extranetPageIds.Contains(topNavigationPage.ID))
187 {
188 continue;
189 }
190
191 var topNavigationPageName = topNavigationPage.GetDisplayName();
192 var topNavigationPageTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {topNavigationPageName}".JsEncode();
193 var subPages = Dynamicweb.Services.Pages.GetPagesByParentID(topNavigationPage.ID);
194 <div class="navigation-header__top-bar__item">
195 @if (topNavigationPage.Allowclick)
196 {
197 <a href="@SearchEngineFriendlyURLs.GetFriendlyUrl(topNavigationPage.ID)"
198 title="@topNavigationPageTitle" target="_top">
199 @topNavigationPageName
200 </a>
201 }
202 else
203 {
204 <span title="@topNavigationPageTitle" target="_top">
205 @topNavigationPageName
206 </span>
207 }
208 @if (subPages.Any())
209 {
210 <div class="navigation-header__top-bar__item__subnav">
211 @foreach (var subPage in subPages)
212 {
213
214 // Preventing us from rendering the extranet content when the user is not logged in
215 if (!Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() &&
216 extranetPageIds.Contains(subPage.ID))
217 {
218 continue;
219 }
220
221 var topNavigationSubpageName = subPage.GetDisplayName();
222 var topNavigationSubpageTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {topNavigationSubpageName}".JsEncode();
223 <a href="@SearchEngineFriendlyURLs.GetFriendlyUrl(subPage.ID)"
224 title="@topNavigationSubpageTitle" target="_top">@topNavigationSubpageName</a>
225 }
226 </div>
227 }
228 </div>
229
230 }
231 }
232
233 @foreach (var language in Model.Area.Languages)
234 {
235 var lang = language.Culture.Split('-')[0];
236 var link = "";
237 var listClass = language.IsCurrent ? "active" : "";
238 var langTitle = language.IsCurrent ? string.Empty : $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {language.Name.ToUpper()}".JsEncode();
239 var flag = $"<img src=\"/Admin/Public/GetImage.ashx?Image=/Admin/Images/Flags/flag_{language.Culture.Split('-')[1].ToLower()}.png&Crop=0&Format=webP&Height=20&Width=20&Quality=90\" border=\"0\" alt=\"{langTitle}\" />";
240
241 if (language.IsMaster && !language.IsCurrent)
242 {
243 if (masterAreaPage != null)
244 {
245 link = SearchEngineFriendlyURLs.GetFriendlyUrl(masterAreaPage.ID);
246 }
247 }
248 else if (language.IsCurrent)
249 {
250 link = "javascript:void(0);";
251 }
252 else
253 {
254 foreach (var languagePage in languagePages)
255 {
256 var languageAreaId = language.ID;
257 if (languageAreaId == languagePage.AreaId)
258 {
259 link = SearchEngineFriendlyURLs.GetFriendlyUrl(languagePage.ID);
260 }
261 }
262 }
263 <div class="navigation-header__top-bar__item language @listClass"><a title="@langTitle" href="@link" target="_top">@flag</a></div>
264 }
265 @if (cartPageId > 0 && cartPartnerProductsPageId > 0)
266 {
267 <a href="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(cartPartnerProductsPageId)" class="cart-pp-link hidden"><span class="icon icon--cart icon-color--white"></span></a>
268 <a href="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(cartPageId)" class="cart-link hidden"><span class="icon icon--cart icon-color--white"></span></a>
269 <span class="cart-selector hidden" onclick="EcomHelper.ShowCartSelectorModal();"><span class="icon icon--cart icon-color--white"></span></span>
270 }
271 </div>
272
273 <div class="navigation-header__menu">
274 <a class="navigation-header__logo" href="@homepageUrl">
275 <img src="/Files/Templates/Designs/TwenteBranding/Images/logo/LogoTwenteRGB.svg" alt="Twente Logo">
276 </a>
277 <div class="navigation-header__menu__items">
278 @foreach (var node in navigationModel.Nodes)
279 {
280 <a href="@node.Link" class="navigation-header__menu__items__item button button--white-border">@node.Name</a>
281 }
282 </div>
283 <div class="navigation-header__menu__langselector hidden">
284 @foreach (var language in Model.Area.Languages)
285 {
286 var lang = language.Culture.Split('-')[0];
287 var link = "";
288 var listClass = language.IsCurrent ? "active" : "";
289 var langTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {language.Name}".JsEncode();
290 var flag = $"<img src=\"/Admin/Public/GetImage.ashx?Image=/Admin/Images/Flags/flag_{language.Culture.Split('-')[1].ToLower()}.png&Crop=0&Format=webP&Height=32&Width=32&Quality=90\" border=\"0\" alt=\"{langTitle}\" />";
291 if (language.IsMaster && !language.IsCurrent)
292 {
293 if (masterAreaPage != null)
294 {
295 link = SearchEngineFriendlyURLs.GetFriendlyUrl(masterAreaPage.ID);
296 }
297 }
298 else if (language.IsCurrent)
299 {
300 link = "javascript:void(0);";
301 }
302 else
303 {
304 foreach (var languagePage in languagePages)
305 {
306 var languageAreaId = language.ID;
307 if (languageAreaId == languagePage.AreaId)
308 {
309 link = SearchEngineFriendlyURLs.GetFriendlyUrl(languagePage.ID);
310 }
311 }
312 }
313 <a class="mobile-menu__items__footer__item mobile-menu__items__footer__item--lang button @listClass" title="@langTitle" href="@link" target="_top">@flag</a>
314 }
315 @if (cartPageId > 0 && cartPartnerProductsPageId > 0)
316 {
317 <a href="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(cartPartnerProductsPageId)" class="cart-pp-link hidden"><span class="icon icon--cart icon-color--white"></span></a>
318 <a href="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(cartPageId)" class="cart-link hidden"><span class="icon icon--cart icon-color--white"></span></a>
319 <span class="cart-selector hidden" onclick="EcomHelper.ShowCartSelectorModal();"><span class="icon icon--cart icon-color--white"></span></span>
320 }
321 </div>
322 <div class="navigation-header__menu__search">
323 <search-form search-url="@searchUrl" placeholder-text="@Translate("searchTwente", "Doorzoek Twente.com")"></search-form>
324 </div>
325 <mobile-menu close-button-text="@Translate("Close", "Sluit")">
326 <template v-slot:default>
327 @foreach (var node in navigationModel.Nodes)
328 {
329 <a href="@node.Link" class="mobile-menu__items__button button button--white-border">@node.Name</a>
330 }
331 <search-form search-url="@searchUrl" placeholder-text="@Translate("searchTwente", "Doorzoek Twente.com")"></search-form>
332 </template>
333 <template v-slot:footer>
334 @if (topNavigationPages != null && topNavigationPages.Any())
335 {
336 foreach (var topNavigationPage in topNavigationPages)
337 {
338
339 // Preventing us from rendering the login page link when the user is already logged in
340 if (Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() &&
341 Equals(topNavigationPage.ID, loginPageId))
342 {
343 continue;
344 }
345
346 // Preventing us from rendering the extranet content when the user is not logged in
347 if (!Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() &&
348 extranetPageIds.Contains(topNavigationPage.ID))
349 {
350 continue;
351 }
352
353 var topNavigationPageName = topNavigationPage.GetDisplayName();
354 var topNavigationPageTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {topNavigationPageName}".JsEncode();
355 var topNavigationPageSubPages = Dynamicweb.Services.Pages.GetPagesByParentID(topNavigationPage.ID);
356 <div class="mobile-menu__items__footer__item">
357 @if (topNavigationPage.Allowclick)
358 {
359 <a href="@SearchEngineFriendlyURLs.GetFriendlyUrl(topNavigationPage.ID)"
360 title="@topNavigationPageTitle" target="_top" class="mobile-menu__items__button button button--white-border">
361 @topNavigationPageName
362 </a>
363 }
364 else
365 {
366 <div title="@topNavigationPageTitle" target="_top" class="mobile-menu__items__title">
367 @topNavigationPageName
368 </div>
369 }
370 @if (topNavigationPageSubPages.Any())
371 {
372 foreach (var subPage in topNavigationPageSubPages)
373 {
374 // Preventing us from rendering the extranet content when the user is not logged in
375 if (!Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() &&
376 extranetPageIds.Contains(subPage.ID))
377 {
378 continue;
379 }
380
381 var topNavigationSubpageName = subPage.GetDisplayName();
382 var topNavigationSubpageTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {topNavigationSubpageName}".JsEncode();
383 <a href="@SearchEngineFriendlyURLs.GetFriendlyUrl(subPage.ID)"
384 title="@topNavigationSubpageTitle" target="_top" class="mobile-menu__items__button button button--white-border">@topNavigationSubpageName</a>
385 }
386 }
387 </div>
388 }
389 }
390
391 </template>
392 </mobile-menu>
393 </div>
394
395 <div id="select-cart-modal" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
396 <div class="modal-dialog" role="document">
397 <div class="modal-content">
398 <div class="modal-header">
399 <h2>@Translate("CartSelector_Title", "Welke producten wilt u afrekenen?")</h2>
400 </div>
401 <div class="modal-body">
402 @Translate("CartSelector_Text", "Voor onze partner producten en onze webshop producten hebben wij afzonderlijke afhandelingen, daarom vragen wij u deze apart van elkaar af te rekenen.")
403 <a href="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(cartPartnerProductsPageId)" class="text-button twente-red">@Translate("CartSelector_PartnerProductsLinkText", "Partner producten afrekenen")<div class="icon--arrow-right"></div></a>
404 <a href="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(cartPageId)" class="text-button twente-red">@Translate("CartSelector_WebshopProductsLinkText", "Webshop producten afrekenen")<div class="icon--arrow-right"></div></a>
405 </div>
406 </div>
407 </div>
408 </div>
409 </div>
410 <hr />
411 </header>
412 }
413
414 </text>
415 }
416 <main>
417 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
418 @Title("Homepage template")
419 @Description("View model template for the homepage")
420
421 @Model.Placeholder("Content", "Content", "sort:1")
422
423 </main>
424 @using TwenteBranding.Repository.Helpers
425 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
426 @{
427 var homepageLinkTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {Translate("Homelink_Title", "De homepage")}";
428 }
429 <footer class="background--black flex flex-align-center">
430 <div class="container">
431 @using TwenteBranding.Repository.Helpers
432 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
433
434 @if (Model.Area.Item != null)
435 {
436 <div class='social-media-icons flex'>
437 @foreach (var field in Model.Area.Item.Fields.Where(f => f.SystemName.StartsWith("Sm_")))
438 {
439 if (!string.IsNullOrEmpty(field.GetString()))
440 {
441 <a class='mr-05' rel="noopener" aria-label="@field.Name.JsEncode()" href="@field.GetString()" title="@field.Name.JsEncode()" target="_blank">
442 <div class="icon--@field.SystemName.ToLower() icon-size--x2"></div>
443 </a>
444 }
445 }
446 </div>
447 }
448
449 <div class="footer-link-container">
450 @{
451 var footerNavigationFolderId = GetPageIdByNavigationTag(TwenteBranding.Models.Constants.StringConstants.NavigationTags.FooterNavigation);
452 if (footerNavigationFolderId > 0)
453 {
454 var footerNavigationPageList = Dynamicweb.Services.Pages.GetPagesByParentID(footerNavigationFolderId);
455 if (footerNavigationPageList != null && footerNavigationPageList.Any())
456 {
457 var footerNavigationPages = footerNavigationPageList.Where(page => page.Active).ToList();
458 if (footerNavigationPages.Any())
459 {
460 var footerLinkCounter = 1;
461 foreach (var footerNavigationPage in footerNavigationPages)
462 {
463 var footerNavigationPageName = footerNavigationPage.GetDisplayName();
464 var footerNavigationPageTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {footerNavigationPageName}".JsEncode();
465 var footerNavigationPageLink = $"/Default.aspx?ID={footerNavigationPage.ID}";
466
467 // place last link and copyright together to prevent wrapping on phone
468 if (footerNavigationPages.Count() == footerLinkCounter)
469 {
470 var copyRight = string.Format(Translate("Footer_CopyRight", "© {0} Twente Branding"), DateTime.Now.Year);
471
472 <div class='wrapper'>
473 <a href="@footerNavigationPageLink" title="@footerNavigationPageTitle">@footerNavigationPageName</a>
474 <span>@copyRight</span>
475 </div>
476 }
477 else
478 {
479 <a href="@footerNavigationPageLink" title="@footerNavigationPageTitle">@footerNavigationPageName</a>
480 }
481 footerLinkCounter++;
482 }
483 }
484 }
485 }
486 }
487 </div>
488 </div>
489 <a class='twente-logo' href="@homepageUrl" title="@homepageLinkTitle">
490 <img src="@IconHelper.GetSvgPath("twente", "logo/")" />
491 </a>
492 </footer>
493
494 </div>
495 <aside>
496 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
497 @using TwenteBranding.Repository.Helpers
498 @using System.Linq;
499 @using TwenteBranding.Models.ViewModels
500
501 @{
502 var newsletterSubscriptionModalPageId = GetPageIdByNavigationTag("NewsletterSubscriptionModal");
503 var jobAlertSubscriptionModalPageId = GetPageIdByNavigationTag("JobAlertSubscriptionModal");
504 var jobOffersPageId = GetPageIdByNavigationTag("JobOffers");
505 var jobOfferParentPageId = Dynamicweb.Frontend.PageView.Current().Page.ParentPageId;
506 var utmCampaign = Dynamicweb.Context.Current.Request.QueryString.Get("utm_campaign");
507 var mainHashtagModal = "";
508
509 // Specific pages which must not show a subscription modal (jobalert/newsletter)
510 var twenteLeeftPageId = GetPageIdByNavigationTag("MOT_TwenteLeeft");
511 var jobAlertSubscription = GetPageIdByNavigationTag("JobAlertSubscription");
512 var pageIdsWithoutModal = new List<int> { twenteLeeftPageId, jobAlertSubscription };
513
514 // Get the item for the current page
515 TwenteBrandingItemModel pItem = null;
516 if (Model.ItemId != "1") //Item with ID 1 gives error
517 {
518 pItem = ItemHelper.GetTwenteBrandingItemForPage(
519 Model.ItemId,
520 Dynamicweb.Frontend.PageView.Current().ID.ToString(),
521 Dynamicweb.Frontend.PageView.Current().GlobalTags.GetTagByName("Global:Area.LongLang").Value
522 );
523 }
524
525 if (pItem != null)
526 {
527 // Get main hashtag of the current page item
528 var mainHashtagId = pItem.MainHashtagIds.FirstOrDefault();
529 if (!string.IsNullOrEmpty(mainHashtagId))
530 {
531 var hashtagItem = Dynamicweb.Content.Items.Item.GetItemById(TwenteBranding.Models.Constants.StringConstants.ItemInstanceType.Hashtag, mainHashtagId);
532 mainHashtagModal = $"{ItemHelper.GetItemValue<string>(hashtagItem, TwenteBranding.Models.Constants.StringConstants.CustomItemTypes.BaseArticle.Title)}";
533 }
534 }
535
536 // Dont show a modal on the following pages
537 if (pageIdsWithoutModal.Contains(Model.ID) || mainHashtagModal == "talent")
538 {
539 //do noting
540 }
541 else
542 {
543 // Show modal with link to vacancysubscription page on vacancy page and pages with #talent hashtag
544 if ((Model.ID == jobOffersPageId || jobOfferParentPageId == jobOffersPageId)
545 && jobAlertSubscriptionModalPageId > 0)
546 {
547 @RenderPageContent(jobAlertSubscriptionModalPageId)
548 }
549 // If the jobalert modal pageId has a value and utmCampaing matches the specified value
550 else if (jobAlertSubscriptionModalPageId > 0 && utmCampaign == "Remarketing vacaturebank")
551 {
552 @RenderPageContent(jobAlertSubscriptionModalPageId)
553 }
554 // Else if the newsletter pageId has a value, show the newsletter subscription modal
555 else if (newsletterSubscriptionModalPageId > 0)
556 {
557 @RenderPageContent(newsletterSubscriptionModalPageId)
558 }
559 }
560
561 }
562 </aside>
563 <script src="@customJs"></script>
564 <script src="@appJs"></script>
565 @RenderSnippet("JavascriptBottom")
566 </body>
567 </html>
568 }