Error executing template "Designs/TwenteBranding/_parsed/PartnerArticle.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_99e77d1583f9478388ffe7e4f8a9dbff.Execute() in D:\inetpub\wwwroot\www.twente.com\Files\Templates\Designs\TwenteBranding\_parsed\PartnerArticle.parsed.cshtml:line 472
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 trengoKey = TwenteBranding.Repository.Helpers.AreaHelper.GetAreaItemStringValueBySystemName(TwenteBranding.Models.Constants.StringConstants.WebsiteSettings.Trengo.Key); 103 if (!string.IsNullOrWhiteSpace(trengoKey)) 104 { 105 <script type="text/javascript"> 106 window.Trengo = window.Trengo || {}; 107 window.Trengo.key = "@trengoKey"; 108 109 //TWB-802 - hide the message container 110 window.Trengo.on_ready = function () { 111 $(".message-container", $('iframe.trengo-vue-iframe').contents()).hide(); 112 }; 113 114 (function(d, script, t) { 115 script = d.createElement('script'); 116 script.type = 'text/javascript'; 117 script.async = true; 118 script.src = 'https://static.widget.trengo.eu/embed.js'; 119 d.getElementsByTagName('head')[0].appendChild(script); 120 }(document)); 121 122 </script> 123 } 124 }*@ 125 @{ 126 var hotjarKey = TwenteBranding.Repository.Helpers.AreaHelper.GetAreaItemStringValueBySystemName(TwenteBranding.Models.Constants.StringConstants.WebsiteSettings.Hotjar.Key); 127 if (!string.IsNullOrWhiteSpace(hotjarKey)) 128 { 129 <!-- Hotjar Tracking Code --> 130 <script> 131 (function(h,o,t,j,a,r){ 132 h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; 133 h._hjSettings={hjid:@hotjarKey,hjsv:6}; 134 a=o.getElementsByTagName('head')[0]; 135 r=o.createElement('script');r.async=1; 136 r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; 137 a.appendChild(r); 138 })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); 139 </script> 140 } 141 } 142 <script> 143 window.STORE_DATA = { 144 googleMapsApiToken: "@AreaHelper.GetAreaItemStringValueBySystemName(TwenteBranding.Models.Constants.StringConstants.WebsiteSettings.GoogleMaps.GoogleMapsApiToken)" 145 } 146 </script> 147 </head> 148 <body> 149 <div id='app'> 150 @if (showMainNavigation) 151 { 152 <text> 153 @using Dynamicweb.Frontend; 154 @using Dynamicweb.Frontend.Navigation; 155 @using Dynamicweb.Security.Permissions; 156 @using TwenteBranding.Repository.Helpers; 157 @using Dynamicweb.Security.UserManagement; 158 159 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 160 @{ 161 List<Dynamicweb.Content.Page> topNavigationPages = null; 162 var areaId = Dynamicweb.Frontend.PageView.Current().AreaID; 163 var topNavigationFolderId = GetPageIdByNavigationTag("TopNavigation"); 164 var searchResultsPageId = AreaHelper.GetAreaItemStringValueBySystemName(TwenteBranding.Models.Constants.StringConstants.WebsiteSettings.PageIds.SearchResults); 165 var searchUrl = $"/Default.aspx?ID={searchResultsPageId}"; 166 var languagePages = Dynamicweb.Services.Pages.GetLanguagePages(Model.ID); 167 var navigationModel = Navigation.GetNavigationViewModel(new NavigationSettings { StartLevel = 1, StopLevel = 1, ExpandMode = ExpandMode.All }); 168 var masterAreaPage = Dynamicweb.Services.Pages.GetPagesByAreaID(1).SingleOrDefault(page => page.GetLanguageVersion(Model.Area.ID) != null && page.GetLanguageVersion(Model.Area.ID).ID.Equals(Model.ID)); 169 var loginPageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.LoginPage)?.ID ?? 0; 170 var logoffPageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.LogoffPage)?.ID ?? 0; 171 var myTwentePageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.MyTwentePage)?.ID ?? 0; 172 var profilePageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.CompanyProfile)?.ID ?? 0; 173 var cartPageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.Cart)?.ID ?? 0; 174 var cartPartnerProductsPageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.CartPartnerProducts)?.ID ?? 0; 175 var matchmakerPageId = Dynamicweb.Services.Pages.GetPageByNavigationTag(areaId, TwenteBranding.Models.Constants.StringConstants.NavigationTags.TwentseMatchMakerPage)?.ID ?? 0; 176 177 if (topNavigationFolderId > 0) 178 { 179 var topNavigationPageList = Dynamicweb.Services.Pages.GetPagesByParentID(topNavigationFolderId); 180 if (topNavigationPageList != null && topNavigationPageList.Any()) 181 { 182 topNavigationPages = topNavigationPageList.Where(p => p.Active).ToList(); 183 } 184 } 185 186 var extranetPageIds = new List<int>(); 187 extranetPageIds.Add(logoffPageId); 188 extranetPageIds.Add(matchmakerPageId); 189 190 <header class="navigation-header"> 191 <div class="navigation-header__container container"> 192 193 <div class="navigation-header__top-bar"> 194 @if (topNavigationPages != null && topNavigationPages.Any()) 195 { 196 foreach (var topNavigationPage in topNavigationPages) 197 { 198 // NOTE: For login-, logoff- and profilepage permissions have been configured in the CMS. But sometimes the links appear when they should not. 199 // Therefore some lame continues have been added to force them not to render when they shouldn't 200 201 // Preventing us from rendering the login page link when the user is already logged in 202 if (Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() && 203 Equals(topNavigationPage.ID, loginPageId)) 204 { 205 continue; 206 } 207 208 // Preventing us from rendering the extranet content when the user is not logged in 209 if (!Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() && 210 extranetPageIds.Contains(topNavigationPage.ID)) 211 { 212 continue; 213 } 214 215 var topNavigationPageName = topNavigationPage.GetDisplayName(); 216 var topNavigationPageTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {topNavigationPageName}".JsEncode(); 217 var subPages = Dynamicweb.Services.Pages.GetPagesByParentID(topNavigationPage.ID); 218 <div class="navigation-header__top-bar__item"> 219 @if (topNavigationPage.Allowclick) 220 { 221 <a href="@SearchEngineFriendlyURLs.GetFriendlyUrl(topNavigationPage.ID)" 222 title="@topNavigationPageTitle" target="_top"> 223 @topNavigationPageName 224 </a> 225 } 226 else 227 { 228 <span title="@topNavigationPageTitle" target="_top"> 229 @topNavigationPageName 230 </span> 231 } 232 @if (subPages.Any()) 233 { 234 <div class="navigation-header__top-bar__item__subnav"> 235 @foreach (var subPage in subPages) 236 { 237 238 // Preventing us from rendering the extranet content when the user is not logged in 239 if (!Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() && 240 extranetPageIds.Contains(subPage.ID)) 241 { 242 continue; 243 } 244 245 var topNavigationSubpageName = subPage.GetDisplayName(); 246 var topNavigationSubpageTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {topNavigationSubpageName}".JsEncode(); 247 <a href="@SearchEngineFriendlyURLs.GetFriendlyUrl(subPage.ID)" 248 title="@topNavigationSubpageTitle" target="_top">@topNavigationSubpageName</a> 249 } 250 </div> 251 } 252 </div> 253 254 } 255 } 256 257 @foreach (var language in Model.Area.Languages) 258 { 259 var lang = language.Culture.Split('-')[0]; 260 var link = ""; 261 var listClass = language.IsCurrent ? "active" : ""; 262 var langTitle = language.IsCurrent ? string.Empty : $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {language.Name.ToUpper()}".JsEncode(); 263 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}\" />"; 264 265 if (language.IsMaster && !language.IsCurrent) 266 { 267 if (masterAreaPage != null) 268 { 269 link = SearchEngineFriendlyURLs.GetFriendlyUrl(masterAreaPage.ID); 270 } 271 } 272 else if (language.IsCurrent) 273 { 274 link = "javascript:void(0);"; 275 } 276 else 277 { 278 foreach (var languagePage in languagePages) 279 { 280 var languageAreaId = language.ID; 281 if (languageAreaId == languagePage.AreaId) 282 { 283 link = SearchEngineFriendlyURLs.GetFriendlyUrl(languagePage.ID); 284 } 285 } 286 } 287 <div class="navigation-header__top-bar__item language @listClass"><a title="@langTitle" href="@link" target="_top">@flag</a></div> 288 } 289 @if (cartPageId > 0 && cartPartnerProductsPageId > 0) 290 { 291 <a href="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(cartPartnerProductsPageId)" class="cart-pp-link hidden"><span class="icon icon--cart icon-color--white"></span></a> 292 <a href="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(cartPageId)" class="cart-link hidden"><span class="icon icon--cart icon-color--white"></span></a> 293 <span class="cart-selector hidden" onclick="EcomHelper.ShowCartSelectorModal();"><span class="icon icon--cart icon-color--white"></span></span> 294 } 295 </div> 296 297 <div class="navigation-header__menu"> 298 <a class="navigation-header__logo" href="@homepageUrl"> 299 <img src="/Files/Templates/Designs/TwenteBranding/Images/logo/LogoTwenteRGB.svg" alt="Twente Logo"> 300 </a> 301 <div class="navigation-header__menu__items"> 302 @foreach (var node in navigationModel.Nodes) 303 { 304 <a href="@node.Link" class="navigation-header__menu__items__item button button--white-border">@node.Name</a> 305 } 306 </div> 307 <div class="navigation-header__menu__langselector hidden"> 308 @foreach (var language in Model.Area.Languages) 309 { 310 var lang = language.Culture.Split('-')[0]; 311 var link = ""; 312 var listClass = language.IsCurrent ? "active" : ""; 313 var langTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {language.Name}".JsEncode(); 314 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}\" />"; 315 if (language.IsMaster && !language.IsCurrent) 316 { 317 if (masterAreaPage != null) 318 { 319 link = SearchEngineFriendlyURLs.GetFriendlyUrl(masterAreaPage.ID); 320 } 321 } 322 else if (language.IsCurrent) 323 { 324 link = "javascript:void(0);"; 325 } 326 else 327 { 328 foreach (var languagePage in languagePages) 329 { 330 var languageAreaId = language.ID; 331 if (languageAreaId == languagePage.AreaId) 332 { 333 link = SearchEngineFriendlyURLs.GetFriendlyUrl(languagePage.ID); 334 } 335 } 336 } 337 <a class="mobile-menu__items__footer__item mobile-menu__items__footer__item--lang button @listClass" title="@langTitle" href="@link" target="_top">@flag</a> 338 } 339 @if (cartPageId > 0 && cartPartnerProductsPageId > 0) 340 { 341 <a href="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(cartPartnerProductsPageId)" class="cart-pp-link hidden"><span class="icon icon--cart icon-color--white"></span></a> 342 <a href="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(cartPageId)" class="cart-link hidden"><span class="icon icon--cart icon-color--white"></span></a> 343 <span class="cart-selector hidden" onclick="EcomHelper.ShowCartSelectorModal();"><span class="icon icon--cart icon-color--white"></span></span> 344 } 345 </div> 346 <div class="navigation-header__menu__search"> 347 <search-form search-url="@searchUrl" placeholder-text="@Translate("searchTwente", "Doorzoek Twente.com")"></search-form> 348 </div> 349 <mobile-menu close-button-text="@Translate("Close", "Sluit")"> 350 <template v-slot:default> 351 @foreach (var node in navigationModel.Nodes) 352 { 353 <a href="@node.Link" class="mobile-menu__items__button button button--white-border">@node.Name</a> 354 } 355 <search-form search-url="@searchUrl" placeholder-text="@Translate("searchTwente", "Doorzoek Twente.com")"></search-form> 356 </template> 357 <template v-slot:footer> 358 @if (topNavigationPages != null && topNavigationPages.Any()) 359 { 360 foreach (var topNavigationPage in topNavigationPages) 361 { 362 363 // Preventing us from rendering the login page link when the user is already logged in 364 if (Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() && 365 Equals(topNavigationPage.ID, loginPageId)) 366 { 367 continue; 368 } 369 370 // Preventing us from rendering the extranet content when the user is not logged in 371 if (!Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() && 372 extranetPageIds.Contains(topNavigationPage.ID)) 373 { 374 continue; 375 } 376 377 var topNavigationPageName = topNavigationPage.GetDisplayName(); 378 var topNavigationPageTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {topNavigationPageName}".JsEncode(); 379 var topNavigationPageSubPages = Dynamicweb.Services.Pages.GetPagesByParentID(topNavigationPage.ID); 380 <div class="mobile-menu__items__footer__item"> 381 @if (topNavigationPage.Allowclick) 382 { 383 <a href="@SearchEngineFriendlyURLs.GetFriendlyUrl(topNavigationPage.ID)" 384 title="@topNavigationPageTitle" target="_top" class="mobile-menu__items__button button button--white-border"> 385 @topNavigationPageName 386 </a> 387 } 388 else 389 { 390 <div title="@topNavigationPageTitle" target="_top" class="mobile-menu__items__title"> 391 @topNavigationPageName 392 </div> 393 } 394 @if (topNavigationPageSubPages.Any()) 395 { 396 foreach (var subPage in topNavigationPageSubPages) 397 { 398 // Preventing us from rendering the extranet content when the user is not logged in 399 if (!Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn() && 400 extranetPageIds.Contains(subPage.ID)) 401 { 402 continue; 403 } 404 405 var topNavigationSubpageName = subPage.GetDisplayName(); 406 var topNavigationSubpageTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {topNavigationSubpageName}".JsEncode(); 407 <a href="@SearchEngineFriendlyURLs.GetFriendlyUrl(subPage.ID)" 408 title="@topNavigationSubpageTitle" target="_top" class="mobile-menu__items__button button button--white-border">@topNavigationSubpageName</a> 409 } 410 } 411 </div> 412 } 413 } 414 415 </template> 416 </mobile-menu> 417 </div> 418 419 <div id="select-cart-modal" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"> 420 <div class="modal-dialog" role="document"> 421 <div class="modal-content"> 422 <div class="modal-header"> 423 <h2>@Translate("CartSelector_Title", "Welke producten wilt u afrekenen?")</h2> 424 </div> 425 <div class="modal-body"> 426 @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.") 427 <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> 428 <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> 429 </div> 430 </div> 431 </div> 432 </div> 433 </div> 434 <hr /> 435 </header> 436 } 437 438 </text> 439 } 440 <main> 441 @using Dynamicweb.Core 442 @using TwenteBranding.Repository.Helpers 443 @using TwenteBranding.Models.Constants 444 @using TwenteBranding.Models.Items.Article 445 @using TwenteBranding.Models.Items.Constants 446 @using Dynamicweb.Core.Encoders 447 @using TwenteBranding.Extensions 448 @using TwenteBranding.Models.ViewModels 449 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 450 @Description("View model template for an organization page") 451 452 @{ 453 var pageView = Dynamicweb.Frontend.PageView.Current(); 454 var culture = pageView.GlobalTags.GetTagByName("Global:Area.LongLang").Value; 455 var itemPageId = pageView.ID; 456 var partnerArticle = Dynamicweb.Services.Items.GetItem(Model.ItemType, Model.ItemId).ToCodeFirstItem<PartnerArticle>(); 457 var item = ItemHelper.GetTwenteBrandingItemForPage(Model.ItemId, itemPageId.ToString(), culture, false); 458 if (item != null) 459 { 460 var hashtag = item.MainHashtag.IsNotNullOrEmpty() ? $"#{item.MainHashtag}" : $"#{item.MainHashtagEnglish}"; 461 var goalName = item.GoalName; 462 var background = goalName.FixNameForClass(); 463 var goalIcon = item.GoalIcon; 464 var goalType = item.InstanceType; 465 var gradientCss = item.GoalGradientClass; 466 var video = item.Video; 467 var title = Model.Item.GetString("Title"); 468 var introduction = Model.Item.GetString("Text"); 469 var fontColor = item.HeaderFontColor; 470 var logo = item.PartnerLogo; 471 var isWhiteLabel = string.Equals(partnerArticle.PartnerType, ItemConstants.Partner_None); 472 var partnerImage = partnerArticle.PartnerPhoto.Trim(); 473 var headerBackground = isWhiteLabel ? "" : !string.IsNullOrEmpty(partnerImage) ? partnerImage : item.HeaderBackground; 474 if (!string.IsNullOrEmpty(headerBackground) && headerBackground.Length > 10) 475 { 476 headerBackground = $"background-image:url('{headerBackground.Trim()}');"; 477 } 478 if (!string.IsNullOrEmpty(partnerArticle.Color)) { 479 headerBackground += $"background-color:{partnerArticle.Color};"; 480 } 481 var organizationJobs = ItemHelper.GetJobsByPartner(Dynamicweb.Frontend.PageView.Current().ID, pageView.AreaID); 482 @* Hero header *@ 483 <section class="page-hero page-hero--partner background--@background" style="@headerBackground"> 484 <div class="container"> 485 <h1 class="page-hero__title @fontColor">@title</h1> 486 <div class="page-hero__content"> 487 @if (!isWhiteLabel && !string.IsNullOrWhiteSpace(introduction)) 488 { 489 <div class="page-hero__introduction @fontColor">@introduction</div> 490 } 491 @if (!isWhiteLabel && !string.IsNullOrWhiteSpace(logo)) 492 { 493 <img alt="logo @HtmlEncoder.HtmlEncode(title)" src="@logo" class="page-hero__image" /> 494 } 495 </div> 496 <a href='#content' class="text-button twente-red @fontColor"> 497 @Translate("PartnerArticle_Read_Entire_Article", "Lees hieronder meer") 498 <div class="icon--arrow-down"></div> 499 </a> 500 </div> 501 </section> 502 @* Page content *@ 503 <section id='content' class='content'> 504 @Model.Placeholder("Content", "Content", "default:true;sort:1") 505 @if (!isWhiteLabel) 506 { 507 <div class="paragraph container container--small"> 508 <div class="container">@partnerArticle.Paragraph1</div> 509 </div> 510 } 511 @Model.Placeholder("Paragraph1", "After paragraph 1", "sort:2") 512 @if (!isWhiteLabel) 513 { 514 <div class="paragraph container container--small"> 515 <div class="container">@partnerArticle.Paragraph2</div> 516 </div> 517 } 518 @Model.Placeholder("Paragraph2", "After paragraph 2", "sort:3") 519 @if (!isWhiteLabel) 520 { 521 <div class="paragraph container container--small"> 522 <div class="container">@partnerArticle.Paragraph3</div> 523 </div> 524 } 525 @Model.Placeholder("Paragraph3", "After paragraph 3", "sort:4") 526 @if (!isWhiteLabel) 527 { 528 <div class="paragraph container container--small"> 529 <div class="container">@partnerArticle.Paragraph4</div> 530 </div> 531 } 532 @Model.Placeholder("Paragraph4", "After paragraph 4", "sort:5") 533 </section> 534 if (Model.Placeholder("Sidebar").Any()) 535 { 536 <div class="sidebar"> 537 @Model.Placeholder("Sidebar", "Sidebar", "sort:6"). 538 </div> 539 } 540 else 541 { 542 var sidebar = Dynamicweb.Services.Pages.GetPageByNavigationTag(Model.Area.ID, 543 StringConstants.NavigationTags.PartnerArticleSidebar); 544 if (sidebar != null) 545 { 546 <div class="sidebar"> 547 @RenderPageContent(sidebar.ID) 548 </div> 549 } 550 } 551 if (Model.Placeholder("Bottom").Any() || organizationJobs.Any()) 552 { 553 <div class="bottom"> 554 @Model.Placeholder("Bottom", "Bottom", "sort:7") 555 @if (organizationJobs.Any()) 556 { 557 var jobsTitle = Translate("OrganizationJobsHeader", "Jobs #{0}").Replace("{0}", title); 558 <section id='partnerJobs' class="top-x container"> 559 @HeadingHelper.GetHeadingWithTags(jobsTitle, HeadingSize: ItemConstants.HeadingSize_H3, className: "top-x__title") 560 <div class="grid"> 561 @HtmlExtensions.RenderPartial("../Includes/TwenteBrandingItemList.cshtml", 562 new TwenteBrandingItemListModel(organizationJobs)) 563 </div> 564 </section> 565 } 566 </div> 567 } 568 } 569 else 570 { 571 <div>No-Item</div> 572 } 573 } 574 </main> 575 @using TwenteBranding.Repository.Helpers 576 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 577 @{ 578 var homepageLinkTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {Translate("Homelink_Title", "De homepage")}"; 579 } 580 <footer class="background--black flex flex-align-center"> 581 <div class="container"> 582 @using TwenteBranding.Repository.Helpers 583 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 584 585 @if (Model.Area.Item != null) 586 { 587 <div class='social-media-icons flex'> 588 @foreach (var field in Model.Area.Item.Fields.Where(f => f.SystemName.StartsWith("Sm_"))) 589 { 590 if (!string.IsNullOrEmpty(field.GetString())) 591 { 592 <a class='mr-05' rel="noopener" aria-label="@field.Name.JsEncode()" href="@field.GetString()" title="@field.Name.JsEncode()" target="_blank"> 593 <div class="icon--@field.SystemName.ToLower() icon-size--x2"></div> 594 </a> 595 } 596 } 597 </div> 598 } 599 600 <div class="footer-link-container"> 601 @{ 602 var footerNavigationFolderId = GetPageIdByNavigationTag(TwenteBranding.Models.Constants.StringConstants.NavigationTags.FooterNavigation); 603 if (footerNavigationFolderId > 0) 604 { 605 var footerNavigationPageList = Dynamicweb.Services.Pages.GetPagesByParentID(footerNavigationFolderId); 606 if (footerNavigationPageList != null && footerNavigationPageList.Any()) 607 { 608 var footerNavigationPages = footerNavigationPageList.Where(page => page.Active).ToList(); 609 if (footerNavigationPages.Any()) 610 { 611 var footerLinkCounter = 1; 612 foreach (var footerNavigationPage in footerNavigationPages) 613 { 614 var footerNavigationPageName = footerNavigationPage.GetDisplayName(); 615 var footerNavigationPageTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {footerNavigationPageName}".JsEncode(); 616 var footerNavigationPageLink = $"/Default.aspx?ID={footerNavigationPage.ID}"; 617 618 // place last link and copyright together to prevent wrapping on phone 619 if (footerNavigationPages.Count() == footerLinkCounter) 620 { 621 var copyRight = string.Format(Translate("Footer_CopyRight", "&copy; {0} Twente Branding"), DateTime.Now.Year); 622 623 <div class='wrapper'> 624 <a href="@footerNavigationPageLink" title="@footerNavigationPageTitle">@footerNavigationPageName</a> 625 <span>@copyRight</span> 626 </div> 627 } 628 else 629 { 630 <a href="@footerNavigationPageLink" title="@footerNavigationPageTitle">@footerNavigationPageName</a> 631 } 632 footerLinkCounter++; 633 } 634 } 635 } 636 } 637 } 638 </div> 639 </div> 640 <a class='twente-logo' href="@homepageUrl" title="@homepageLinkTitle"> 641 <img src="@IconHelper.GetSvgPath("twente", "logo/")" /> 642 </a> 643 </footer> 644 645 </div> 646 <aside> 647 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 648 @using Dynamicweb.Core 649 @using TwenteBranding.Repository.Helpers 650 @using System.Linq; 651 @using TwenteBranding.Models.ViewModels 652 653 @{ 654 var newsletterSubscriptionModalPageId = GetPageIdByNavigationTag("NewsletterSubscriptionModal"); 655 var jobAlertSubscriptionModalPageId = GetPageIdByNavigationTag("JobAlertSubscriptionModal"); 656 var jobOffersPageId = GetPageIdByNavigationTag("JobOffers"); 657 var jobOfferParentPageId = Dynamicweb.Frontend.PageView.Current().Page.ParentPageId; 658 var utmCampaign = Dynamicweb.Context.Current.Request.QueryString.Get("utm_campaign"); 659 var mainHashtagModal = ""; 660 661 // Specific pages which must not show a subscription modal (jobalert/newsletter) 662 var twenteLeeftPageId = GetPageIdByNavigationTag("MOT_TwenteLeeft"); 663 var jobAlertSubscription = GetPageIdByNavigationTag("JobAlertSubscription"); 664 var pageIdsWithoutModal = new List<int> { twenteLeeftPageId, jobAlertSubscription }; 665 666 // Get the item for the current page 667 TwenteBrandingItemModel pItem = null; 668 if (Model.ItemId != "1") //Item with ID 1 gives error 669 { 670 pItem = ItemHelper.GetTwenteBrandingItemForPage( 671 Model.ItemId, 672 Dynamicweb.Frontend.PageView.Current().ID.ToString(), 673 Dynamicweb.Frontend.PageView.Current().GlobalTags.GetTagByName("Global:Area.LongLang").Value 674 ); 675 } 676 677 if (pItem != null) 678 { 679 // Get main hashtag of the current page item 680 var mainHashtagId = pItem.MainHashtagIds.FirstOrDefault(); 681 if (!string.IsNullOrEmpty(mainHashtagId)) 682 { 683 var hashtagItem = Dynamicweb.Content.Items.Item.GetItemById(TwenteBranding.Models.Constants.StringConstants.ItemInstanceType.Hashtag, mainHashtagId); 684 mainHashtagModal = $"{ItemHelper.GetItemValue<string>(hashtagItem, TwenteBranding.Models.Constants.StringConstants.CustomItemTypes.BaseArticle.Title)}"; 685 } 686 } 687 688 // Dont show a modal on the following pages 689 if (pageIdsWithoutModal.Contains(Model.ID) || mainHashtagModal == "talent") 690 { 691 //do noting 692 } 693 else 694 { 695 // Show modal with link to vacancysubscription page on vacancy page and pages with #talent hashtag 696 if ((Model.ID == jobOffersPageId || jobOfferParentPageId == jobOffersPageId) 697 && jobAlertSubscriptionModalPageId > 0) 698 { 699 @RenderPageContent(jobAlertSubscriptionModalPageId) 700 } 701 // If the jobalert modal pageId has a value and utmCampaing matches the specified value 702 else if (jobAlertSubscriptionModalPageId > 0 && utmCampaign == "Remarketing vacaturebank") 703 { 704 @RenderPageContent(jobAlertSubscriptionModalPageId) 705 } 706 // Else if the newsletter pageId has a value, show the newsletter subscription modal 707 else if (newsletterSubscriptionModalPageId > 0) 708 { 709 @RenderPageContent(newsletterSubscriptionModalPageId) 710 } 711 } 712 } 713 </aside> 714 <script src="@customJs"></script> 715 <script src="@appJs"></script> 716 @RenderSnippet("JavascriptBottom") 717 </body> 718 </html> 719 }