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", "&copy; {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 }