Error executing template "Designs/ProNails_generated/_parsed/WebshopPage.parsed.cshtml"
System.Data.SqlClient.SqlException (0x80131904): Cannot continue the execution because the session is in the kill state.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryCloseInternal(Boolean closeReader)
at System.Data.SqlClient.SqlDataReader.Close()
at System.Data.Common.DbDataReader.Dispose(Boolean disposing)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
at Bluedesk.Tools.DynamicWeb.DataAccess.DynamicwebData.Query(String sqlQuery, SqlParameter[] parameters)
at Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend.AdvancedGridServices.GetHeaderGridDataTable(Int32 AreaID, Int32 PageID) in C:\vso\PronailsBase\BluedeskBaseSolution\ClientBase\ItemTypes\Bluedesk.DynamicWeb.ItemTypes.BaseSolution\Frontend\AdvancedGrid.cs:line 198
at CompiledRazorTemplates.Dynamic.RazorEngine_7590efad26f244098d86bf6e0f4d8373.Execute() in D:\dynamicweb.net\Solutions\Bluedesk\pronails.cloud.dynamicweb-cms.com\files\Templates\Designs\ProNails_generated\_parsed\WebshopPage.parsed.cshtml:line 889
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()
ClientConnectionId:8d0b068d-43e0-4493-a3bf-7acbd0331a97
Error Number:596,State:1,Class:21
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
2
3 @using System;
4 @using System.Web;
5 @using System.Linq;
6 @using System.Data;
7 @using System.Data.SqlClient;
8 @using System.Globalization;
9 @using System.Reflection;
10
11 @using Dynamicweb;
12 @using Dynamicweb.Content;
13 @using Dynamicweb.Content.Items;
14 @using Dynamicweb.Environment;
15 @using Dynamicweb.Frontend;
16 @using Dynamicweb.Frontend.Navigation;
17
18 @using Bluedesk.DynamicWeb.ItemTypes;
19 @using Bluedesk.DynamicWeb.ItemTypes.Settings;
20 @using Bluedesk.DynamicWeb.ItemTypes.Configuration;
21 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution;
22
23 @using Bluedesk.Tools.Generic;
24 @using Bluedesk.Tools.DynamicWeb.DataAccess;
25
26 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend;
27
28 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
29
30 @using System;
31 @using System.Web;
32 @using System.Linq;
33 @using System.Globalization;
34
35 @using Dynamicweb;
36 @using Dynamicweb.Content.Items;
37 @using Dynamicweb.Environment;
38 @using Dynamicweb.Frontend;
39 @using Dynamicweb.Frontend.Navigation;
40
41 @using Bluedesk.Tools.Generic;
42
43 @using Bluedesk.DynamicWeb.ItemTypes;
44 @using Bluedesk.DynamicWeb.ItemTypes.Settings;
45 @using Bluedesk.DynamicWeb.ItemTypes.Settings.Configuration;
46
47 @using Bluedesk.DynamicWeb.ItemTypes.Configuration;
48
49 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution;
50 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend;
51
52 @{
53
54 var master_configuration = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "MasterConfiguration");
55 MasterConfig mc = master_configuration.Item.ToCodeFirstItem<MasterConfig>();
56
57 bool HideStandardFooter = mc.FooterConfiguration.HideStandardFooter.ToString() == "True" ? true : false;
58
59 string MasterConfigCssClass = !string.IsNullOrWhiteSpace(mc.CssClass) ? mc.CssClass : "";
60
61 // GeneralConfig GeneralConfiguration = mc.GeneralConfiguration;
62 EcomConfig EcommerceConfiguration = mc.EcomConfiguration;
63
64 bool WithVATBool = Pageview.Area.EcomPricesWithVat == "True";
65 bool pricesWithoutVatForUsers = EcommerceConfiguration.ShowPricesWithoutVatForUsers;
66 bool pricesWithoutVatForValidVat = EcommerceConfiguration.ShowPricesWithoutVatWhenValidVatNumber;
67 if(pricesWithoutVatForUsers && !pricesWithoutVatForValidVat && Pageview.User != null) {
68 WithVATBool = false;
69 }
70 if(pricesWithoutVatForValidVat && Pageview.User != null && !string.IsNullOrWhiteSpace(Pageview.User.VatRegNumber)) {
71 WithVATBool = false;
72 }
73 string ecomShowPricesWithVat = WithVATBool.ToString().ToLower();
74 string ecomPricesFormatted = (EcommerceConfiguration.FormattedPrices).ToString().ToLower();
75
76 bool IsNotContentManager = false;
77 bool isVisualEditor = Pageview.IsVisualEditorMode;
78
79 if (isVisualEditor)
80 {
81 System.Web.HttpContext.Current.Session["PreviousPage"] = Pageview.Page.ID;
82 IsNotContentManager = (Dynamicweb.Security.UserManagement.User.GetCurrentBackendUser()?.Groups?.All(g => g.Name != "Content managers") ?? true);
83 }
84
85 BaseSettingsObj BaseSettings = new BaseSettingsObj();
86
87 BaseSettings = BaseSettingServices.RenderBaseSettings(Pageview);
88 HttpContext.Current.Session["BaseSettings"] = BaseSettings;
89
90 //if (HttpContext.Current.Session["BaseSettings"] == null)
91 //{
92
93 //}
94 //else
95 //{
96 // BaseSettings = (BaseSettingsObj)HttpContext.Current.Session["BaseSettings"];
97 // if (BaseSettings.AreaID != Pageview.AreaID)
98 // {
99 // BaseSettings = BaseSettingServices.RenderBaseSettings(Pageview);
100 // HttpContext.Current.Session["BaseSettings"] = BaseSettings;
101 // }
102 //}
103
104 BaseSettingsBrandConfiguration BaseSettingsBrandConfiguration = BaseSettings.BrandConfiguration;
105 BaseSettingsButtons BaseSettingsButtons = BaseSettingsBrandConfiguration.Buttons;
106
107 var font_configuration = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "FontConfiguration");
108
109 var httpdomain = Dynamicweb.Environment.Helpers.LinkHelper.GetHttpDomain();
110 var lang = Pageview.Area.CultureInfo.TwoLetterISOLanguageName;
111 var langName = Pageview.Area.Culture;
112
113 var csrftoken = application._webapi.Helper.CSRFHelper.TokenHeaderValue();
114 var designRoot = BaseSettings.DesignRoot;
115
116 var phonenumber = BaseSettings.CorporateSettings.Phonenumber;
117 var formattedPhonenumber = phonenumber.Replace(" ", String.Empty);
118 var emailadress = BaseSettings.CorporateSettings.Emailadress;
119 var buttonIconClass = Pageview.Area.Item["Global_button_icon"] != null ? Pageview.Area.Item["Global_button_icon"].ToString().Replace("+", " ") : "fal fa-arrow-right";
120 var callmebackformlink = BaseSettings.BrandConfiguration.CallMeBackForm;
121 var mobileThemeColor = BaseSettings.BrandConfiguration.MobileThemeColor;
122
123 bool isOffline = false;
124
125 DateTime workingHoursStart = BaseSettings.CorporateSettings.OpeningTime;
126 DateTime workingHoursEnd = BaseSettings.CorporateSettings.ClosingTime;
127 DateTime today = DateTime.Now;
128 var cHour = DateTime.Now.TimeOfDay;
129 int cDay = (int)DateTime.Now.DayOfWeek;
130 string availableToHour24hFormat = workingHoursEnd.TimeOfDay.ToString().Substring(0, 5);
131 var timeFromInput = DateTime.ParseExact(availableToHour24hFormat, "H:m", null, DateTimeStyles.None);
132 string availableToHour12hFormat = timeFromInput.ToString("hh:mm tt", CultureInfo.InvariantCulture);
133 var availableToHour = lang == "en" ? availableToHour12hFormat : availableToHour24hFormat;
134 bool isOvertime = cHour >= workingHoursEnd.TimeOfDay || cHour <= workingHoursStart.TimeOfDay;
135 bool isNoValidDate = today < workingHoursStart || today > workingHoursEnd;
136 if (isNoValidDate || isOvertime)
137 {
138 isOffline = true;
139 }
140
141 Boolean showBreadcrumbs = Pageview.Page.PropertyItem != null && Pageview.Page.PropertyItem["ShowBreadcrumbs"] != null ? Convert.ToBoolean(Pageview.Page.PropertyItem["ShowBreadcrumbs"]) : false;
142
143 var appcss = Cache.VersionedFile(designRoot + "/dist/app.css");
144
145 var favicon32 = Cache.VersionedFile(designRoot + "/assets/img/favicon-32.png", true);
146 var favicon16 = Cache.VersionedFile(designRoot + "/assets/img/favicon-16.png", true);
147 var favicon = Cache.VersionedFile(designRoot + "/assets/img/favicon.ico", true);
148
149 favicon = !string.IsNullOrWhiteSpace(BaseSettings.BrandConfiguration.Favicons.Favicon) ? BaseSettings.BrandConfiguration.Favicons.Favicon : favicon;
150 favicon16 = !string.IsNullOrWhiteSpace(BaseSettings.BrandConfiguration.Favicons.Favicon16) ? BaseSettings.BrandConfiguration.Favicons.Favicon16 : favicon16;
151 favicon32 = !string.IsNullOrWhiteSpace(BaseSettings.BrandConfiguration.Favicons.Favicon32) ? BaseSettings.BrandConfiguration.Favicons.Favicon32 : favicon32;
152
153 var appbundlejs = Cache.VersionedFile(designRoot + "/dist/app.bundle.js");
154 var appAsyncbundlejs = Cache.VersionedFile(designRoot + "/dist/appAsync.bundle.js");
155 var vuebundlejs = Cache.VersionedFile(designRoot + "/dist/vue.bundle.js");
156
157 //*** Start Scanapp configuration ***\\
158 bool hideHeader = false;
159 bool hideFooter = false;
160 bool hideBottombar = false;
161
162 if (HttpContext.Current.Session["ScanApp"] != null)
163 {
164 hideHeader = mc.ScanAppConfig.ShowHeader;
165 hideFooter = mc.ScanAppConfig.ShowFooter;
166 hideBottombar = mc.ScanAppConfig.ShowBottombar;
167 }
168 // END Scanapp configration **\\
169
170 }
171
172
173 @{
174 string fooProductDetailConfigurationID = mc.EcomConfiguration.ProductDetailConfigurationID;
175 string fooProductOverviewConfigurationID = mc.EcomConfiguration.ProductOverviewConfigurationID;
176
177 int ProductDetailLayoutID = Dynamicweb.Services.Pages.GetPageForItem("ProductDetailConfigurationPage", fooProductDetailConfigurationID)?.ID ?? 0;
178 int ProductOverviewLayoutID = Dynamicweb.Services.Pages.GetPageForItem("ProductOverviewConfigurationPage", fooProductOverviewConfigurationID)?.ID ?? 0;
179
180 System.Web.HttpContext.Current.Items["MasterPageSetup"] = "Ecommerce";
181
182 string queryParamGroupId = Dynamicweb.Context.Current.Request.QueryString.Get("GroupID");
183 string queryParamProductId = Dynamicweb.Context.Current.Request.QueryString.Get("ProductID");
184
185 bool isOverviewPage = string.IsNullOrWhiteSpace(queryParamProductId);
186 bool isDetailPage = !string.IsNullOrWhiteSpace(queryParamGroupId) && !string.IsNullOrWhiteSpace(queryParamProductId);
187 string jsIsOverviewPage = isOverviewPage.ToString().ToLower();
188 }
189
190 <!DOCTYPE html>
191 <html lang="@lang" prefix="og: http://ogp.me/ns#">
192 <head>
193 <meta charset="utf-8">
194 <meta http-equiv="X-UA-Compatible" content="IE=edge">
195 <meta name="viewport" content="width=device-width, initial-scale=1">
196 <meta name="theme-color" content="@mobileThemeColor">
197 @Model.MetaTags
198 <title>@Model.Title</title>
199
200 @RenderSnippet("canonical")
201 @RenderSnippet("ogTags")
202
203 @{
204 string urlProtocol = Dynamicweb.Context.Current.Request.Url.Scheme;
205 List<Dynamicweb.Content.Page> pageTranslations = new List<Dynamicweb.Content.Page>();
206 bool isMasterPage = Pageview.Area.IsMaster;
207 if (isMasterPage)
208 {
209 pageTranslations.Add(Pageview.Page);
210 if (Pageview.Page.Languages != null)
211 {
212 foreach (var language in Pageview.Page.Languages)
213 {
214 if (language.Active)
215 {
216 pageTranslations.Add(language);
217 }
218 }
219 }
220 }
221 else
222 {
223 pageTranslations.Add(Pageview.Page.MasterPage);
224 if (Pageview.Page.MasterPage != null)
225 {
226 if (Pageview.Page.MasterPage.Languages != null)
227 {
228 foreach (var language in Pageview.Page.MasterPage.Languages)
229 {
230 if (language.Active)
231 {
232 pageTranslations.Add(language);
233 }
234 }
235 }
236 }
237 }
238 foreach (var page in pageTranslations)
239 {
240 if (page != null)
241 {
242 string url = $"Default.aspx?ID={page.ID}";
243 string groupid = Dynamicweb.Context.Current.Request.QueryString.Get("GroupID");
244 string productid = Dynamicweb.Context.Current.Request.QueryString.Get("ProductID");
245 string variantid = Dynamicweb.Context.Current.Request.QueryString.Get("VariantID");
246 if (!string.IsNullOrWhiteSpace(groupid))
247 {
248 var groupObj = Dynamicweb.Ecommerce.Services.ProductGroups.GetGroup(groupid, page.Area.EcomLanguageId);
249 if (groupObj == null)
250 {
251 continue;
252 }
253 url = $"{url}&GroupID={groupid}";
254 }
255 if (!string.IsNullOrWhiteSpace(productid))
256 {
257 var productObj = Dynamicweb.Ecommerce.Services.Products.GetProductById(productid, variantid, page.Area.EcomLanguageId);;
258 if (productObj == null)
259 {
260 continue;
261 }
262 url = $"{url}&ProductID={productid}";
263 if (!string.IsNullOrWhiteSpace(variantid))
264 {
265 url = $"{url}&VariantID={variantid}";
266 }
267 }
268
269 string currentdomain = Context.Current.Request.Url.DnsSafeHost;
270 if (!string.IsNullOrEmpty(page.Area.DomainLock)) {
271 currentdomain = page.Area.DomainLock;
272 }
273 string friendlyUrl = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(url);
274 string href = $"{urlProtocol}://{currentdomain}{friendlyUrl}";
275 string hreflang = page.Area.CultureInfo.Name.ToLower();
276 <link rel="alternate" href="@href" hreflang="@hreflang" />
277 }
278 }
279 }
280
281
282 <link rel="preconnect" href="https://fonts.googleapis.com">
283 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
284 <link href="@appcss" rel="stylesheet" type="text/css" />
285
286 @{
287 if (!string.IsNullOrWhiteSpace(favicon32))
288 {
289 <link rel="icon" type="image/png" sizes="32x32" href="@favicon32">
290 }
291 if (!string.IsNullOrWhiteSpace(favicon16))
292 {
293 <link rel="icon" type="image/png" sizes="16x16" href="@favicon16">
294 }
295 if (!string.IsNullOrWhiteSpace(favicon))
296 {
297 <link rel="shortcut icon" href="@favicon">
298 }
299 }
300
301 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
302 @using System;
303 @using System.Web;
304 @using System.Linq;
305 @using System.Globalization;
306
307 @using Dynamicweb;
308 @using Dynamicweb.Content.Items;
309 @using Dynamicweb.Environment;
310 @using Dynamicweb.Frontend;
311 @using Dynamicweb.Frontend.Navigation;
312
313 @using Bluedesk.Tools.Generic;
314
315 @using Bluedesk.DynamicWeb.ItemTypes;
316 @using Bluedesk.DynamicWeb.ItemTypes.Settings;
317 @using Bluedesk.DynamicWeb.ItemTypes.Settings.Configuration;
318
319 @using Bluedesk.DynamicWeb.ItemTypes.Configuration;
320 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution;
321 @using Bluedesk.DynamicWeb.ItemTypes.Extensions;
322
323 @helper RenderCSSKeyAndValue(string Key, string Value)
324 {
325 if (!string.IsNullOrWhiteSpace(Value))
326 {
327 <text>@Key : @Value !important;</text>
328 }
329 }
330
331 @helper SetFontCSSVariables(FontConfigurationItemTab FontConfiguration)
332 {
333
334 string Top = FontConfiguration.top != 0 ? FontConfiguration.top.ToString() + "px" : "";
335 string Left = FontConfiguration.left != 0 ? FontConfiguration.left.ToString() + "px" : "";
336 string Right = FontConfiguration.right != 0 ? FontConfiguration.right.ToString() + "px" : "";
337 string Bottom = FontConfiguration.bottom != 0 ? FontConfiguration.bottom.ToString() + "px" : "";
338
339 string Position = FontConfiguration.PositionAbsolute ? "absolute" : "relative";
340
341 string Color = FontConfiguration.Color?.GetColorCode(Pageview.AreaID) ?? "";
342 string BackgroundColor = FontConfiguration.Backgroundcolor?.GetColorCode(Pageview.AreaID) ?? "";
343
344 string BorderColor = FontConfiguration.BorderColor?.GetColorCode(Pageview.AreaID) ?? "";
345 string BorderSize = FontConfiguration.BorderSize != 0 ? FontConfiguration.BorderSize.ToString() + "px" : "";
346
347 <text>
348
349 --Position: @Position;
350
351 @RenderCSSKeyAndValue("--Padding", FontConfiguration.Padding)
352
353 @RenderCSSKeyAndValue("--Top", Top)
354 @RenderCSSKeyAndValue("--Left", Left)
355 @RenderCSSKeyAndValue("--Right", Right)
356 @RenderCSSKeyAndValue("--Bottom", Bottom)
357
358 @RenderCSSKeyAndValue("--Color", Color)
359 @RenderCSSKeyAndValue("--FontSize", FontConfiguration.FontSize)
360 @RenderCSSKeyAndValue("--FontStyle", FontConfiguration.FontStyle)
361
362 @RenderCSSKeyAndValue("--FontWeight", FontConfiguration.FontWeight)
363 @RenderCSSKeyAndValue("--FontFamily", FontConfiguration.FontConfiguration.FontFamily)
364 @RenderCSSKeyAndValue("--LineHeight", FontConfiguration.LineHeight)
365
366 @RenderCSSKeyAndValue("--BackgroundColor", BackgroundColor)
367 @RenderCSSKeyAndValue("--BorderColor", BorderColor)
368 @RenderCSSKeyAndValue("--BorderSize", BorderSize)
369
370 </text>
371
372 }
373
374
375 <script>
376 window.globals = {
377 pageId: '@Pageview.ID',
378 Token: '@csrftoken',
379 DW_AREA_CULTURE: '@langName',
380 DW_AREA_CULTURE_SHORT: '@lang',
381 globalIconClass: '@buttonIconClass',
382 DW_USERID: '@Dynamicweb.Security.UserManagement.User.GetCurrentExtranetUserId()',
383 isEcomOverview: @jsIsOverviewPage,
384 DW_SHOW_PRICES_WITH_VAT: @ecomShowPricesWithVat,
385 DW_PRICES_FORMATTED: @ecomPricesFormatted,
386 DW_GROUP_ID: '@queryParamGroupId'
387 };
388 </script>
389
390 @BaseSettings.System.HeadScript
391
392 @{
393 var _cookieOptinLevel = Dynamicweb.Environment.CookieManager.GetCookieOptInLevel();
394 var _enabledCookieCategories = Dynamicweb.Environment.CookieManager.GetCookieOptInCategories();
395 if (_cookieOptinLevel.ToString() == "All" || _enabledCookieCategories.Contains("Marketing_Cookies"))
396 {
397 @BaseSettings.System.HeadScriptAfterConsent;
398 }
399 }
400
401 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend;
402 @{
403
404 var reviewName = BaseSettings.Review.Review_Name != null ? BaseSettings.Review.Review_Name : "";
405 var reviewBestRating = BaseSettings.Review.Review_Best_Rating != null ? BaseSettings.Review.Review_Best_Rating : "";
406 var reviewWorstRating = BaseSettings.Review.Review_Worst_Rating != null ? BaseSettings.Review.Review_Worst_Rating : "";
407 var reviewRatingValue = BaseSettings.Review.Review_Rating_Value != null ? BaseSettings.Review.Review_Rating_Value : "";
408 var reviewCount = BaseSettings.Review.Review_Count != null ? BaseSettings.Review.Review_Count : "";
409 var reviewUrl = BaseSettings.Review.Review_URL != null ? BaseSettings.Review.Review_URL : "";
410
411 var searchPageID = Bluedesk.Tools.DynamicWeb.Generic.PageHelper.GetPageIDByNavigationTag("searchresults", Pageview.AreaID);
412 var domain = Dynamicweb.Environment.Helpers.LinkHelper.GetHttpDomain();
413 }
414
415 <script type="application/ld+json">
416 [{
417 "@@context": "https://schema.org",
418 "@@type": "Organization",
419 "name" : "@BaseSettings.CorporateSettings.CompanyName",
420 "url": "@domain",
421 "sameAs" : "@BaseSettings.SocialMedia.Facebook",
422 "logo": "@domain@BaseSettings.BrandConfiguration.Logos.Logo",
423 "contactPoint" : [{
424 "@@type" : "ContactPoint",
425 "telephone" : "@BaseSettings.CorporateSettings.Phonenumber",
426 "contactType" : "customer service" ,
427 "@@context": "https://schema.org",
428 "@@id": "@domain",
429 "name": "@BaseSettings.CorporateSettings.CompanyName"
430 }],
431 "address": {
432 "@@type": "PostalAddress",
433 "streetAddress": "@BaseSettings.CorporateSettings.Address",
434 "addressLocality": "@BaseSettings.CorporateSettings.City",
435 "postalCode": "@BaseSettings.CorporateSettings.Zipcode",
436 "addressRegion": "@BaseSettings.CorporateSettings.Region",
437 "addressCountry": "@BaseSettings.CorporateSettings.Country"
438 }
439 },
440 {
441 "@@context": "https://schema.org",
442 "@@type": "WebSite",
443 "name" : "@BaseSettings.CorporateSettings.CompanyName",
444 "alternateName" : "@BaseSettings.CorporateSettings.AltCompanyName",
445 "url": "@domain",
446 "potentialAction": {
447 "@@type": "SearchAction",
448 "target": "@domain/Default.aspx?ID=@searchPageID&q={search_term_string}",
449 "query-input": "required name=search_term_string"
450 }
451 }]
452 </script>
453
454 <script type="application/ld+json">
455 {
456 "@@context": "https://schema.org",
457 "@@type": "Product",
458 "name": "@reviewName",
459 "url":"@reviewUrl",
460 "aggregateRating": {
461 "@@type": "AggregateRating",
462 "bestRating": "@reviewBestRating",
463 "worstRating": "@reviewWorstRating",
464 "ratingValue": "@reviewRatingValue",
465 "reviewCount": "@reviewCount"
466 }
467 }
468 </script>
469
470
471 @RenderSnippet("DataLayer")
472 @RenderSnippet("GoogleMapsScript")
473
474 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend;
475
476 @{
477
478 // TODO: Add there options to master config for product overview
479 bool hidePricesForGuests = false;
480 bool hideShoppingCartForGuests = false;
481
482 bool enableShoppingCart = hideShoppingCartForGuests && Pageview.User == null ? false : BaseSettings.Features.ConfigModuleShoppingCart;
483 bool enableLogin = BaseSettings.Features.ConfigModuleLogin;
484 bool enableQuickOrder = BaseSettings.Features.ConfigModuleQuickOrder;
485 bool enableAdvancedSearch = BaseSettings.Features.ConfigModuleAdvancedSearch;
486 bool enableCallMeBack = BaseSettings.Features.ConfigModuleCallMeBack;
487 bool enableDyslexicFont = BaseSettings.Features.ConfigModuleDyslexicFont;
488 bool enableProductCompare = BaseSettings.Features.ConfigModuleProductCompare;
489 }
490
491
492 <style>
493 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
494 @using Dynamicweb;
495
496 @using System.Data;
497 @using System.Data.SqlClient;
498 @using Bluedesk.Tools.DynamicWeb.DataAccess;
499
500 @using Bluedesk.DynamicWeb.ItemTypes;
501 @using Bluedesk.DynamicWeb.ItemTypes.Settings;
502 @using Bluedesk.DynamicWeb.ItemTypes.Configuration;
503 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution;
504
505 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend;
506
507 @Title("Configuration page template")
508
509 @{
510
511 string RoundedCornersValue = BaseSettings.BrandConfiguration.RoundedCorners;
512 string ButtonHeight = BaseSettings.BrandConfiguration.ButtonHeight;
513
514 string fontawesomeFontFamily = "Font Awesome 5 Pro";
515 int fontawesomeFontWeight = 300;
516
517 switch (BaseSettings.BrandConfiguration.FontawesomeStyle)
518 {
519
520 case "fal":
521 fontawesomeFontWeight = 300;
522 break;
523 case "far":
524 fontawesomeFontWeight = 400;
525 break;
526 case "fas":
527 fontawesomeFontWeight = 900;
528 break;
529 case "fad":
530 fontawesomeFontWeight = 900;
531 fontawesomeFontFamily = "Font Awesome 5 Duotone";
532 break;
533 }
534
535 }
536
537 @BaseSettingServices.RenderButtonCSS("btn__primary", BaseSettingsButtons.PrimaryButtonConfiguration)
538 @BaseSettingServices.RenderButtonCSS("btn__secondary", BaseSettingsButtons.SecondaryButtonConfiguration)
539 @BaseSettingServices.RenderButtonCSS("btn__contrast", BaseSettingsButtons.ContrastButtonConfiguration)
540
541 :root,
542 body {
543
544 --BaseColorPrimary : @BaseSettingsBrandConfiguration.BaseColorPrimary;
545 --BaseColorSecondary : @BaseSettingsBrandConfiguration.BaseColorSecondary;
546 --BaseColorContrast : @BaseSettingsBrandConfiguration.BaseColorContrast;
547
548 --BaseFontPrimary : @BaseSettingsBrandConfiguration.PrimaryFontFamily;
549 --BaseFontSecondary : @BaseSettingsBrandConfiguration.PrimaryFontFamily;
550
551 @BaseSettings.BrandConfiguration.BodyInlineStyles
552 --StandardUnitSize : 3.2rem;
553 }
554
555 .footer {
556 --FooterContainerDisplay: none !important;
557 display: var(--FooterContainerDisplay)
558 }
559
560 h1, h2, h3, h4, h5, h6 { @BaseSettings.BrandConfiguration.HeaderInlineStyles }
561
562 h1.cta-paragraph__header { @BaseSettings.BrandConfiguration.H1InlineStyles }
563 h2.cta-paragraph__header { @BaseSettings.BrandConfiguration.H2InlineStyles }
564 h3.cta-paragraph__header { @BaseSettings.BrandConfiguration.H3InlineStyles }
565 h4.cta-paragraph__header { @BaseSettings.BrandConfiguration.H4InlineStyles }
566
567 .po-block__addtocart .btn,
568 .productdetails__add-to-cart,
569 .searchbox__input {
570 border-radius: @RoundedCornersValue;
571 }
572
573 main.blur {
574 filter: grayscale(50%) blur(15px);
575 -webkit-filter: grayscale(50%) blur(15px);
576 }
577
578 .AdvancedGridButton {
579 --BorderRadius: @RoundedCornersValue;
580 }
581
582 .btn {
583 height: var(--StandardUnitSize);
584 }
585
586 .btn__icon {
587
588 --fontawesomeFontFamily : "@fontawesomeFontFamily";
589 --fontawesomeFontWeight : @fontawesomeFontWeight;
590
591 font-family: var(--fontawesomeFontFamily);
592 font-weight: var(--fontawesomeFontWeight);
593
594 -moz-osx-font-smoothing: grayscale;
595 -webkit-font-smoothing: antialiased;
596 display: inline-block;
597 font-style: normal;
598 font-variant: normal;
599 text-rendering: auto;
600 line-height: 1;
601
602 }
603
604 .cta-paragraph {
605 background-color: var(--mainBackgroundColor);
606 }
607
608 .cta-paragraph__container {
609 background-color: var(--contentBackgroundColor);
610 border: var(--contentBorder);
611 }
612
613 .cta-paragraph__subheader,
614 .cta-paragraph__header,
615 .cta-paragraph__text p,
616 .cta-paragraph__text li {
617 color: var(--Color);
618 background-color: var(--BackgroundColor);
619 border-color: var(--BorderColor);
620 position: var(--Position);
621 top: var(--Top);
622 left: var(--Left);
623 right: var(--Right);
624 bottom: var(--Bottom);
625 padding: var(--Padding);
626 border: var(--BorderSize);
627 font-size: var(--FontSize);
628 text-transform: var(--FontStyle);
629 line-height: var(--LineHeight);
630 font-weight: var(--FontWeight);
631 font-family: var(--FontFamily);
632 border-radius: var(--BorderRadius);
633 }
634
635 .cta-paragraph__content-container {
636 align-items: var(--ContentElementAlignmentAlignItems);
637 text-align: var(--ContentElementAlignmentTextAlign);
638 }
639
640 .cta-paragraph__btn-navigation,
641 .cta-paragraph__content-container {
642 align-items : var(--ContainerFitContentAlignmentAlignItems);
643 justify-content: var(--ContainerFitContentAlignmentJustifyContent);
644 }
645
646 .jumbotron__subheader,
647 .jumbotron__header,
648 .jumbotron__shoutbox-intro p,
649 .jumbotron__shoutbox-intro li,
650 .header--desktop.headerNew {
651 position: relative;
652 }
653
654 .header--desktop.headerNew.stickyheader {
655 position: fixed;
656 }
657
658 @@media screen and (min-width: 992px){
659 .image-left {
660 justify-content: flex-end;
661 flex-direction: row;
662 }
663
664 .image-right {
665 justify-content: flex-start;
666 flex-direction: row-reverse;
667 }
668 }
669
670 .AdvancedGrid__row {
671 background-color: var(--BackgroundColor);
672 }
673
674 .cta-paragraph__btn-navigation {
675 padding: 1.2rem 0rem !important;
676 }
677
678 .AdvancedGrid,
679 .AdvancedGrid__container {
680 width: 100%;
681 background-image: var(--BackgroundImage);
682 min-height: var(--Height);
683 }
684
685 @{
686
687 int PageViewId = Pageview.Page.ID;
688 int AreaId = Pageview.AreaID;
689
690 // HttpContext.Current.Session["PageIdForStyles"] = Pageview.Page.ID;
691 // HttpContext.Current.Session["AreaIdForStyles"] = Pageview.AreaID;
692
693 DataTable AdvancedGridStylesDataTable = null;
694
695 AdvancedGridStylesDataTable = DynamicwebData.Query($@"
696
697 SELECT
698 InlineStyles AS Styles
699
700 FROM
701 [dbo].[ItemType_AdvancedGridConfiguration] AS AGC
702 LEFT JOIN [dbo].[GridRow] AS GR ON GR.GridRowItemId = AGC.Id
703
704 WHERE
705 GR.GridRowPageId = @PageId;
706
707 ", new SqlParameter("PageId", PageViewId));
708
709 DataTable BackgroundConfigDataTable = null;
710
711 BackgroundConfigDataTable = DynamicwebData.Query($@"
712
713 SELECT
714 distinct(BG.Stylesheet) AS Styles
715
716 FROM [dbo].GridRow AS GR
717 INNER JOIN dbo.Paragraph AS PG ON PG.ParagraphGridRowId = GR.GridRowId
718 LEFT JOIN dbo.ItemType_CTAParagraph AS CTA ON CTA.Id = PG.ParagraphItemId
719 LEFT JOIN dbo.ItemType_MultiColumnParagraph AS MCP ON MCP.Id = PG.ParagraphItemId
720 LEFT JOIN dbo.ItemType_Carousel AS CS ON CS.Id = PG.ParagraphItemId
721 LEFT JOIN dbo.ItemType_BackgroundConfiguration AS BG ON CTA.BackgroundConfigurationID = BG.Id
722 OR MCP.BackgroundConfigurationID = BG.Id
723 OR CS.BackgroundConfigurationID = BG.Id
724
725 WHERE GR.GridRowPageID=@PageId
726 AND bg.Stylesheet Is NOT NULL", new SqlParameter("PageId", PageViewId));
727
728 DataTable ButtonConfigDataTable = null;
729
730 ButtonConfigDataTable = DynamicwebData.Query($@"
731
732 SELECT
733 distinct(BCONF.Stylesheet) AS Styles
734
735 FROM [dbo].GridRow AS GR
736 LEFT JOIN [dbo].Paragraph AS P ON P.ParagraphGridRowId = GR.GridRowId
737 LEFT JOIN [dbo].ItemType_CTAParagraph AS CTAP ON CTAP.Id = P.ParagraphItemId
738
739 LEFT JOIN [dbo].ItemType_MultiColumnParagraph AS MCP ON MCP.Id = P.ParagraphItemId
740 LEFT JOIN [dbo].[ItemList] AS ColumnIL ON ColumnIL.ItemListId = MCP.ParagraphListID
741 LEFT JOIN [dbo].[ItemListRelation] AS ColumnILR ON ColumnIL.ItemListId = ColumnILR.ItemListRelationItemListId
742 LEFT JOIN [dbo].[ItemType_ParagraphColumn] AS PC ON PC.Id = ColumnILR.ItemListRelationItemId
743
744 LEFT JOIN [dbo].ItemType_Carousel AS CS ON CS.Id = P.ParagraphItemId
745 LEFT JOIN [dbo].[ItemList] AS CIIL ON CIIL.ItemListId = CS.CarouselListID
746 LEFT JOIN [dbo].[ItemListRelation] AS CIILR ON CIIL.ItemListId = CIILR.ItemListRelationItemListId
747 LEFT JOIN [dbo].ItemType_CarouselItem AS CI ON CI.Id = CIILR.ItemListRelationItemId
748
749 LEFT JOIN [dbo].[ItemType_JumbotronContainer] AS JC ON JC.Id = P.ParagraphItemId
750 LEFT JOIN [dbo].[ItemList] AS JCIL ON JCIL.ItemListId = JC.JumbotronListID
751 LEFT JOIN [dbo].[ItemListRelation] AS JCILR ON JCIL.ItemListId = JCILR.ItemListRelationItemListId
752 LEFT JOIN [dbo].ItemType_JumbotronListItem AS JCLI ON JCLI.Id = JCILR.ItemListRelationItemId
753
754 LEFT JOIN [dbo].[ItemType_CTAButton] AS CTAB ON
755 CTAP.ButtonID = CTAB.Id
756 OR CTAP.ExtraButtonID = CTAB.Id
757 OR MCP.ButtonID = CTAB.Id
758 OR PC.ButtonID = CTAB.Id
759 OR PC.ExtraButtonID = CTAB.Id
760 OR CS.ButtonID = CTAB.Id
761 OR CI.ButtonID = CTAB.Id
762 OR CI.ExtraButtonID = CTAB.Id
763 OR JCLI.ButtonID = CTAB.Id
764 LEFT JOIN [dbo].[ItemType_ButtonConfiguration] AS BCONF ON CTAB.ButtonConfigurationID = BCONF.Id
765
766 WHERE
767 GR.GridRowPageID = @PageId
768 AND GR.GridRowActive = 1
769 AND CTAB.ButtonConfigurationID Is NOT NULL", new SqlParameter("PageId", PageViewId));
770
771 DataTable MasterConfigDataTable = null;
772
773 MasterConfigDataTable = DynamicwebData.Query($@"
774
775 SELECT
776 MC.CustomCSS
777
778 FROM
779 [dbo].[Page] AS P
780 INNER JOIN [dbo].[ItemType_MasterConfig] AS MC ON P.PageItemId = MC.Id
781
782 WHERE
783 p.PageItemType = 'MasterConfig'
784 AND PageAreaId = @AreaId;", new SqlParameter("AreaId", AreaId));
785
786 if (AdvancedGridStylesDataTable != null && AdvancedGridStylesDataTable.Rows.Count > 0)
787 {
788 for (int i = 0; i < AdvancedGridStylesDataTable.Rows.Count; i++)
789 {
790 @AdvancedGridStylesDataTable.Rows[i]["Styles"].ToString();
791 }
792 }
793
794 if (BackgroundConfigDataTable != null && BackgroundConfigDataTable.Rows.Count > 0)
795 {
796 for (int i = 0; i < BackgroundConfigDataTable.Rows.Count; i++)
797 {
798 @BackgroundConfigDataTable.Rows[i]["Styles"].ToString().Replace("--Color: ;", "");
799 }
800 }
801
802 if (ButtonConfigDataTable != null && ButtonConfigDataTable.Rows.Count > 0)
803 {
804 for (int i = 0; i < ButtonConfigDataTable.Rows.Count; i++)
805 {
806 @ButtonConfigDataTable.Rows[i]["Styles"].ToString();
807 }
808 }
809
810 @MasterConfigDataTable.Rows[0]["CustomCSS"].ToString();
811 }
812
813 </style>
814
815 </head>
816 <body class="ProductDetailPage Page--@Pageview.Page.ID @MasterConfigCssClass" id="@Pageview.Page.ID">
817
818 @BaseSettings.System.BodyScript
819 @{
820 if (_cookieOptinLevel.ToString() == "All" || _enabledCookieCategories.Contains("Marketing_Cookies"))
821 {
822 @BaseSettings.System.BodyScriptAfterConsent;
823 }
824 }
825
826 @BaseSettings.System.TailScript
827 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
828 @using System.Linq;
829 @using System.Data;
830 @using Dynamicweb;
831 @using Dynamicweb.Content;
832 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend;
833 @using Bluedesk.DynamicWeb.ItemTypes;
834 @using Bluedesk.DynamicWeb.ItemTypes.Configuration;
835 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution;
836
837 @{
838 var corporate_settings = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, "CorporateSettingsPage");
839 CorporateSettingsPage cs = corporate_settings.Item.ToCodeFirstItem<CorporateSettingsPage>();
840 var bannerActive = cs.BannerActive;
841 var bannerText = cs.BannerText;
842 var bannerTextColor = cs.BannerTextColor;
843 var bannerBackgroundColor = cs.BannerBackgroundColor;
844 var bannerLink = cs.BannerLink;
845
846 if (string.IsNullOrEmpty(bannerBackgroundColor))
847 {
848 bannerBackgroundColor = "#FFFFFF";
849 }
850 if (string.IsNullOrEmpty(bannerTextColor))
851 {
852 bannerTextColor = "#000000";
853 }
854 }
855
856 @if (bannerActive)
857 {
858 <div class="campaign-banner" style="--campaign-bg-color: @bannerBackgroundColor; --campaign-text-color: @bannerTextColor;">
859 <div class="campaign-banner__container">
860 @if(!string.IsNullOrWhiteSpace(bannerLink))
861 {
862 <a href="@bannerLink" class="campaign-banner__link">
863 <span class="campaign-banner__text">@bannerText</span>
864 </a>
865 }
866 else
867 {
868 <span class="campaign-banner__text">@bannerText</span>
869 }
870 <button class="campaign-banner__close">
871 <i class="fa fa-times" aria-hidden="true"></i>
872 </button>
873 </div>
874 </div>
875 }
876
877
878 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
879
880 @using System.Linq;
881 @using System.Data;
882
883 @using Dynamicweb;
884 @using Dynamicweb.Content;
885 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend;
886
887 @{
888
889 DataTable DataTableObj = AdvancedGridServices.GetHeaderGridDataTable(Pageview.AreaID, Pageview.Page.ID);
890
891 WrapperObj Header = AdvancedGridServices.RenderWrapper(DataTableObj, "header", "header", Pageview.AreaID, Pageview.Page.ID);
892 WrapperObj Footer = AdvancedGridServices.RenderWrapper(DataTableObj, "footer", "footer", Pageview.AreaID, Pageview.Page.ID);
893
894 // var homepage = Dynamicweb.Services.Pages.GetRootPagesForArea(Pageview.AreaID).FirstOrDefault(p => p.ItemType == "HomePage" && p.Active) ?? Dynamicweb.Services.Pages.GetFirstPageForArea(Pageview.AreaID);
895
896 MasterLayoutPageObj MasterLayoutPageObj = MasterLayoutControllers.RenderMasterLayoutPageObj(Pageview);
897
898 bool userLoggedIn = false;
899 if (enableLogin) { userLoggedIn = Pageview.User == null ? false : true; }
900
901 string HeaderContainerSize = mc.HeaderConfiguration.ContainerSize != 0 ? mc.HeaderConfiguration.ContainerSize + "px" : "auto";
902
903 }
904
905 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
906 @using Dynamicweb;
907 @using Dynamicweb.Content.Items;
908
909 <script>
910
911 function setImagesSizes(Classname) {
912 var Images = document.querySelectorAll(Classname);
913 for (var index = 0; index < Images.length; index++) {
914 if (!Images[index].hasAttribute("height")) {
915 Images[index].setAttribute("height", Images[index].offsetHeight);
916 }
917 if (!Images[index].hasAttribute("width")) {
918 Images[index].setAttribute("width", Images[index].offsetWidth);
919 }
920 }
921 }
922
923 window.addEventListener('load', function () {
924 setImagesSizes("img");
925 setImagesSizes(".mc-header__logo-image");
926 });
927
928 </script>
929
930
931 @if (!hideHeader)
932 {
933 <header>@MasterLayoutPageObj.Header</header>
934
935 <!-- DO NOT REMOVE -->
936 <div id="quick-order"></div>
937 <div id="backdrop-megamenu"></div>
938 <mega-menu id="mega-menu"></mega-menu>
939 <!-- DO NOT REMOVE -->
940 }
941
942 @if (isVisualEditor && IsNotContentManager)
943 {
944 @AdvancedGridServices.RenderVisualEditorNavigation(DataTableObj, "header")
945 }
946
947 <style>@MasterLayoutPageObj.CSS</style>
948
949 <style>
950
951
952 .visual-editor__navigation {
953 position: absolute;
954 top: 10px;
955 left: 10px;
956 display: flex;
957 flex-direction: row;
958 z-index: 100000000;
959 }
960
961 .visual-editor__button {
962 height: 50px;
963 min-width: 150px;
964 right: auto;
965 left: auto;
966 background-color: white;
967 box-shadow: -10px 10px 10px rgb(28 28 84 / 25%);
968 display: flex;
969 justify-content: center;
970 align-items: center;
971 padding: 25px;
972 margin-right: 25px;
973 }
974
975 .visual-editor__button-icon {
976 margin-right: 25px;
977 }
978
979 .header {
980 --HeaderContainerDisplay: none;
981 }
982
983 .header__container {
984 padding: 0;
985 }
986
987 .header__container, .header__stickyheader-container {
988 max-width: none;
989 }
990
991 .header .AdvancedGrid__container {
992 max-width: @HeaderContainerSize;
993 margin: 0 auto;
994 }
995
996 .header .AdvancedGrid__column {
997 background-color: var(--BackgroundColor);
998 flex-grow: var(--FlexGrow);
999 }
1000
1001 .AdvancedGrid__row {
1002 align-items: center;
1003 }
1004 </style>
1005
1006 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
1007 @using Dynamicweb;
1008 @using Bluedesk.DynamicWeb.ItemTypes;
1009
1010 @{
1011 var pid = ModuleOnlyParagraph.GetParagraphIDByTag<ModuleOnlyParagraph>("SideBarForm", Pageview.AreaID);
1012
1013 if (pid > 0)
1014 {
1015 <section id="vue-side-bar-form" data-paragraphid="@pid" data-telephone="@phonenumber" data-formatphonenumber="@formattedPhonenumber" data-isoffline="@isOffline"></section>
1016 }
1017 }
1018
1019
1020 @if (@enableProductCompare)
1021 {
1022 <div id="vue-compare-list"></div>
1023 }
1024
1025 @Model.Grid("grid", "Before breadcrumb", "", "AdvancedGrid")
1026
1027 @if (showBreadcrumbs && !isOverviewPage)
1028 {
1029 var navigationSettings = new NavigationSettings();
1030 navigationSettings.ExpandMode = ExpandMode.PathOnly;
1031 navigationSettings.StartLevel = 1;
1032 navigationSettings.StopLevel = 99;
1033 navigationSettings.Parameters.Add("PageTitle", Model.Title);
1034 navigationSettings.IncludeFoldersAndHidden = true;
1035
1036 @Navigation.RenderNavigation("Navigation/Breadcrumbs.cshtml", navigationSettings)
1037
1038 }
1039
1040 @Model.Grid("grid2", "After breadcrumb", "", "AdvancedGrid")
1041
1042 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
1043 @using Dynamicweb;
1044 @using Bluedesk.DynamicWeb.ItemTypes;
1045 @using Bluedesk.DynamicWeb.ItemTypes.Extensions;
1046 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend;
1047
1048 @{
1049
1050 string footerLogo = BaseSettings.BrandConfiguration.Logos.FooterLogo;
1051 string footerDescription = BaseSettings.CorporateSettings.FooterDescription;
1052
1053 var fb = BaseSettings.SocialMedia.Facebook;
1054 var twitter = BaseSettings.SocialMedia.Twitter;
1055 var linkedin = BaseSettings.SocialMedia.LinkedIn;
1056 var instagram = BaseSettings.SocialMedia.Instagram;
1057 var youtube = BaseSettings.SocialMedia.Youtube;
1058 var pinterest = BaseSettings.SocialMedia.Pinterest ?? "";
1059
1060 var companyName = BaseSettings.CorporateSettings.CompanyName;
1061 var Emailadress = BaseSettings.CorporateSettings.Emailadress;
1062 var Phonenumber = BaseSettings.CorporateSettings.Phonenumber;
1063 var Address = BaseSettings.CorporateSettings.Address;
1064 var Zipcode = BaseSettings.CorporateSettings.Zipcode;
1065 var City = BaseSettings.CorporateSettings.City;
1066 var Country = BaseSettings.CorporateSettings.Country;
1067
1068 var selectedPaymentLogos = BaseSettings.BrandConfiguration.Logos.FooterPaymentLogos;
1069
1070 bool footer__newsletter_signup_display = !string.IsNullOrWhiteSpace(mc.FooterConfiguration.NewsLetterSignUpDisplay.ToString()) && mc.FooterConfiguration.NewsLetterSignUpDisplay.ToString() == "True" ? true : false;
1071 bool footer__USP_display = !string.IsNullOrWhiteSpace(mc.FooterConfiguration.UspDisplay.ToString()) && mc.FooterConfiguration.UspDisplay.ToString() == "True" ? true : false;
1072
1073 string footer__background_color = mc.FooterConfiguration.BackgroundColor?.GetColorCode(Pageview.AreaID) ?? "#000000";
1074 string footer__color = mc.FooterConfiguration.Color?.GetColorCode(Pageview.AreaID) ?? "#FFFFFF";
1075
1076 string footer__top_image = !string.IsNullOrWhiteSpace(mc.FooterConfiguration.TopImage.ToString()) ? mc.FooterConfiguration.TopImage.ToString() : "";
1077
1078
1079
1080 }
1081
1082 <div id="scroll-to-top" class="scroll-to-top" aria-label="@Translate("Naar boven", "To Top")">
1083 <span class="scroll-to-top__text">
1084 @Translate("Naar boven", "To Top")
1085 </span>
1086 <i class="fal fa-arrow-to-top scroll-to-top__icon"></i>
1087 </div>
1088
1089 @if (Pageview.Page.ParentPageId > 0)
1090 {
1091 var siblings = Dynamicweb.Services.Pages.GetPagesByParentID(Pageview.Page.ParentPageId).Where(p => p.Active).ToList();
1092 var parentpageItemType = Pageview.Page.Parent.ItemType;
1093 bool isParentPageOverviewpage = parentpageItemType == "OverviewPage";
1094
1095 if (siblings.Count() > 1 && isParentPageOverviewpage)
1096 {
1097 var prevPage = siblings.OrderByDescending(p => p.Sort).FirstOrDefault(p => p.Sort < Pageview.Page.Sort);
1098 var nextPage = siblings.OrderBy(p => p.Sort).FirstOrDefault(p => p.Sort > Pageview.Page.Sort);
1099 var overview = "/Default.aspx?ID=" + Pageview.Page.ParentPageId;
1100
1101 <section class="page-navigation">
1102 @if (prevPage != null)
1103 {
1104 var back = "/Default.aspx?ID=" + prevPage.ID;
1105 <a href="@back" class="page-navigation__item">
1106 <i class="fal fa-arrow-alt-to-left page-navigation__item--icon"></i>
1107 <label class="page-navigation__item-label">@Translate("pagenavigation.previous", "Previous")</label>
1108 </a>
1109 }
1110
1111 <a href="@overview" class="page-navigation__item">
1112 <label class="page-navigation__item-label">@Translate("pagenavigation.Overview", "To overview")</label>
1113 <i class="fas fa-th page-navigation__item--icon"></i>
1114 </a>
1115
1116 @if (nextPage != null)
1117 {
1118 var forward = "/Default.aspx?ID=" + nextPage.ID;
1119 <a href="@forward" class="page-navigation__item">
1120 <label class="page-navigation__item-label">@Translate("pagenavigation.next", "Next")</label>
1121 <i class="fal fa-arrow-alt-to-right page-navigation__item--icon"></i>
1122 </a>
1123 }
1124 </section>
1125 }
1126 }
1127
1128 @*
1129
1130 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
1131 @using Dynamicweb;
1132 @using Bluedesk.Tools.DynamicWeb.ExtensionMethods;
1133 @using Bluedesk.DynamicWeb.ItemTypes;
1134
1135 @{
1136
1137 if (Pageview.Page.ParentPageId > 0)
1138 {
1139
1140 // Paging
1141
1142 var siblings = Dynamicweb.Services.Pages.GetPagesByParentID(Pageview.Page.ParentPageId).Where(p => p.Active).ToList();
1143 var currentID = Pageview.Page.ID;
1144 var parentpageItemType = Pageview.Page.Parent.ItemType;
1145 bool isParentPageOverviewpage = parentpageItemType == "OverviewPage";
1146
1147
1148 var siblingsCount = siblings.Count;
1149
1150 int previousIdx = 0;
1151 int nextIdx = siblingsCount - 1;
1152 int idx = 0;
1153
1154 for (int i = 0; i < siblingsCount; i++)
1155 {
1156 if (siblings[i].ID == currentID && siblings[i].PropertyItem != null)
1157 {
1158 idx = i;
1159 }
1160 }
1161
1162 previousIdx = idx == previousIdx ? previousIdx : idx - 1;
1163 nextIdx = idx == nextIdx ? nextIdx : idx + 1;
1164
1165 var previousID = siblings[previousIdx].ID;
1166 var nextID = siblings[nextIdx].ID;
1167 var overview = "/Default.aspx?ID=" + Pageview.Page.ParentPageId;
1168
1169 if (siblingsCount > 1)
1170 {
1171
1172 <section class="page-navigation">
1173
1174 @if (!(previousID == currentID || previousID == 0))
1175 {
1176 var back = "/Default.aspx?ID=" + previousID;
1177 <a href="@back" class="page-navigation__item">
1178 <i class="fal fa-arrow-alt-to-left page-navigation__item--icon"></i>
1179 <label class="page-navigation__item-label">@Translate("pagenavigation.previous", "Previous")</label>
1180 </a>
1181 }
1182
1183 <a href="@overview" class="page-navigation__item">
1184 <label class="page-navigation__item-label">@Translate("pagenavigation.Overview", "To overview")</label>
1185 <i class="fas fa-th page-navigation__item--icon"></i>
1186 </a>
1187
1188 @if (!(nextID == currentID || nextID == 0))
1189 {
1190 var forward = "/Default.aspx?ID=" + nextID;
1191 <a href="@forward" class="page-navigation__item">
1192 <label class="page-navigation__item-label">@Translate("pagenavigation.next", "Next")</label>
1193 <i class="fal fa-arrow-alt-to-right page-navigation__item--icon"></i>
1194 </a>
1195 }
1196
1197 </section>
1198
1199 }
1200
1201 }
1202 else
1203 {
1204 // No action
1205 }
1206
1207 }
1208
1209 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
1210 @using Dynamicweb;
1211
1212 @if (Pageview.Page.ParentPageId > 0)
1213 {
1214 var siblings = Dynamicweb.Services.Pages.GetPagesByParentID(Pageview.Page.ParentPageId).Where(p => p.Active).ToList();
1215 var parentpageItemType = Pageview.Page.Parent.ItemType;
1216 bool isParentPageOverviewpage = parentpageItemType == "OverviewPage";
1217
1218 if (siblings.Count() > 1 && isParentPageOverviewpage)
1219 {
1220 var prevPage = siblings.OrderByDescending(p => p.Sort).FirstOrDefault(p => p.Sort < Pageview.Page.Sort);
1221 var nextPage = siblings.OrderBy(p => p.Sort).FirstOrDefault(p => p.Sort > Pageview.Page.Sort);
1222 var overview = "/Default.aspx?ID=" + Pageview.Page.ParentPageId;
1223
1224 <section class="page-navigation">
1225 @if (prevPage != null)
1226 {
1227 var back = "/Default.aspx?ID=" + prevPage.ID;
1228 <a href="@back" class="page-navigation__item">
1229 <i class="fal fa-arrow-alt-to-left page-navigation__item--icon"></i>
1230 <label class="page-navigation__item-label">@Translate("pagenavigation.previous", "Previous")</label>
1231 </a>
1232 }
1233
1234 <a href="@overview" class="page-navigation__item">
1235 <label class="page-navigation__item-label">@Translate("pagenavigation.Overview", "To overview")</label>
1236 <i class="fas fa-th page-navigation__item--icon"></i>
1237 </a>
1238
1239 @if (nextPage != null)
1240 {
1241 var forward = "/Default.aspx?ID=" + nextPage.ID;
1242 <a href="@forward" class="page-navigation__item">
1243 <label class="page-navigation__item-label">@Translate("pagenavigation.next", "Next")</label>
1244 <i class="fal fa-arrow-alt-to-right page-navigation__item--icon"></i>
1245 </a>
1246 }
1247 </section>
1248 }
1249 }
1250
1251 *@
1252
1253
1254
1255 @if (!hideFooter)
1256 {
1257 <footer>@MasterLayoutPageObj.Footer</footer>
1258 }
1259
1260 @if (isVisualEditor && IsNotContentManager)
1261 {
1262 <nav class="footer-layout">
1263 @AdvancedGridServices.RenderVisualEditorNavigation(DataTableObj, "footer")
1264 </nav>
1265
1266 <style>
1267 .footer-layout {
1268 position: absolute;
1269 bottom: 25px;
1270 }
1271 </style>
1272 }
1273
1274 @if (!string.IsNullOrWhiteSpace(footer__top_image) && HideStandardFooter == false)
1275 {
1276 <figure class="footer__top-image">
1277 <img src="@footer__top_image" alt="" />
1278 </figure>
1279 }
1280
1281 @if (HideStandardFooter == false || !hideFooter)
1282 {
1283
1284 <footer class="footer" style="--footer-bg-color: @footer__background_color; --footer-color: @footer__color;">
1285
1286 @if (footer__USP_display)
1287 {
1288 if (!string.IsNullOrWhiteSpace(BaseSettings.USP.USP_1) || !string.IsNullOrWhiteSpace(BaseSettings.USP.USP_2) || !string.IsNullOrWhiteSpace(BaseSettings.USP.USP_3) || !string.IsNullOrWhiteSpace(BaseSettings.USP.USP_4) || !string.IsNullOrWhiteSpace(BaseSettings.USP.USP_5))
1289 {
1290 <div class="footer-usp__wrapper">
1291 <div class="container">
1292 <ul class="footer-usp__list flex-wrap">
1293 @RenderFooterUSP(BaseSettings.USP.USP_1, BaseSettings.USP.USP_1_icon)
1294 @RenderFooterUSP(BaseSettings.USP.USP_2, BaseSettings.USP.USP_2_icon)
1295 @RenderFooterUSP(BaseSettings.USP.USP_3, BaseSettings.USP.USP_3_icon)
1296 @RenderFooterUSP(BaseSettings.USP.USP_4, BaseSettings.USP.USP_4_icon)
1297 @RenderFooterUSP(BaseSettings.USP.USP_5, BaseSettings.USP.USP_5_icon)
1298
1299 </ul>
1300 </div>
1301 </div>
1302 }
1303 }
1304
1305 @if (footer__newsletter_signup_display)
1306 {
1307 <div>
1308 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
1309 @using Dynamicweb;
1310
1311 @{
1312 var newsletterFormID = ModuleOnlyParagraph.GetParagraphIDByTag<ModuleOnlyParagraph>("Footer.Newsletter", Pageview.AreaID);
1313
1314 if (newsletterFormID > 0)
1315 {
1316 <section class="footer__newsletter-container">
1317 <div class="container footer__newsletter">
1318 <label class="footer__newsletter-label">
1319 @Translate("Footer.SignUpNewsletter", "Sign up for the digital newsletter")
1320 </label>
1321 @RenderParagraphContent(newsletterFormID)
1322 </div>
1323 </section>
1324 }
1325 }
1326
1327 </div>
1328 }
1329
1330 @if (!string.IsNullOrWhiteSpace(mc.FooterConfiguration.BackgroundGradient))
1331 {
1332 <style>
1333 .footer {
1334 @mc.FooterConfiguration.BackgroundGradient;
1335 }
1336 </style>
1337 }
1338
1339 <section class="container footer__content">
1340
1341 <div class="footer__link">
1342 @{
1343 var footerColumnOneNavigationSettings = new NavigationSettings();
1344 footerColumnOneNavigationSettings.ExpandMode = ExpandMode.All;
1345 footerColumnOneNavigationSettings.StartLevel = 1;
1346 footerColumnOneNavigationSettings.StopLevel = 4;
1347 footerColumnOneNavigationSettings.RootNavigationTag = "footer-column-1";
1348 var footerColumnOneNavigation = Navigation.RenderNavigation("Navigation/BottomNavigation.cshtml", footerColumnOneNavigationSettings);
1349
1350 if (!string.IsNullOrEmpty(footerColumnOneNavigation))
1351 {
1352 <p class="footer__link-header">@Translate("Footer.Column1.Header", "What you need to know")</p>
1353 @footerColumnOneNavigation
1354 }
1355 }
1356 </div>
1357 <div class="footer__link">
1358 @{
1359 var footerColumnTwoNavigationSettings = new NavigationSettings();
1360 footerColumnTwoNavigationSettings.ExpandMode = ExpandMode.All;
1361 footerColumnTwoNavigationSettings.StartLevel = 1;
1362 footerColumnTwoNavigationSettings.StopLevel = 4;
1363 footerColumnTwoNavigationSettings.RootNavigationTag = "footer-column-2";
1364 var footerColumnTwoNavigation = Navigation.RenderNavigation("Navigation/BottomNavigation.cshtml", footerColumnTwoNavigationSettings);
1365
1366 if (!string.IsNullOrEmpty(footerColumnTwoNavigation))
1367 {
1368 <p class="footer__link-header">@Translate("Footer.Column2.Header", "Category two")</p>
1369 @footerColumnTwoNavigation
1370 }
1371 }
1372 </div>
1373 <div class="footer__link">
1374 @{
1375 var footerColumnThreeNavigationSettings = new NavigationSettings();
1376 footerColumnThreeNavigationSettings.ExpandMode = ExpandMode.All;
1377 footerColumnThreeNavigationSettings.StartLevel = 1;
1378 footerColumnThreeNavigationSettings.StopLevel = 4;
1379 footerColumnThreeNavigationSettings.RootNavigationTag = "footer-column-3";
1380 var footerColumnThreeNavigation = Navigation.RenderNavigation("Navigation/BottomNavigation.cshtml", footerColumnThreeNavigationSettings);
1381
1382 if (!string.IsNullOrEmpty(footerColumnThreeNavigation))
1383 {
1384 <p class="footer__link-header">@Translate("Footer.Column3.Header", "Category three")</p>
1385 @footerColumnThreeNavigation
1386 }
1387 }
1388 </div>
1389
1390 @if (!string.IsNullOrWhiteSpace(footerLogo) || !string.IsNullOrWhiteSpace(footerDescription))
1391 {
1392 <div class="footer__description-container">
1393 @if (!string.IsNullOrWhiteSpace(footerLogo))
1394 {
1395 <img class="footer__logo" loading="lazy" src="/Admin/Public/GetImage.ashx?Image=@footerLogo&Crop=5&Format=webp&Quality=99&Compression=80&Width=400" alt="Footer logo" width="400" height="200" />
1396 }
1397
1398 @if (!string.IsNullOrWhiteSpace(footerDescription))
1399 {
1400 <div class="footer__description">
1401 @footerDescription
1402 </div>
1403 }
1404 </div>
1405 }
1406
1407 </section>
1408
1409 <section class="footer__copyright">
1410
1411 <div class="container bottombar__container">
1412 @{
1413 var copyRightMenuNavigationSettings = new NavigationSettings();
1414 copyRightMenuNavigationSettings.ExpandMode = ExpandMode.All;
1415 copyRightMenuNavigationSettings.StartLevel = 1;
1416 copyRightMenuNavigationSettings.StopLevel = 4;
1417 copyRightMenuNavigationSettings.RootNavigationTag = "bottombar";
1418 var copyRightMenuNavigation = Navigation.RenderNavigation("Navigation/CleanNavigation.cshtml", copyRightMenuNavigationSettings);
1419
1420 if (!string.IsNullOrEmpty(copyRightMenuNavigation))
1421 {
1422 @copyRightMenuNavigation;
1423 }
1424 }
1425
1426 @if (!string.IsNullOrWhiteSpace(twitter) || !string.IsNullOrWhiteSpace(fb) || !string.IsNullOrWhiteSpace(linkedin) || !string.IsNullOrWhiteSpace(youtube) || !string.IsNullOrWhiteSpace(instagram) || !string.IsNullOrWhiteSpace(pinterest))
1427 {
1428 <section class="footer__social-container">
1429
1430 <span class="footer__icon-labels">@Translate("Footer.FollowUs", "Volg ons op:")</span>
1431
1432 <div class="footer__social-icon-container">
1433 @if (!string.IsNullOrWhiteSpace(twitter))
1434 {
1435 <a href="@twitter" target="_blank" title="twitter" class="footer__social" rel="noreferrer"><i class="fab fa-twitter"></i></a>
1436 }
1437 @if (!string.IsNullOrWhiteSpace(fb))
1438 {
1439 <a href="@fb" target="_blank" title="facebook" class="footer__social" rel="noreferrer"><i class="fab fa-facebook-square"></i></a>
1440 }
1441 @if (!string.IsNullOrWhiteSpace(linkedin))
1442 {
1443 <a href="@linkedin" target="_blank" title="LinkedIn" class="footer__social" rel="noreferrer"><i class="fab fa-linkedin"></i></a>
1444 }
1445 @if (!string.IsNullOrWhiteSpace(youtube))
1446 {
1447 <a href="@youtube" target="_blank" title="YouTube" class="footer__social" rel="noreferrer"><i class="fab fa-youtube"></i></a>
1448 }
1449 @if (!string.IsNullOrWhiteSpace(instagram))
1450 {
1451 <a href="@instagram" target="_blank" title="Instagram" class="footer__social" rel="noreferrer"><i class="fab fa-instagram"></i></a>
1452 }
1453 @if (!string.IsNullOrWhiteSpace(pinterest))
1454 {
1455 <a href="@pinterest" target="_blank" title="Pinterest" class="footer__social" rel="noreferrer"><i class="fab fa-pinterest"></i></a>
1456 }
1457 </div>
1458
1459 </section>
1460 }
1461 </div>
1462
1463 </section>
1464
1465 <section class="footer-paymentoptions" data-paymentmethods="@selectedPaymentLogos"></section>
1466 </footer>
1467
1468 }
1469
1470 @helper RenderFooterUSP(string USP_content, string USP_icon)
1471 {
1472 if (!string.IsNullOrWhiteSpace(USP_content))
1473 {
1474 var usp_icon_class = (!string.IsNullOrWhiteSpace(USP_icon)) ? USP_icon : "fal fa-check";
1475
1476 <li class="footer-usp__item">
1477 <i class="@usp_icon_class footer-usp__icon"></i>
1478 <span>@USP_content</span>
1479 </li>
1480 }
1481 }
1482
1483 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
1484 @using Dynamicweb;
1485 @using Dynamicweb.Content.Items;
1486 @using Bluedesk.DynamicWeb.ItemTypes;
1487
1488 @{
1489 var colorService = new ColorSwatchService();
1490 bool displayPrices = mc.EcomConfiguration.HidePricesForGuests ? Pageview.User != null : true;
1491 string ShowZeroPrices = (!mc.EcomConfiguration.HideZeroPrices).ToString().ToLower();
1492
1493 var homepage = Dynamicweb.Services.Pages.GetRootPagesForArea(Pageview.AreaID).FirstOrDefault(p => p.ItemType == "HomePage" && p.Active) ?? Dynamicweb.Services.Pages.GetFirstPageForArea(Pageview.AreaID);
1494
1495 var bottomBarItemsList = new List<object>();
1496 foreach (var _item in mc.FooterConfiguration.BottombarItemList)
1497 {
1498 string title = _item.Title;
1499 string link = _item.TargetLink;
1500
1501 if (_item.Type == "login" && Pageview.User != null)
1502 {
1503 title = @Translate("Bottombar.Logout", "Logout");
1504 link = $"/Admin/Public/ExtranetLogoff.aspx?ID={homepage.ID}";
1505 }
1506
1507 var newItem = new
1508 {
1509 title = title,
1510 icon = _item.Icon,
1511 link = link,
1512 subtitle = _item.Title,
1513 type = _item.Type,
1514 visible = true
1515 };
1516 bottomBarItemsList.Add(newItem);
1517 }
1518 var allBottomBarItems = bottomBarItemsList.ToArray();
1519 string bottomBarItemsJson = Newtonsoft.Json.JsonConvert.SerializeObject(allBottomBarItems).Replace("\"", "\'");
1520
1521 string BottombarBackgroundColor = mc.FooterConfiguration.BottombarBackgroundColor;
1522 if (!string.IsNullOrWhiteSpace(BottombarBackgroundColor))
1523 {
1524 BottombarBackgroundColor = !BottombarBackgroundColor.Contains("#") ? colorService.GetHexColor(Pageview.AreaID, BottombarBackgroundColor) : BottombarBackgroundColor;
1525 }
1526
1527 string BottombarTextColor = mc.FooterConfiguration.BottombarTextColor;
1528 if (!string.IsNullOrWhiteSpace(BottombarTextColor))
1529 {
1530 BottombarTextColor = !BottombarTextColor.Contains("#") ? colorService.GetHexColor(Pageview.AreaID, BottombarTextColor) : BottombarTextColor;
1531 }
1532
1533 string BottombarIconColor = mc.FooterConfiguration.BottombarIconColor;
1534 if (!string.IsNullOrWhiteSpace(BottombarIconColor))
1535 {
1536 BottombarIconColor = !BottombarIconColor.Contains("#") ? colorService.GetHexColor(Pageview.AreaID, BottombarIconColor) : BottombarIconColor;
1537 }
1538 }
1539
1540 <style>
1541 .bottombar {
1542 background-color: @BottombarBackgroundColor;
1543 }
1544 .bottombar__button span {
1545 color: @BottombarTextColor;
1546 }
1547 .bottombar__button [class^=fa],
1548 .bottombar__button [class^=svg-] {
1549 color: @BottombarIconColor;
1550 }
1551 </style>
1552
1553 <section id="vue-modal"
1554 data-show-prices="@displayPrices.ToString().ToLower()"
1555 data-show-zero-prices="@ShowZeroPrices">
1556 </section>
1557
1558 @if (!hideBottombar)
1559 {
1560 <section id="vue-bottom-bar"
1561 data-items="@bottomBarItemsJson"
1562 data-phonenumber="@formattedPhonenumber"
1563 data-isoffline="@isOffline"
1564 data-emailadress="@emailadress"
1565 data-currentpageid="@homepage.ID"
1566 data-enable-login="@enableLogin"
1567 data-enable-shoppingcart="@enableShoppingCart"
1568 data-enable-advancedsearch="@enableAdvancedSearch">
1569 </section>
1570 }
1571
1572 @{
1573 int SearchPageID = Bluedesk.Tools.DynamicWeb.Generic.PageHelper.GetPageIDByNavigationTag("searchresults", Pageview.AreaID);
1574 var SearchPlaceholder = Translate("Searchbox.PlaceholderValue", "Search...");
1575 var SearchPlaceholderHover = Translate("Search.PlaceholderValue2", "Zoekt u misschien een ...?");
1576 var SearchPrefill = Dynamicweb.Context.Current.Request["q"];
1577 var SearchboxClass = !string.IsNullOrWhiteSpace(SearchPrefill) ? "open" : "";
1578 var SearchtoggleClass = !string.IsNullOrWhiteSpace(SearchPrefill) ? "close" : "";
1579 }
1580
1581 <section class="bottombar__searchbox__wrapper">
1582 <form class="searchbox__form" method="get" action="/Default.aspx" style="display: flex; flex-grow: 1;">
1583 <input type="text" name="q" value="@SearchPrefill" class="searchbox__input" placeholder="@SearchPlaceholder" aria-label="Search through site content" data-placeholder="@SearchPlaceholder" data-hoverplaceholder="@SearchPlaceholderHover" style="display: flex; flex-grow: 1;" />
1584 <div class="searchbox__button">
1585 <button type="submit" class="searchbox__form__submit icon icon--medium icon__search input__icon" aria-label="Search">
1586 <i class="fal fa-search"></i>
1587 </button>
1588 </div>
1589 <input type="hidden" name="ID" value="@SearchPageID" />
1590 </form>
1591
1592 </section>
1593
1594 @using Dynamicweb.Rendering
1595 @using Dynamicweb.Security.UserManagement
1596
1597 @{
1598 UserImpersonation impersonationMode = User.ImpersonationMode;
1599 User currentUser = Pageview.User;
1600 User secondaryUser = Pageview.User?.CurrentSecondaryUser ?? null;
1601 bool isImpersonating = Pageview.User?.CurrentSecondaryUser != null;
1602 int impersonationPageId = GetPageIdByNavigationTag("CustomerImpersonation");
1603
1604 if(isImpersonating && impersonationMode == UserImpersonation.Full) {
1605 currentUser = Pageview.User.CurrentSecondaryUser;
1606 secondaryUser = Pageview.User;
1607 }
1608 }
1609
1610 @if(currentUser != null && currentUser.GetUsersICanSetAsSecondary().Count > 0)
1611 {
1612 <div class="impersonation">
1613 <div class="impersonation__header">
1614 <p class="impersonation__title">
1615 @Translate("Impersonate.Modal.Title", "Impersonation")
1616 @if (isImpersonating)
1617 {
1618 <span title="On" class="impersonation__indicator"></span>
1619 }
1620 </p>
1621 <i class="fal fa-chevron-up impersonation__header-icon"></i>
1622 </div>
1623 <div class="impersonation__body">
1624 @if (isImpersonating)
1625 {
1626 <p>@string.Format(Translate("Impersonate.CurrentImpersonation", "You ({0}) are currently impersonating {1}"), string.Format("<strong>{0}</strong>", currentUser.UserName), string.Format("<strong>{0}</strong>", secondaryUser.UserName))</p>
1627
1628 <form method="post" name="stopImpersonation">
1629 <input name="DwExtranetRemoveSecondaryUser" id="DwExtranetRemoveSecondaryUser" type="hidden">
1630 <div class="mt-4">
1631 <button class="btn btn__primary" type="submit">
1632 <span class="btn__text">@Translate("Impersonate.StopBtn", "Stop impersonation")</span>
1633 <i class="fas fa-ban btn__icon"></i>
1634 </button>
1635 </div>
1636 </form>
1637 } else {
1638 <p>@Translate("Impersonate.Modal.Content", "Take a look at the list of customers you can impersonate.")</p>
1639 <div class="w-full flex mt-2">
1640 <a href="Default.aspx?ID=@impersonationPageId" class="btn btn__primary">
1641 <span class="btn__text">@Translate("Impersonate.Modal.ViewList", "View List")</span>
1642 <i class="fal fa-chevron-right btn__icon"></i>
1643 </a>
1644 </div>
1645 }
1646 </div>
1647 </div>
1648 }
1649
1650 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
1651 @using System;
1652 @using Dynamicweb;
1653 @using Dynamicweb.Ecommerce.CustomerExperienceCenter.Favorites;
1654
1655 @{
1656 var favListService = new FavoriteListService();
1657 IEnumerable<FavoriteList> favoriteLists = Pageview.User != null ? favListService.GetLists(Pageview.User.ID) : null;
1658 int favoritelistsPageId = GetPageIdByNavigationTag("CustomerFavorites");
1659 }
1660
1661 @if(favoriteLists != null && Pageview.User != null)
1662 {
1663 <div class="offcanvas__backdrop" name="favoritelist"></div>
1664 <aside class="offcanvas" data-listcount="@favoriteLists.Count()" name="favoritelist">
1665 <header class="offcanvas__header">
1666 <span class="offcanvas__title">@Translate("OffCanvasMenu.FavoritesTitle", "Add to favorite list")</span>
1667 <button class="offcanvas__close" aria-label="@Translate("OffCanvasMenu.Close", "Close menu")">
1668 <i class="fal fa-times"></i>
1669 </button>
1670 </header>
1671 <div class="offcanvas__body">
1672 <p>@Translate("OffCanvasMenu.FavoritesContent", "Select the list you want to add the product to")</p>
1673 <ul class="favorites__list">
1674 @foreach(FavoriteList list in favoriteLists) {
1675 <li class="favorites__list-item" data-listid="@list.ListId">
1676 <span class="favorites__list-itemname">@list.Name</span>
1677 <i class="fas fa-plus"></i>
1678 </li>
1679 }
1680 </ul>
1681 </div>
1682 <footer class="offcanvas__footer">
1683 <a href="/Default.aspx?ID=@favoritelistsPageId" class="btn btn__primary">
1684 <span class="btn__text">@Translate("OffCanvasMenu.FavoritesManageLists", "Manage lists")</span>
1685 <i class="far fa-chevron-right btn__icon"></i>
1686 </a>
1687 </footer>
1688 </aside>
1689 }
1690
1691 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
1692 @using System;
1693 @using Dynamicweb;
1694
1695 @{
1696 string currentWebsiteUrl = Dynamicweb.Environment.Helpers.LinkHelper.GetHttpDomain().Replace("https://", "").Replace("http://", "");
1697 string redirectUrl = "www.pronails.nl";
1698 }
1699
1700 <div class="popup__backdrop" name="language-popup"></div>
1701
1702 <div class="popup popup--content-centered" name="language-popup">
1703 <div class="popup__innerwrapper">
1704 <button class="popup__close languagemodal__close">
1705 <i class="fal fa-times cross"></i>
1706 </button>
1707 <header class="popup__header">
1708 <h2 class="popup__title">@Translate("LanguageSwitchModal.Title", "Hi Beautify Professional")</h2>
1709 </header>
1710 <div class="popup__body">
1711 <p>@string.Format(Translate("LanguageSwitchModal.Current", "Now you've reached the website {0}."), currentWebsiteUrl)</p>
1712 <p>@string.Format(Translate("LanguageSwitchModal.Redirect", "Do you want to switch to the website {0} that is more relevant to your country?"), $"<span class='languagemodal__redirecturl'>{redirectUrl}</span>")</p>
1713 </div>
1714 <div class="popup__footer">
1715 <a href="@redirectUrl" class="btn btn__contrast popup__btn languagemodal__btn">
1716 <span class="btn__text">@Translate("LanguageSwitchModal.Button", "Yes, I want to switch")</span>
1717 <i class="btn__icon fal fa-chevron-right"></i>
1718 </a>
1719 </div>
1720 </div>
1721 </div>
1722
1723
1724 <div id="backdrop"></div>
1725
1726 <script src="@appbundlejs"></script>
1727 <script defer src="@vuebundlejs"></script>
1728 <script defer src="@appAsyncbundlejs"></script>
1729
1730 @if (font_configuration != null)
1731 {
1732 foreach (var item in font_configuration.Item.ToCodeFirstItem<Bluedesk.DynamicWeb.ItemTypes.Pages.ConfigurationPagesParent>().GetChildConfigs<FontConfiguration>())
1733 {
1734 if (item["FontLink"] != null)
1735 {
1736 string FontName = item["FontName"].ToString().Replace(" ", "");
1737 string cssFile = $"files/Templates/Designs/Backyard/GoogleFont/{FontName}/{FontName}.css";
1738 <link href="@cssFile" rel="stylesheet">
1739 }
1740 }
1741 }
1742
1743 <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.15.4/css/all.css" integrity="sha384-rqn26AG5Pj86AF4SO72RK5fyefcQ/x32DNQfChxWvbXIyXFePlEktwD18fEz+kQU" crossorigin="anonymous">
1744
1745 @if (isVisualEditor && IsNotContentManager)
1746 {
1747
1748 <style>
1749 body {
1750 background-color: #f1f1f1;
1751 font-family: 'Barlow', sans-serif;
1752 }
1753
1754 .slidePanel {
1755 position: fixed;
1756 top: 0;
1757 bottom: 0;
1758 min-width: 500px;
1759 box-shadow: -10px 10px 10px rgb(153 153 255 / 10%);
1760 background-color: #FFFFFF;
1761 z-index: 1000;
1762 box-sizing: border-box;
1763 transition: all .5s ease-in;
1764 }
1765
1766 .slidePanel.open {
1767 right: 0;
1768 }
1769
1770 .slidePanel {
1771 right: -500px;
1772 transition: all 0.5s ease-in;
1773 }
1774
1775 .slidePanel__container {
1776 display: flex;
1777 position: relative;
1778 height: 100%;
1779 }
1780
1781 .togglePanelButton {
1782 position: fixed;
1783 top: 50px;
1784 left: 50px;
1785 display: flex;
1786 justify-content: center;
1787 align-items: center;
1788 color: white;
1789 background-color: black;
1790 padding: 0px 25px;
1791 height: 50px;
1792 cursor: pointer;
1793 z-index: 1000;
1794 }
1795
1796 .closeButton {
1797 position: absolute;
1798 display: flex;
1799 top: 25px;
1800 right: 25px;
1801 font-size: 2rem;
1802 text-decoration: none;
1803 color: black;
1804 }
1805
1806 .blur {
1807 filter: blur(4px);
1808 pointer-events: none;
1809 }
1810
1811 .sideMenu {
1812 display: flex;
1813 position: absolute;
1814 align-items: center;
1815 min-height: 100px;
1816 z-index: 1200;
1817 top: 0;
1818 bottom: 0;
1819 right: 100%;
1820 flex-direction: column;
1821 justify-content: center;
1822 }
1823
1824 .sideMenu__link:first-child {
1825 margin-top: 10px;
1826 }
1827
1828 .sideMenu__link {
1829 position: relative;
1830 flex-direction: column;
1831 display: flex;
1832 height: 50px;
1833 width: 50px;
1834 background-color: #f1f1f1;
1835 margin-bottom: 10px;
1836 margin-left: 10px;
1837 margin-right: 10px;
1838 justify-content: space-between;
1839 align-items: center;
1840 font-size: 10px;
1841 padding: 10px;
1842 box-sizing: border-box;
1843 text-decoration: none;
1844 color: rgb(22, 101, 123);
1845 font-size: 24px;
1846 }
1847 .sideMenu__link:hover {
1848 background-color: #c9c9c9;
1849 color: white;
1850 transition: all ease-in 0.5s;
1851 }
1852 .sideMenu__link label {
1853 font-size: 12px;
1854 }
1855
1856 .sideMenu__container {
1857 display: flex;
1858 position: relative;
1859 flex-direction: column;
1860 box-shadow: -10px 10px 10px rgb(153 153 255 / 10%);
1861 background-color: white;
1862 }
1863
1864 .toolbar.close {
1865 display: none;
1866 }
1867
1868 #toolbarVE {
1869 position: fixed !important;
1870 z-index: 100;
1871 background-color: #CCC;
1872 border: 2px solid #F1F1F1;
1873 text-align: center;
1874 right: 0px;
1875 top: 300px;
1876 }
1877
1878 #toolbarVEHeader {
1879 padding: 10px;
1880 cursor: move;
1881 z-index: 10;
1882 background-color: #6e6e6e;
1883 color: #fff;
1884 }
1885 </style>
1886
1887 <div class="toolbarVE" id="toolbar" style="top: 150px; left: auto; width: 70px; position: fixed !important; right: 0px !important; ">
1888 <div id="toolbarVEHeader">
1889 <a href="javascript:void(0);" onclick="toggleClass('.toolbar', 'close');" style="color: #FFF;"><i class="icon fa-light fa-circle-xmark"></i></a>
1890 </div>
1891 <section class="sideMenu__container">
1892 <a href="javascript:history.back();" class="sideMenu__link"><i class="icon fa-light fa-reply"></i></a>
1893 <a href="/dashboard-configuration" class="sideMenu__link"><i class="icon fa-light fa-grid-horizontal"></i></a>
1894 <a href="/button-configuration" class="sideMenu__link"><i class="icon fa-light fa-diagram-cells"></i></a>
1895 <a href="/button-configuration" class="sideMenu__link"><i class="icon fa-light fa-link"></i></a>
1896 <a href="/background-configuration" class="sideMenu__link"><i class="icon fa-light fa-paintbrush"></i></a>
1897 <a href="/jumbotron-configuration" class="sideMenu__link"><i class="icon fa-light fa-megaphone"></i></a>
1898 <a href="/theme-configuration-page/theme-01" class="sideMenu__link"><i class="icon fa-light fa-brush"></i></a>
1899 <a href="/font-configuration" class="sideMenu__link"><i class="icon fa-light fa-font"></i></a>
1900 <a href="/device-manager" class="sideMenu__link"><i class="icon fa-light fa-computer"></i></a>
1901 </section>
1902 </div>
1903
1904 <script>
1905 function toggleClass(ClassName, AddedClassName) {
1906 var element = document.querySelector(ClassName);
1907 if (element.classList.contains(AddedClassName)) {
1908 element.classList.remove(AddedClassName);
1909 } else {
1910 element.classList.add(AddedClassName);
1911 }
1912 }
1913 </script>
1914
1915 <script>
1916 //Make the DIV element draggagle:
1917 dragElement(document.getElementById("toolbar"));
1918
1919 function dragElement(elmnt) {
1920 var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
1921 if (document.getElementById(elmnt.id + "Header")) {
1922 /* if present, the header is where you move the DIV from:*/
1923 document.getElementById(elmnt.id + "Header").onmousedown = dragMouseDown;
1924 } else {
1925 /* otherwise, move the DIV from anywhere inside the DIV:*/
1926 elmnt.onmousedown = dragMouseDown;
1927 }
1928
1929 function dragMouseDown(e) {
1930 e = e || window.event;
1931 e.preventDefault();
1932 // get the mouse cursor position at startup:
1933 pos3 = e.clientX;
1934 pos4 = e.clientY;
1935 document.onmouseup = closeDragElement;
1936 // call a function whenever the cursor moves:
1937 document.onmousemove = elementDrag;
1938 }
1939
1940 function elementDrag(e) {
1941 e = e || window.event;
1942 e.preventDefault();
1943 // calculate the new cursor position:
1944 pos1 = pos3 - e.clientX;
1945 pos2 = pos4 - e.clientY;
1946 pos3 = e.clientX;
1947 pos4 = e.clientY;
1948 // set the element's new position:
1949 elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
1950 elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
1951 }
1952
1953 function closeDragElement() {
1954 /* stop moving when mouse button is released:*/
1955 document.onmouseup = null;
1956 document.onmousemove = null;
1957 }
1958 }
1959 </script>
1960
1961 @*<section class="slidePanel" id="slidePanel">
1962
1963 <div class="slidePanel__container">
1964
1965 <a href="javasciprt:void(0);" onclick="toggleClass('.slidePanel', 'open'); toggleClass('main', 'blur')" class="closeButton">
1966 <i class="fal fa-circle-xmark"></i>
1967 </a>
1968
1969
1970 <nav class="sideMenu" id="sideMenu">
1971
1972 <section class="sideMenu__container">
1973 <a href="javascript:history.back();" class="sideMenu__link"><i class="fal fa-reply"></i></a>
1974 <a href="/dashboard-configuration" class="sideMenu__link"><i class="fal fa-grid-horizontal"></i></a>
1975 <a href="/button-configuration" class="sideMenu__link"><i class="fal fa-diagram-cells"></i></a>
1976 <a href="/button-configuration" class="sideMenu__link"><i class="fal fa-link"></i></a>
1977 <a href="/background-configuration" class="sideMenu__link"><i class="fal fa-paintbrush"></i></a>
1978 <a href="/jumbotron-configuration" class="sideMenu__link"><i class="fal fa-megaphone"></i></a>
1979 <a href="/theme-configuration-page/theme-01" class="sideMenu__link"><i class="fal fa-brush"></i></a>
1980 <a href="/font-configuration" class="sideMenu__link"><i class="fal fa-font"></i></a>
1981 <a href="/device-manager" class="sideMenu__link"><i class="fal fa-computer"></i></a>
1982 </section>
1983 </nav>
1984
1985 </div>
1986
1987 </section>*@
1988
1989 <script src="https://kit.fontawesome.com/a46eca85e2.js" crossorigin="anonymous"></script>
1990
1991 }
1992
1993
1994 @if (isVisualEditor)
1995 {
1996
1997 int FooProductDetailLayoutID = 0;
1998
1999 <nav class="webshop-visual-editor__navigation">
2000 <section class="webshop-visual-editor__link-container">
2001 <a href="Default.aspx?ID=@ProductOverviewLayoutID" class="webshop-visual-editor__link"><i class="fa-regular fa-cart-shopping"></i> Edit Product Overview</a>
2002 </section>
2003 <section class="webshop-visual-editor__link-container">
2004 <a href="Default.aspx?ID=@ProductDetailLayoutID" class="webshop-visual-editor__link"><i class="fa-regular fa-cart-shopping"></i> Edit Product Detail</a>
2005 <ul>
2006 @foreach (GridRow g in Dynamicweb.Services.Grids.GetGridRowsByPageId(ProductDetailLayoutID))
2007 {
2008
2009 ProductDetailPageBreakpointRow _data = ItemManager.Storage.GetById<ProductDetailPageBreakpointRow>(g.ItemId.ToString());
2010 FooProductDetailLayoutID = Dynamicweb.Services.Pages.GetPageForItem("ProductDetailPage", _data.ProductDetailConfiguration.Id).ID;
2011
2012 <li><a href="Default.aspx?ID=@FooProductDetailLayoutID">@_data.ProductDetailConfiguration.Name</a></li>
2013
2014 }
2015 </ul>
2016 </section>
2017 </nav>
2018
2019 <style>
2020 .webshop-visual-editor__navigation {
2021 position: fixed;
2022 display: flex;
2023 top: 50px;
2024 left: 50px;
2025 z-index: 100000;
2026 flex-direction: row;
2027 }
2028
2029 .webshop-visual-editor__link {
2030 color: black;
2031 }
2032
2033 .webshop-visual-editor__link-container {
2034 position: relative;
2035 display: flex;
2036 box-shadow: -10px 10px 10px rgb(153 153 255 / 10%);
2037 background-color: white;
2038 padding: 5px;
2039 margin-right: 25px;
2040 flex-direction: column;
2041 }
2042 </style>
2043
2044 }
2045
2046 </body>
2047 </html>
2048