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", "© {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 }