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_5018b562e7c34e7fa60e7dd348d728cb.Execute() in D:\inetpub\wwwroot\www.twente.com\Files\Templates\Designs\TwenteBranding\_parsed\PartnerArticle.parsed.cshtml:line 475
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 if (string.IsNullOrEmpty(fontColor)) { 471 fontColor = "font-color--black"; 472 } 473 var logo = item.PartnerLogo; 474 var isWhiteLabel = string.Equals(partnerArticle.PartnerType, ItemConstants.Partner_None); 475 var partnerImage = partnerArticle.PartnerPhoto.Trim(); 476 var headerBackground = isWhiteLabel ? "" : !string.IsNullOrEmpty(partnerImage) ? partnerImage : item.HeaderBackground; 477 if (!string.IsNullOrEmpty(headerBackground) && headerBackground.Length > 10) 478 { 479 headerBackground = $"background-image:url('{headerBackground.Trim()}');"; 480 } 481 if (!string.IsNullOrEmpty(partnerArticle.Color)) { 482 headerBackground += $"background-color:{partnerArticle.Color};"; 483 } 484 var organizationJobs = ItemHelper.GetJobsByPartner(Dynamicweb.Frontend.PageView.Current().ID, pageView.AreaID); 485 @* Hero header *@ 486 <section class="page-hero page-hero--partner background--@background" style="@headerBackground"> 487 <div class="container"> 488 <h1 class="page-hero__title @fontColor">@title</h1> 489 <div class="page-hero__content"> 490 @if (!isWhiteLabel && !string.IsNullOrWhiteSpace(introduction)) 491 { 492 <div class="page-hero__introduction @fontColor">@introduction</div> 493 } 494 @if (!isWhiteLabel && !string.IsNullOrWhiteSpace(logo)) 495 { 496 <img alt="logo @HtmlEncoder.HtmlEncode(title)" src="@logo" class="page-hero__image" /> 497 } 498 </div> 499 <a href='#content' class="text-button twente-red @fontColor"> 500 @Translate("PartnerArticle_Read_Entire_Article", "Lees hieronder meer") 501 <div class="icon--arrow-down"></div> 502 </a> 503 </div> 504 </section> 505 @* Page content *@ 506 <section id='content' class='content'> 507 @Model.Placeholder("Content", "Content", "default:true;sort:1") 508 @if (!isWhiteLabel) 509 { 510 <div class="paragraph container container--small"> 511 <div class="container">@partnerArticle.Paragraph1</div> 512 </div> 513 } 514 @Model.Placeholder("Paragraph1", "After paragraph 1", "sort:2") 515 @if (!isWhiteLabel) 516 { 517 <div class="paragraph container container--small"> 518 <div class="container">@partnerArticle.Paragraph2</div> 519 </div> 520 } 521 @Model.Placeholder("Paragraph2", "After paragraph 2", "sort:3") 522 @if (!isWhiteLabel) 523 { 524 <div class="paragraph container container--small"> 525 <div class="container">@partnerArticle.Paragraph3</div> 526 </div> 527 } 528 @Model.Placeholder("Paragraph3", "After paragraph 3", "sort:4") 529 @if (!isWhiteLabel) 530 { 531 <div class="paragraph container container--small"> 532 <div class="container">@partnerArticle.Paragraph4</div> 533 </div> 534 } 535 @Model.Placeholder("Paragraph4", "After paragraph 4", "sort:5") 536 </section> 537 if (Model.Placeholder("Sidebar").Any()) 538 { 539 <div class="sidebar"> 540 @Model.Placeholder("Sidebar", "Sidebar", "sort:6"). 541 </div> 542 } 543 else 544 { 545 var sidebar = Dynamicweb.Services.Pages.GetPageByNavigationTag(Model.Area.ID, 546 StringConstants.NavigationTags.PartnerArticleSidebar); 547 if (sidebar != null) 548 { 549 <div class="sidebar"> 550 @RenderPageContent(sidebar.ID) 551 </div> 552 } 553 } 554 if (Model.Placeholder("Bottom").Any() || organizationJobs.Any()) 555 { 556 <div class="bottom"> 557 @Model.Placeholder("Bottom", "Bottom", "sort:7") 558 @if (organizationJobs.Any()) 559 { 560 var jobsTitle = Translate("OrganizationJobsHeader", "Jobs #{0}").Replace("{0}", title); 561 <section id='partnerJobs' class="top-x container"> 562 @HeadingHelper.GetHeadingWithTags(jobsTitle, HeadingSize: ItemConstants.HeadingSize_H3, className: "top-x__title") 563 <div class="grid"> 564 @HtmlExtensions.RenderPartial("../Includes/TwenteBrandingItemList.cshtml", 565 new TwenteBrandingItemListModel(organizationJobs)) 566 </div> 567 </section> 568 } 569 </div> 570 } 571 } 572 else 573 { 574 <div>No-Item</div> 575 } 576 } 577 </main> 578 @using TwenteBranding.Repository.Helpers 579 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 580 @{ 581 var homepageLinkTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {Translate("Homelink_Title", "De homepage")}"; 582 } 583 <footer class="background--black flex flex-align-center"> 584 <div class="container"> 585 @using TwenteBranding.Repository.Helpers 586 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 587 588 @if (Model.Area.Item != null) 589 { 590 <div class='social-media-icons flex'> 591 @foreach (var field in Model.Area.Item.Fields.Where(f => f.SystemName.StartsWith("Sm_"))) 592 { 593 if (!string.IsNullOrEmpty(field.GetString())) 594 { 595 <a class='mr-05' rel="noopener" aria-label="@field.Name.JsEncode()" href="@field.GetString()" title="@field.Name.JsEncode()" target="_blank"> 596 <div class="icon--@field.SystemName.ToLower() icon-size--x2"></div> 597 </a> 598 } 599 } 600 </div> 601 } 602 603 <div class="footer-link-container"> 604 @{ 605 var footerNavigationFolderId = GetPageIdByNavigationTag(TwenteBranding.Models.Constants.StringConstants.NavigationTags.FooterNavigation); 606 if (footerNavigationFolderId > 0) 607 { 608 var footerNavigationPageList = Dynamicweb.Services.Pages.GetPagesByParentID(footerNavigationFolderId); 609 if (footerNavigationPageList != null && footerNavigationPageList.Any()) 610 { 611 var footerNavigationPages = footerNavigationPageList.Where(page => page.Active).ToList(); 612 if (footerNavigationPages.Any()) 613 { 614 var footerLinkCounter = 1; 615 foreach (var footerNavigationPage in footerNavigationPages) 616 { 617 var footerNavigationPageName = footerNavigationPage.GetDisplayName(); 618 var footerNavigationPageTitle = $"{Translate("LinkTitlePrefix", "Navigeer naar")}: {footerNavigationPageName}".JsEncode(); 619 var footerNavigationPageLink = $"/Default.aspx?ID={footerNavigationPage.ID}"; 620 621 // place last link and copyright together to prevent wrapping on phone 622 if (footerNavigationPages.Count() == footerLinkCounter) 623 { 624 var copyRight = string.Format(Translate("Footer_CopyRight", "&copy; {0} Twente Branding"), DateTime.Now.Year); 625 626 <div class='wrapper'> 627 <a href="@footerNavigationPageLink" title="@footerNavigationPageTitle">@footerNavigationPageName</a> 628 <span>@copyRight</span> 629 </div> 630 } 631 else 632 { 633 <a href="@footerNavigationPageLink" title="@footerNavigationPageTitle">@footerNavigationPageName</a> 634 } 635 footerLinkCounter++; 636 } 637 } 638 } 639 } 640 } 641 </div> 642 </div> 643 <a class='twente-logo' href="@homepageUrl" title="@homepageLinkTitle"> 644 <img src="@IconHelper.GetSvgPath("twente", "logo/")" /> 645 </a> 646 </footer> 647 648 </div> 649 <aside> 650 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 651 @using Dynamicweb.Core 652 @using TwenteBranding.Repository.Helpers 653 @using System.Linq; 654 @using TwenteBranding.Models.ViewModels 655 656 @{ 657 var newsletterSubscriptionModalPageId = GetPageIdByNavigationTag("NewsletterSubscriptionModal"); 658 var jobAlertSubscriptionModalPageId = GetPageIdByNavigationTag("JobAlertSubscriptionModal"); 659 var jobOffersPageId = GetPageIdByNavigationTag("JobOffers"); 660 var jobOfferParentPageId = Dynamicweb.Frontend.PageView.Current().Page.ParentPageId; 661 var utmCampaign = Dynamicweb.Context.Current.Request.QueryString.Get("utm_campaign"); 662 var mainHashtagModal = ""; 663 664 // Specific pages which must not show a subscription modal (jobalert/newsletter) 665 var twenteLeeftPageId = GetPageIdByNavigationTag("MOT_TwenteLeeft"); 666 var jobAlertSubscription = GetPageIdByNavigationTag("JobAlertSubscription"); 667 var pageIdsWithoutModal = new List<int> { twenteLeeftPageId, jobAlertSubscription }; 668 669 // Get the item for the current page 670 TwenteBrandingItemModel pItem = null; 671 if (Model.ItemId != "1") //Item with ID 1 gives error 672 { 673 pItem = ItemHelper.GetTwenteBrandingItemForPage( 674 Model.ItemId, 675 Dynamicweb.Frontend.PageView.Current().ID.ToString(), 676 Dynamicweb.Frontend.PageView.Current().GlobalTags.GetTagByName("Global:Area.LongLang").Value 677 ); 678 } 679 680 if (pItem != null) 681 { 682 // Get main hashtag of the current page item 683 var mainHashtagId = pItem.MainHashtagIds.FirstOrDefault(); 684 if (!string.IsNullOrEmpty(mainHashtagId)) 685 { 686 var hashtagItem = Dynamicweb.Content.Items.Item.GetItemById(TwenteBranding.Models.Constants.StringConstants.ItemInstanceType.Hashtag, mainHashtagId); 687 mainHashtagModal = $"{ItemHelper.GetItemValue<string>(hashtagItem, TwenteBranding.Models.Constants.StringConstants.CustomItemTypes.BaseArticle.Title)}"; 688 } 689 } 690 691 // Dont show a modal on the following pages 692 if (pageIdsWithoutModal.Contains(Model.ID) || mainHashtagModal == "talent") 693 { 694 //do noting 695 } 696 else 697 { 698 // Show modal with link to vacancysubscription page on vacancy page and pages with #talent hashtag 699 if ((Model.ID == jobOffersPageId || jobOfferParentPageId == jobOffersPageId) 700 && jobAlertSubscriptionModalPageId > 0) 701 { 702 @RenderPageContent(jobAlertSubscriptionModalPageId) 703 } 704 // If the jobalert modal pageId has a value and utmCampaing matches the specified value 705 else if (jobAlertSubscriptionModalPageId > 0 && utmCampaign == "Remarketing vacaturebank") 706 { 707 @RenderPageContent(jobAlertSubscriptionModalPageId) 708 } 709 // Else if the newsletter pageId has a value, show the newsletter subscription modal 710 else if (newsletterSubscriptionModalPageId > 0) 711 { 712 @RenderPageContent(newsletterSubscriptionModalPageId) 713 } 714 } 715 } 716 </aside> 717 <script src="@customJs"></script> 718 <script src="@appJs"></script> 719 @RenderSnippet("JavascriptBottom") 720 </body> 721 </html> 722 }