Error executing template "Designs/TheGift_generated/_parsed/WebshopPage.parsed.cshtml"
System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ---> System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Bluedesk.Tools.DynamicWeb.DataAccess.DynamicwebData.Query(String sqlQuery, SqlParameter[] parameters)
at Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend.BaseSettingServices.GetDataTable(Int32 PageId, Int32 AreaId) in C:\vso\TheGiftBaseSolutionRepo\BluedeskBaseSolution\ClientBase\ItemTypes\Bluedesk.DynamicWeb.ItemTypes.BaseSolution\Frontend\BaseSettings.cs:line 515
at Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend.BaseSettingServices.RenderBaseSettings(PageView PageViewObj) in C:\vso\TheGiftBaseSolutionRepo\BluedeskBaseSolution\ClientBase\ItemTypes\Bluedesk.DynamicWeb.ItemTypes.BaseSolution\Frontend\BaseSettings.cs:line 535
at CompiledRazorTemplates.Dynamic.RazorEngine_6accc36c4ac548d28a1e70b8ada1e915.Execute() in D:\dynamicweb.net\Solutions\TheGift\Production\files\Templates\Designs\TheGift_generated\_parsed\WebshopPage.parsed.cshtml:line 87
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:00000000-0000-0000-0000-000000000000
Error Number:2,State:0,Class:20
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();
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 var publicationStartTime = cs.PublicationStartTime;
846 var publicationEndTime = cs.PublicationEndTime;
847
848 if (string.IsNullOrEmpty(bannerBackgroundColor))
849 {
850 bannerBackgroundColor = "#FFFFFF";
851 }
852 if (string.IsNullOrEmpty(bannerTextColor))
853 {
854 bannerTextColor = "#000000";
855 }
856 }
857
858 @if (bannerActive && (DateTime.Now>=publicationStartTime) && (DateTime.Now<=publicationEndTime || publicationEndTime==DateTime.Parse("01/01/0001 00:00:00")))
859 {
860 <div class="campaign-banner" style="--campaign-bg-color: @bannerBackgroundColor; --campaign-text-color: @bannerTextColor;">
861 <div class="campaign-banner__container">
862 @if(!string.IsNullOrWhiteSpace(bannerLink))
863 {
864 <a href="@bannerLink" class="campaign-banner__link">
865 <span class="campaign-banner__text">@bannerText</span>
866 </a>
867 }
868 else
869 {
870 <span class="campaign-banner__text">@bannerText</span>
871 }
872 <button class="campaign-banner__close">
873 <i class="fa fa-times" aria-hidden="true"></i>
874 </button>
875 </div>
876 </div>
877 }
878
879
880 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
881
882 @using System.Linq;
883 @using System.Data;
884
885 @using Dynamicweb;
886 @using Dynamicweb.Content;
887 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend;
888
889 @{
890
891 DataTable DataTableObj = AdvancedGridServices.GetHeaderGridDataTable(Pageview.AreaID, Pageview.Page.ID);
892
893 WrapperObj Header = AdvancedGridServices.RenderWrapper(DataTableObj, "header", "header", Pageview.AreaID, Pageview.Page.ID);
894 WrapperObj Footer = AdvancedGridServices.RenderWrapper(DataTableObj, "footer", "footer", Pageview.AreaID, Pageview.Page.ID);
895
896 // var homepage = Dynamicweb.Services.Pages.GetRootPagesForArea(Pageview.AreaID).FirstOrDefault(p => p.ItemType == "HomePage" && p.Active) ?? Dynamicweb.Services.Pages.GetFirstPageForArea(Pageview.AreaID);
897
898 MasterLayoutPageObj MasterLayoutPageObj = MasterLayoutControllers.RenderMasterLayoutPageObj(Pageview);
899
900 bool userLoggedIn = false;
901 if (enableLogin) { userLoggedIn = Pageview.User == null ? false : true; }
902
903 string HeaderContainerSize = mc.HeaderConfiguration.ContainerSize != 0 ? mc.HeaderConfiguration.ContainerSize + "px" : "auto";
904
905 }
906
907 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
908 @using Dynamicweb;
909 @using Dynamicweb.Content.Items;
910
911 <script>
912
913 function setImagesSizes(Classname) {
914 var Images = document.querySelectorAll(Classname);
915 for (var index = 0; index < Images.length; index++) {
916 if (!Images[index].hasAttribute("height")) {
917 Images[index].setAttribute("height", Images[index].offsetHeight);
918 }
919 if (!Images[index].hasAttribute("width")) {
920 Images[index].setAttribute("width", Images[index].offsetWidth);
921 }
922 }
923 }
924
925 window.addEventListener('load', function () {
926 setImagesSizes("img");
927 setImagesSizes(".mc-header__logo-image");
928 });
929
930 </script>
931
932
933 @if (!hideHeader)
934 {
935 <header>@MasterLayoutPageObj.Header</header>
936
937 <!-- DO NOT REMOVE -->
938 <div id="quick-order"></div>
939 <div id="backdrop-megamenu"></div>
940 <mega-menu id="mega-menu"></mega-menu>
941 <!-- DO NOT REMOVE -->
942 }
943
944 @if (isVisualEditor && IsNotContentManager)
945 {
946 @AdvancedGridServices.RenderVisualEditorNavigation(DataTableObj, "header")
947 }
948
949 <style>@MasterLayoutPageObj.CSS</style>
950
951 <style>
952
953
954 .visual-editor__navigation {
955 position: absolute;
956 top: 10px;
957 left: 10px;
958 display: flex;
959 flex-direction: row;
960 z-index: 100000000;
961 }
962
963 .visual-editor__button {
964 height: 50px;
965 min-width: 150px;
966 right: auto;
967 left: auto;
968 background-color: white;
969 box-shadow: -10px 10px 10px rgb(28 28 84 / 25%);
970 display: flex;
971 justify-content: center;
972 align-items: center;
973 padding: 25px;
974 margin-right: 25px;
975 }
976
977 .visual-editor__button-icon {
978 margin-right: 25px;
979 }
980
981 .header {
982 --HeaderContainerDisplay: none;
983 }
984
985 .header__container {
986 padding: 0;
987 }
988
989 .header__container, .header__stickyheader-container {
990 max-width: none;
991 }
992
993 .header .AdvancedGrid__container {
994 max-width: @HeaderContainerSize;
995 margin: 0 auto;
996 }
997
998 .header .AdvancedGrid__column {
999 background-color: var(--BackgroundColor);
1000 flex-grow: var(--FlexGrow);
1001 }
1002
1003 .AdvancedGrid__row {
1004 align-items: center;
1005 }
1006 </style>
1007
1008 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
1009 @using Dynamicweb;
1010 @using Bluedesk.DynamicWeb.ItemTypes;
1011
1012 @{
1013 var pid = ModuleOnlyParagraph.GetParagraphIDByTag<ModuleOnlyParagraph>("SideBarForm", Pageview.AreaID);
1014
1015 if (pid > 0)
1016 {
1017 <section id="vue-side-bar-form" data-paragraphid="@pid" data-telephone="@phonenumber" data-formatphonenumber="@formattedPhonenumber" data-isoffline="@isOffline"></section>
1018 }
1019 }
1020
1021
1022 @if (@enableProductCompare)
1023 {
1024 <div id="vue-compare-list"></div>
1025 }
1026
1027 @Model.Grid("grid", "Before breadcrumb", "", "AdvancedGrid")
1028
1029 @if (showBreadcrumbs && !isOverviewPage)
1030 {
1031 var navigationSettings = new NavigationSettings();
1032 navigationSettings.ExpandMode = ExpandMode.PathOnly;
1033 navigationSettings.StartLevel = 1;
1034 navigationSettings.StopLevel = 99;
1035 navigationSettings.Parameters.Add("PageTitle", Model.Title);
1036 navigationSettings.IncludeFoldersAndHidden = true;
1037
1038 @Navigation.RenderNavigation("Navigation/Breadcrumbs.cshtml", navigationSettings)
1039
1040 }
1041
1042 @Model.Grid("grid2", "After breadcrumb", "", "AdvancedGrid")
1043
1044 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
1045 @using Dynamicweb;
1046 @using Bluedesk.DynamicWeb.ItemTypes;
1047 @using Bluedesk.DynamicWeb.ItemTypes.Extensions;
1048 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution.Frontend;
1049
1050 @{
1051
1052 string footerLogo = BaseSettings.BrandConfiguration.Logos.FooterLogo;
1053 string footerDescription = BaseSettings.CorporateSettings.FooterDescription;
1054
1055 var fb = BaseSettings.SocialMedia.Facebook;
1056 var twitter = BaseSettings.SocialMedia.Twitter;
1057 var linkedin = BaseSettings.SocialMedia.LinkedIn;
1058 var instagram = BaseSettings.SocialMedia.Instagram;
1059 var youtube = BaseSettings.SocialMedia.Youtube;
1060 var pinterest = BaseSettings.SocialMedia.Pinterest ?? "";
1061
1062 var companyName = BaseSettings.CorporateSettings.CompanyName;
1063 var Emailadress = BaseSettings.CorporateSettings.Emailadress;
1064 var Phonenumber = BaseSettings.CorporateSettings.Phonenumber;
1065 var Address = BaseSettings.CorporateSettings.Address;
1066 var Zipcode = BaseSettings.CorporateSettings.Zipcode;
1067 var City = BaseSettings.CorporateSettings.City;
1068 var Country = BaseSettings.CorporateSettings.Country;
1069
1070 var selectedPaymentLogos = BaseSettings.BrandConfiguration.Logos.FooterPaymentLogos;
1071
1072 bool footer__newsletter_signup_display = !string.IsNullOrWhiteSpace(mc.FooterConfiguration.NewsLetterSignUpDisplay.ToString()) && mc.FooterConfiguration.NewsLetterSignUpDisplay.ToString() == "True" ? true : false;
1073 bool footer__USP_display = !string.IsNullOrWhiteSpace(mc.FooterConfiguration.UspDisplay.ToString()) && mc.FooterConfiguration.UspDisplay.ToString() == "True" ? true : false;
1074
1075 string footer__background_color = mc.FooterConfiguration.BackgroundColor?.GetColorCode(Pageview.AreaID) ?? "#000000";
1076 string footer__color = mc.FooterConfiguration.Color?.GetColorCode(Pageview.AreaID) ?? "#FFFFFF";
1077
1078 string footer__top_image = !string.IsNullOrWhiteSpace(mc.FooterConfiguration.TopImage.ToString()) ? mc.FooterConfiguration.TopImage.ToString() : "";
1079
1080
1081
1082 }
1083
1084 <div id="scroll-to-top" class="scroll-to-top" aria-label="@Translate("Naar boven", "To Top")">
1085 <span class="scroll-to-top__text">
1086 @Translate("Naar boven", "To Top")
1087 </span>
1088 <i class="fal fa-arrow-to-top scroll-to-top__icon"></i>
1089 </div>
1090
1091 @if (Pageview.Page.ParentPageId > 0)
1092 {
1093 var siblings = Dynamicweb.Services.Pages.GetPagesByParentID(Pageview.Page.ParentPageId).Where(p => p.Active).ToList();
1094 var parentpageItemType = Pageview.Page.Parent.ItemType;
1095 bool isParentPageOverviewpage = parentpageItemType == "OverviewPage";
1096
1097 if (siblings.Count() > 1 && isParentPageOverviewpage)
1098 {
1099 var prevPage = siblings.OrderByDescending(p => p.Sort).FirstOrDefault(p => p.Sort < Pageview.Page.Sort);
1100 var nextPage = siblings.OrderBy(p => p.Sort).FirstOrDefault(p => p.Sort > Pageview.Page.Sort);
1101 var overview = "/Default.aspx?ID=" + Pageview.Page.ParentPageId;
1102
1103 <section class="page-navigation">
1104 @if (prevPage != null)
1105 {
1106 var back = "/Default.aspx?ID=" + prevPage.ID;
1107 <a href="@back" class="page-navigation__item">
1108 <i class="fal fa-arrow-alt-to-left page-navigation__item--icon"></i>
1109 <label class="page-navigation__item-label">@Translate("pagenavigation.previous", "Previous")</label>
1110 </a>
1111 }
1112
1113 <a href="@overview" class="page-navigation__item">
1114 <label class="page-navigation__item-label">@Translate("pagenavigation.Overview", "To overview")</label>
1115 <i class="fas fa-th page-navigation__item--icon"></i>
1116 </a>
1117
1118 @if (nextPage != null)
1119 {
1120 var forward = "/Default.aspx?ID=" + nextPage.ID;
1121 <a href="@forward" class="page-navigation__item">
1122 <label class="page-navigation__item-label">@Translate("pagenavigation.next", "Next")</label>
1123 <i class="fal fa-arrow-alt-to-right page-navigation__item--icon"></i>
1124 </a>
1125 }
1126 </section>
1127 }
1128 }
1129
1130 @*
1131
1132 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
1133 @using Dynamicweb;
1134 @using Bluedesk.Tools.DynamicWeb.ExtensionMethods;
1135 @using Bluedesk.DynamicWeb.ItemTypes;
1136
1137 @{
1138
1139 if (Pageview.Page.ParentPageId > 0)
1140 {
1141
1142 // Paging
1143
1144 var siblings = Dynamicweb.Services.Pages.GetPagesByParentID(Pageview.Page.ParentPageId).Where(p => p.Active).ToList();
1145 var currentID = Pageview.Page.ID;
1146 var parentpageItemType = Pageview.Page.Parent.ItemType;
1147 bool isParentPageOverviewpage = parentpageItemType == "OverviewPage";
1148
1149
1150 var siblingsCount = siblings.Count;
1151
1152 int previousIdx = 0;
1153 int nextIdx = siblingsCount - 1;
1154 int idx = 0;
1155
1156 for (int i = 0; i < siblingsCount; i++)
1157 {
1158 if (siblings[i].ID == currentID && siblings[i].PropertyItem != null)
1159 {
1160 idx = i;
1161 }
1162 }
1163
1164 previousIdx = idx == previousIdx ? previousIdx : idx - 1;
1165 nextIdx = idx == nextIdx ? nextIdx : idx + 1;
1166
1167 var previousID = siblings[previousIdx].ID;
1168 var nextID = siblings[nextIdx].ID;
1169 var overview = "/Default.aspx?ID=" + Pageview.Page.ParentPageId;
1170
1171 if (siblingsCount > 1)
1172 {
1173
1174 <section class="page-navigation">
1175
1176 @if (!(previousID == currentID || previousID == 0))
1177 {
1178 var back = "/Default.aspx?ID=" + previousID;
1179 <a href="@back" class="page-navigation__item">
1180 <i class="fal fa-arrow-alt-to-left page-navigation__item--icon"></i>
1181 <label class="page-navigation__item-label">@Translate("pagenavigation.previous", "Previous")</label>
1182 </a>
1183 }
1184
1185 <a href="@overview" class="page-navigation__item">
1186 <label class="page-navigation__item-label">@Translate("pagenavigation.Overview", "To overview")</label>
1187 <i class="fas fa-th page-navigation__item--icon"></i>
1188 </a>
1189
1190 @if (!(nextID == currentID || nextID == 0))
1191 {
1192 var forward = "/Default.aspx?ID=" + nextID;
1193 <a href="@forward" class="page-navigation__item">
1194 <label class="page-navigation__item-label">@Translate("pagenavigation.next", "Next")</label>
1195 <i class="fal fa-arrow-alt-to-right page-navigation__item--icon"></i>
1196 </a>
1197 }
1198
1199 </section>
1200
1201 }
1202
1203 }
1204 else
1205 {
1206 // No action
1207 }
1208
1209 }
1210
1211 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
1212 @using Dynamicweb;
1213
1214 @if (Pageview.Page.ParentPageId > 0)
1215 {
1216 var siblings = Dynamicweb.Services.Pages.GetPagesByParentID(Pageview.Page.ParentPageId).Where(p => p.Active).ToList();
1217 var parentpageItemType = Pageview.Page.Parent.ItemType;
1218 bool isParentPageOverviewpage = parentpageItemType == "OverviewPage";
1219
1220 if (siblings.Count() > 1 && isParentPageOverviewpage)
1221 {
1222 var prevPage = siblings.OrderByDescending(p => p.Sort).FirstOrDefault(p => p.Sort < Pageview.Page.Sort);
1223 var nextPage = siblings.OrderBy(p => p.Sort).FirstOrDefault(p => p.Sort > Pageview.Page.Sort);
1224 var overview = "/Default.aspx?ID=" + Pageview.Page.ParentPageId;
1225
1226 <section class="page-navigation">
1227 @if (prevPage != null)
1228 {
1229 var back = "/Default.aspx?ID=" + prevPage.ID;
1230 <a href="@back" class="page-navigation__item">
1231 <i class="fal fa-arrow-alt-to-left page-navigation__item--icon"></i>
1232 <label class="page-navigation__item-label">@Translate("pagenavigation.previous", "Previous")</label>
1233 </a>
1234 }
1235
1236 <a href="@overview" class="page-navigation__item">
1237 <label class="page-navigation__item-label">@Translate("pagenavigation.Overview", "To overview")</label>
1238 <i class="fas fa-th page-navigation__item--icon"></i>
1239 </a>
1240
1241 @if (nextPage != null)
1242 {
1243 var forward = "/Default.aspx?ID=" + nextPage.ID;
1244 <a href="@forward" class="page-navigation__item">
1245 <label class="page-navigation__item-label">@Translate("pagenavigation.next", "Next")</label>
1246 <i class="fal fa-arrow-alt-to-right page-navigation__item--icon"></i>
1247 </a>
1248 }
1249 </section>
1250 }
1251 }
1252
1253 *@
1254
1255
1256
1257 @if (!hideFooter)
1258 {
1259 <footer>@MasterLayoutPageObj.Footer</footer>
1260 }
1261
1262 @if (isVisualEditor && IsNotContentManager)
1263 {
1264 <nav class="footer-layout">
1265 @AdvancedGridServices.RenderVisualEditorNavigation(DataTableObj, "footer")
1266 </nav>
1267
1268 <style>
1269 .footer-layout {
1270 position: absolute;
1271 bottom: 25px;
1272 }
1273 </style>
1274 }
1275
1276 @if (!string.IsNullOrWhiteSpace(footer__top_image) && HideStandardFooter == false)
1277 {
1278 <figure class="footer__top-image">
1279 <img src="@footer__top_image" alt="" />
1280 </figure>
1281 }
1282
1283 @if (HideStandardFooter == false || !hideFooter)
1284 {
1285
1286 <footer class="footer" style="--footer-bg-color: @footer__background_color; --footer-color: @footer__color;">
1287
1288 @if (footer__USP_display)
1289 {
1290 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))
1291 {
1292 <div class="footer-usp__wrapper">
1293 <div class="container">
1294 <ul class="footer-usp__list flex-wrap">
1295 @RenderFooterUSP(BaseSettings.USP.USP_1, BaseSettings.USP.USP_1_icon)
1296 @RenderFooterUSP(BaseSettings.USP.USP_2, BaseSettings.USP.USP_2_icon)
1297 @RenderFooterUSP(BaseSettings.USP.USP_3, BaseSettings.USP.USP_3_icon)
1298 @RenderFooterUSP(BaseSettings.USP.USP_4, BaseSettings.USP.USP_4_icon)
1299 @RenderFooterUSP(BaseSettings.USP.USP_5, BaseSettings.USP.USP_5_icon)
1300
1301 </ul>
1302 </div>
1303 </div>
1304 }
1305 }
1306
1307 @if (footer__newsletter_signup_display)
1308 {
1309 <div>
1310 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
1311 @using Dynamicweb;
1312
1313 @{
1314 var newsletterFormID = ModuleOnlyParagraph.GetParagraphIDByTag<ModuleOnlyParagraph>("Footer.Newsletter", Pageview.AreaID);
1315
1316 if (newsletterFormID > 0)
1317 {
1318 <section class="footer__newsletter-container">
1319 <div class="container footer__newsletter">
1320 <label class="footer__newsletter-label">
1321 @Translate("Footer.SignUpNewsletter", "Sign up for the digital newsletter")
1322 </label>
1323 @RenderParagraphContent(newsletterFormID)
1324 </div>
1325 </section>
1326 }
1327 }
1328
1329 </div>
1330 }
1331
1332 @if (!string.IsNullOrWhiteSpace(mc.FooterConfiguration.BackgroundGradient))
1333 {
1334 <style>
1335 .footer {
1336 @mc.FooterConfiguration.BackgroundGradient;
1337 }
1338 </style>
1339 }
1340
1341 <section class="container footer__content">
1342
1343 <div class="footer__link">
1344 @{
1345 var footerColumnOneNavigationSettings = new NavigationSettings();
1346 footerColumnOneNavigationSettings.ExpandMode = ExpandMode.All;
1347 footerColumnOneNavigationSettings.StartLevel = 1;
1348 footerColumnOneNavigationSettings.StopLevel = 4;
1349 footerColumnOneNavigationSettings.RootNavigationTag = "footer-column-1";
1350 var footerColumnOneNavigation = Navigation.RenderNavigation("Navigation/BottomNavigation.cshtml", footerColumnOneNavigationSettings);
1351
1352 if (!string.IsNullOrEmpty(footerColumnOneNavigation))
1353 {
1354 <p class="footer__link-header">@Translate("Footer.Column1.Header", "What you need to know")</p>
1355 @footerColumnOneNavigation
1356 }
1357 }
1358 </div>
1359 <div class="footer__link">
1360 @{
1361 var footerColumnTwoNavigationSettings = new NavigationSettings();
1362 footerColumnTwoNavigationSettings.ExpandMode = ExpandMode.All;
1363 footerColumnTwoNavigationSettings.StartLevel = 1;
1364 footerColumnTwoNavigationSettings.StopLevel = 4;
1365 footerColumnTwoNavigationSettings.RootNavigationTag = "footer-column-2";
1366 var footerColumnTwoNavigation = Navigation.RenderNavigation("Navigation/BottomNavigation.cshtml", footerColumnTwoNavigationSettings);
1367
1368 if (!string.IsNullOrEmpty(footerColumnTwoNavigation))
1369 {
1370 <p class="footer__link-header">@Translate("Footer.Column2.Header", "Category two")</p>
1371 @footerColumnTwoNavigation
1372 }
1373 }
1374 </div>
1375 <div class="footer__link">
1376 @{
1377 var footerColumnThreeNavigationSettings = new NavigationSettings();
1378 footerColumnThreeNavigationSettings.ExpandMode = ExpandMode.All;
1379 footerColumnThreeNavigationSettings.StartLevel = 1;
1380 footerColumnThreeNavigationSettings.StopLevel = 4;
1381 footerColumnThreeNavigationSettings.RootNavigationTag = "footer-column-3";
1382 var footerColumnThreeNavigation = Navigation.RenderNavigation("Navigation/BottomNavigation.cshtml", footerColumnThreeNavigationSettings);
1383
1384 if (!string.IsNullOrEmpty(footerColumnThreeNavigation))
1385 {
1386 <p class="footer__link-header">@Translate("Footer.Column3.Header", "Category three")</p>
1387 @footerColumnThreeNavigation
1388 }
1389 }
1390 </div>
1391
1392 @if (!string.IsNullOrWhiteSpace(footerLogo) || !string.IsNullOrWhiteSpace(footerDescription))
1393 {
1394 <div class="footer__description-container">
1395 @if (!string.IsNullOrWhiteSpace(footerLogo))
1396 {
1397 <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" />
1398 }
1399
1400 @if (!string.IsNullOrWhiteSpace(footerDescription))
1401 {
1402 <div class="footer__description">
1403 @footerDescription
1404 </div>
1405 }
1406 </div>
1407 }
1408
1409 </section>
1410
1411 <section class="footer__copyright">
1412
1413 <div class="container bottombar__container">
1414 @{
1415 var copyRightMenuNavigationSettings = new NavigationSettings();
1416 copyRightMenuNavigationSettings.ExpandMode = ExpandMode.All;
1417 copyRightMenuNavigationSettings.StartLevel = 1;
1418 copyRightMenuNavigationSettings.StopLevel = 4;
1419 copyRightMenuNavigationSettings.RootNavigationTag = "bottombar";
1420 var copyRightMenuNavigation = Navigation.RenderNavigation("Navigation/CleanNavigation.cshtml", copyRightMenuNavigationSettings);
1421
1422 if (!string.IsNullOrEmpty(copyRightMenuNavigation))
1423 {
1424 @copyRightMenuNavigation;
1425 }
1426 }
1427
1428 @if (!string.IsNullOrWhiteSpace(twitter) || !string.IsNullOrWhiteSpace(fb) || !string.IsNullOrWhiteSpace(linkedin) || !string.IsNullOrWhiteSpace(youtube) || !string.IsNullOrWhiteSpace(instagram) || !string.IsNullOrWhiteSpace(pinterest))
1429 {
1430 <section class="footer__social-container">
1431
1432 <span class="footer__icon-labels">@Translate("Footer.FollowUs", "Volg ons op:")</span>
1433
1434 <div class="footer__social-icon-container">
1435 @if (!string.IsNullOrWhiteSpace(twitter))
1436 {
1437 <a href="@twitter" target="_blank" title="twitter" class="footer__social" rel="noreferrer"><i class="fab fa-twitter"></i></a>
1438 }
1439 @if (!string.IsNullOrWhiteSpace(fb))
1440 {
1441 <a href="@fb" target="_blank" title="facebook" class="footer__social" rel="noreferrer"><i class="fab fa-facebook-square"></i></a>
1442 }
1443 @if (!string.IsNullOrWhiteSpace(linkedin))
1444 {
1445 <a href="@linkedin" target="_blank" title="LinkedIn" class="footer__social" rel="noreferrer"><i class="fab fa-linkedin"></i></a>
1446 }
1447 @if (!string.IsNullOrWhiteSpace(youtube))
1448 {
1449 <a href="@youtube" target="_blank" title="YouTube" class="footer__social" rel="noreferrer"><i class="fab fa-youtube"></i></a>
1450 }
1451 @if (!string.IsNullOrWhiteSpace(instagram))
1452 {
1453 <a href="@instagram" target="_blank" title="Instagram" class="footer__social" rel="noreferrer"><i class="fab fa-instagram"></i></a>
1454 }
1455 @if (!string.IsNullOrWhiteSpace(pinterest))
1456 {
1457 <a href="@pinterest" target="_blank" title="Pinterest" class="footer__social" rel="noreferrer"><i class="fab fa-pinterest"></i></a>
1458 }
1459 </div>
1460
1461 </section>
1462 }
1463 </div>
1464
1465 </section>
1466
1467 <section class="footer-paymentoptions" data-paymentmethods="@selectedPaymentLogos"></section>
1468 </footer>
1469
1470 }
1471
1472 @helper RenderFooterUSP(string USP_content, string USP_icon)
1473 {
1474 if (!string.IsNullOrWhiteSpace(USP_content))
1475 {
1476 var usp_icon_class = (!string.IsNullOrWhiteSpace(USP_icon)) ? USP_icon : "fal fa-check";
1477
1478 <li class="footer-usp__item">
1479 <i class="@usp_icon_class footer-usp__icon"></i>
1480 <span>@USP_content</span>
1481 </li>
1482 }
1483 }
1484
1485 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
1486 @using Dynamicweb;
1487 @using Dynamicweb.Content.Items;
1488 @using Bluedesk.DynamicWeb.ItemTypes;
1489
1490 @{
1491 var colorService = new ColorSwatchService();
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 // Seach settings
1540 string ShowZeroPrices = (!mc.EcomConfiguration.HideZeroPrices).ToString().ToLower();
1541 bool displayPrices = true;
1542 bool ShowProductNumber = true;
1543 bool ShowProductManufacturer = true;
1544
1545 int searchParagraphId = HeaderWidgetSearchBar.GetParagraphIDByTag<HeaderWidgetSearchBar>("DefaultSearchParagraph", Pageview.AreaID);
1546 if(searchParagraphId > 0)
1547 {
1548
1549 var paragraphService = new Dynamicweb.Content.ParagraphService();
1550 var searchParagraphObj = paragraphService.GetParagraph(searchParagraphId);
1551 HeaderWidgetSearchBar _data = Dynamicweb.Services.Items.GetItem("HeaderWidgetSearchBar", searchParagraphObj.ItemId.ToString()).ToCodeFirstItem<HeaderWidgetSearchBar>();
1552
1553 displayPrices = !_data.HidePrices;
1554 ShowProductNumber = !_data.HideProductNumber;
1555 ShowProductManufacturer = !_data.HideProductManufacturer;
1556 }
1557
1558 if (mc.EcomConfiguration.HidePricesForGuests && Pageview.User == null)
1559 {
1560 displayPrices = false;
1561 }
1562 }
1563
1564 <style>
1565 .bottombar {
1566 background-color: @BottombarBackgroundColor;
1567 }
1568 .bottombar__button span {
1569 color: @BottombarTextColor;
1570 }
1571 .bottombar__button [class^=fa],
1572 .bottombar__button [class^=svg-] {
1573 color: @BottombarIconColor;
1574 }
1575 </style>
1576
1577 <section id="vue-modal"
1578 data-show-prices="@displayPrices.ToString().ToLower()"
1579 data-show-zero-prices="@ShowZeroPrices"
1580 data-show-product-number="@ShowProductNumber.ToString().ToLower()"
1581 data-show-product-manufacturer="@ShowProductManufacturer.ToString().ToLower()">
1582 </section>
1583
1584 @if (!hideBottombar)
1585 {
1586 <section id="vue-bottom-bar"
1587 data-items="@bottomBarItemsJson"
1588 data-phonenumber="@formattedPhonenumber"
1589 data-isoffline="@isOffline"
1590 data-emailadress="@emailadress"
1591 data-currentpageid="@homepage.ID"
1592 data-enable-login="@enableLogin"
1593 data-enable-shoppingcart="@enableShoppingCart"
1594 data-enable-advancedsearch="@enableAdvancedSearch">
1595 </section>
1596 }
1597
1598 @{
1599 int SearchPageID = Bluedesk.Tools.DynamicWeb.Generic.PageHelper.GetPageIDByNavigationTag("searchresults", Pageview.AreaID);
1600 var SearchPlaceholder = Translate("Searchbox.PlaceholderValue", "Search...");
1601 var SearchPlaceholderHover = Translate("Search.PlaceholderValue2", "Zoekt u misschien een ...?");
1602 var SearchPrefill = Dynamicweb.Context.Current.Request["q"];
1603 var SearchboxClass = !string.IsNullOrWhiteSpace(SearchPrefill) ? "open" : "";
1604 var SearchtoggleClass = !string.IsNullOrWhiteSpace(SearchPrefill) ? "close" : "";
1605 }
1606
1607 <section class="bottombar__searchbox__wrapper">
1608 <form class="searchbox__form" method="get" action="/Default.aspx" style="display: flex; flex-grow: 1;">
1609 <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;" />
1610 <div class="searchbox__button">
1611 <button type="submit" class="searchbox__form__submit icon icon--medium icon__search input__icon" aria-label="Search">
1612 <i class="fal fa-search"></i>
1613 </button>
1614 </div>
1615 <input type="hidden" name="ID" value="@SearchPageID" />
1616 </form>
1617
1618 </section>
1619
1620 @using Dynamicweb.Rendering
1621 @using Dynamicweb.Security.UserManagement
1622
1623 @{
1624 UserImpersonation impersonationMode = User.ImpersonationMode;
1625 User currentUser = Pageview.User;
1626 User secondaryUser = Pageview.User?.CurrentSecondaryUser ?? null;
1627 bool isImpersonating = Pageview.User?.CurrentSecondaryUser != null;
1628 int impersonationPageId = GetPageIdByNavigationTag("CustomerImpersonation");
1629
1630 if(isImpersonating && impersonationMode == UserImpersonation.Full) {
1631 currentUser = Pageview.User.CurrentSecondaryUser;
1632 secondaryUser = Pageview.User;
1633 }
1634 }
1635
1636 @if(currentUser != null && currentUser.GetUsersICanSetAsSecondary().Count > 0)
1637 {
1638 <div class="impersonation">
1639 <div class="impersonation__header">
1640 <p class="impersonation__title">
1641 @Translate("Impersonate.Modal.Title", "Impersonation")
1642 @if (isImpersonating)
1643 {
1644 <span title="On" class="impersonation__indicator"></span>
1645 }
1646 </p>
1647 <i class="fal fa-chevron-up impersonation__header-icon"></i>
1648 </div>
1649 <div class="impersonation__body">
1650 @if (isImpersonating)
1651 {
1652 <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>
1653
1654 <form method="post" name="stopImpersonation">
1655 <input name="DwExtranetRemoveSecondaryUser" id="DwExtranetRemoveSecondaryUser" type="hidden">
1656 <div class="mt-4">
1657 <button class="btn btn__primary" type="submit">
1658 <span class="btn__text">@Translate("Impersonate.StopBtn", "Stop impersonation")</span>
1659 <i class="fas fa-ban btn__icon"></i>
1660 </button>
1661 </div>
1662 </form>
1663 } else {
1664 <p>@Translate("Impersonate.Modal.Content", "Take a look at the list of customers you can impersonate.")</p>
1665 <div class="w-full flex mt-2">
1666 <a href="Default.aspx?ID=@impersonationPageId" class="btn btn__primary">
1667 <span class="btn__text">@Translate("Impersonate.Modal.ViewList", "View List")</span>
1668 <i class="fal fa-chevron-right btn__icon"></i>
1669 </a>
1670 </div>
1671 }
1672 </div>
1673 </div>
1674 }
1675
1676 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel>
1677 @using System;
1678 @using Dynamicweb;
1679 @using Dynamicweb.Ecommerce.CustomerExperienceCenter.Favorites;
1680
1681 @{
1682 var favListService = new FavoriteListService();
1683 IEnumerable<FavoriteList> favoriteLists = Pageview.User != null ? favListService.GetLists(Pageview.User.ID) : null;
1684 int favoritelistsPageId = GetPageIdByNavigationTag("CustomerFavorites");
1685 }
1686
1687 @if(favoriteLists != null && Pageview.User != null)
1688 {
1689 <div class="offcanvas__backdrop" name="favoritelist"></div>
1690 <aside class="offcanvas" data-listcount="@favoriteLists.Count()" name="favoritelist">
1691 <header class="offcanvas__header">
1692 <span class="offcanvas__title">@Translate("OffCanvasMenu.FavoritesTitle", "Add to favorite list")</span>
1693 <button class="offcanvas__close" aria-label="@Translate("OffCanvasMenu.Close", "Close menu")">
1694 <i class="fal fa-times"></i>
1695 </button>
1696 </header>
1697 <div class="offcanvas__body">
1698 <p>@Translate("OffCanvasMenu.FavoritesContent", "Select the list you want to add the product to")</p>
1699 <ul class="favorites__list">
1700 @foreach(FavoriteList list in favoriteLists) {
1701 <li class="favorites__list-item" data-listid="@list.ListId">
1702 <span class="favorites__list-itemname">@list.Name</span>
1703 <i class="fas fa-plus"></i>
1704 </li>
1705 }
1706 </ul>
1707 </div>
1708 <footer class="offcanvas__footer">
1709 <a href="/Default.aspx?ID=@favoritelistsPageId" class="btn btn__primary">
1710 <span class="btn__text">@Translate("OffCanvasMenu.FavoritesManageLists", "Manage lists")</span>
1711 <i class="far fa-chevron-right btn__icon"></i>
1712 </a>
1713 </footer>
1714 </aside>
1715 }
1716
1717
1718
1719 <div id="backdrop"></div>
1720
1721 <script src="@appbundlejs"></script>
1722 <script defer src="@vuebundlejs"></script>
1723 <script defer src="@appAsyncbundlejs"></script>
1724
1725 @if (font_configuration != null)
1726 {
1727 foreach (var item in font_configuration.Item.ToCodeFirstItem<Bluedesk.DynamicWeb.ItemTypes.Pages.ConfigurationPagesParent>().GetChildConfigs<FontConfiguration>())
1728 {
1729 if (item["FontLink"] != null)
1730 {
1731 string FontName = item["FontName"].ToString().Replace(" ", "");
1732 string cssFile = $"files/Templates/Designs/Backyard/GoogleFont/{FontName}/{FontName}.css";
1733 <link href="@cssFile" rel="stylesheet">
1734 }
1735 }
1736 }
1737
1738 <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.15.4/css/all.css" integrity="sha384-rqn26AG5Pj86AF4SO72RK5fyefcQ/x32DNQfChxWvbXIyXFePlEktwD18fEz+kQU" crossorigin="anonymous">
1739
1740 @if (isVisualEditor && IsNotContentManager)
1741 {
1742
1743 <style>
1744 body {
1745 background-color: #f1f1f1;
1746 font-family: 'Barlow', sans-serif;
1747 }
1748
1749 .slidePanel {
1750 position: fixed;
1751 top: 0;
1752 bottom: 0;
1753 min-width: 500px;
1754 box-shadow: -10px 10px 10px rgb(153 153 255 / 10%);
1755 background-color: #FFFFFF;
1756 z-index: 1000;
1757 box-sizing: border-box;
1758 transition: all .5s ease-in;
1759 }
1760
1761 .slidePanel.open {
1762 right: 0;
1763 }
1764
1765 .slidePanel {
1766 right: -500px;
1767 transition: all 0.5s ease-in;
1768 }
1769
1770 .slidePanel__container {
1771 display: flex;
1772 position: relative;
1773 height: 100%;
1774 }
1775
1776 .togglePanelButton {
1777 position: fixed;
1778 top: 50px;
1779 left: 50px;
1780 display: flex;
1781 justify-content: center;
1782 align-items: center;
1783 color: white;
1784 background-color: black;
1785 padding: 0px 25px;
1786 height: 50px;
1787 cursor: pointer;
1788 z-index: 1000;
1789 }
1790
1791 .closeButton {
1792 position: absolute;
1793 display: flex;
1794 top: 25px;
1795 right: 25px;
1796 font-size: 2rem;
1797 text-decoration: none;
1798 color: black;
1799 }
1800
1801 .blur {
1802 filter: blur(4px);
1803 pointer-events: none;
1804 }
1805
1806 .sideMenu {
1807 display: flex;
1808 position: absolute;
1809 align-items: center;
1810 min-height: 100px;
1811 z-index: 1200;
1812 top: 0;
1813 bottom: 0;
1814 right: 100%;
1815 flex-direction: column;
1816 justify-content: center;
1817 }
1818
1819 .sideMenu__link:first-child {
1820 margin-top: 10px;
1821 }
1822
1823 .sideMenu__link {
1824 position: relative;
1825 flex-direction: column;
1826 display: flex;
1827 height: 50px;
1828 width: 50px;
1829 background-color: #f1f1f1;
1830 margin-bottom: 10px;
1831 margin-left: 10px;
1832 margin-right: 10px;
1833 justify-content: space-between;
1834 align-items: center;
1835 font-size: 10px;
1836 padding: 10px;
1837 box-sizing: border-box;
1838 text-decoration: none;
1839 color: rgb(22, 101, 123);
1840 font-size: 24px;
1841 }
1842 .sideMenu__link:hover {
1843 background-color: #c9c9c9;
1844 color: white;
1845 transition: all ease-in 0.5s;
1846 }
1847 .sideMenu__link label {
1848 font-size: 12px;
1849 }
1850
1851 .sideMenu__container {
1852 display: flex;
1853 position: relative;
1854 flex-direction: column;
1855 box-shadow: -10px 10px 10px rgb(153 153 255 / 10%);
1856 background-color: white;
1857 }
1858
1859 .toolbar.close {
1860 display: none;
1861 }
1862
1863 #toolbarVE {
1864 position: fixed !important;
1865 z-index: 100;
1866 background-color: #CCC;
1867 border: 2px solid #F1F1F1;
1868 text-align: center;
1869 right: 0px;
1870 top: 300px;
1871 }
1872
1873 #toolbarVEHeader {
1874 padding: 10px;
1875 cursor: move;
1876 z-index: 10;
1877 background-color: #6e6e6e;
1878 color: #fff;
1879 }
1880 </style>
1881
1882 <div class="toolbarVE" id="toolbar" style="top: 150px; left: auto; width: 70px; position: fixed !important; right: 0px !important; ">
1883 <div id="toolbarVEHeader">
1884 <a href="javascript:void(0);" onclick="toggleClass('.toolbar', 'close');" style="color: #FFF;"><i class="icon fa-light fa-circle-xmark"></i></a>
1885 </div>
1886 <section class="sideMenu__container">
1887 <a href="javascript:history.back();" class="sideMenu__link"><i class="icon fa-light fa-reply"></i></a>
1888 <a href="/dashboard-configuration" class="sideMenu__link"><i class="icon fa-light fa-grid-horizontal"></i></a>
1889 <a href="/button-configuration" class="sideMenu__link"><i class="icon fa-light fa-diagram-cells"></i></a>
1890 <a href="/button-configuration" class="sideMenu__link"><i class="icon fa-light fa-link"></i></a>
1891 <a href="/background-configuration" class="sideMenu__link"><i class="icon fa-light fa-paintbrush"></i></a>
1892 <a href="/jumbotron-configuration" class="sideMenu__link"><i class="icon fa-light fa-megaphone"></i></a>
1893 <a href="/theme-configuration-page/theme-01" class="sideMenu__link"><i class="icon fa-light fa-brush"></i></a>
1894 <a href="/font-configuration" class="sideMenu__link"><i class="icon fa-light fa-font"></i></a>
1895 <a href="/device-manager" class="sideMenu__link"><i class="icon fa-light fa-computer"></i></a>
1896 </section>
1897 </div>
1898
1899 <script>
1900 function toggleClass(ClassName, AddedClassName) {
1901 var element = document.querySelector(ClassName);
1902 if (element.classList.contains(AddedClassName)) {
1903 element.classList.remove(AddedClassName);
1904 } else {
1905 element.classList.add(AddedClassName);
1906 }
1907 }
1908 </script>
1909
1910 <script>
1911 //Make the DIV element draggagle:
1912 dragElement(document.getElementById("toolbar"));
1913
1914 function dragElement(elmnt) {
1915 var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
1916 if (document.getElementById(elmnt.id + "Header")) {
1917 /* if present, the header is where you move the DIV from:*/
1918 document.getElementById(elmnt.id + "Header").onmousedown = dragMouseDown;
1919 } else {
1920 /* otherwise, move the DIV from anywhere inside the DIV:*/
1921 elmnt.onmousedown = dragMouseDown;
1922 }
1923
1924 function dragMouseDown(e) {
1925 e = e || window.event;
1926 e.preventDefault();
1927 // get the mouse cursor position at startup:
1928 pos3 = e.clientX;
1929 pos4 = e.clientY;
1930 document.onmouseup = closeDragElement;
1931 // call a function whenever the cursor moves:
1932 document.onmousemove = elementDrag;
1933 }
1934
1935 function elementDrag(e) {
1936 e = e || window.event;
1937 e.preventDefault();
1938 // calculate the new cursor position:
1939 pos1 = pos3 - e.clientX;
1940 pos2 = pos4 - e.clientY;
1941 pos3 = e.clientX;
1942 pos4 = e.clientY;
1943 // set the element's new position:
1944 elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
1945 elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
1946 }
1947
1948 function closeDragElement() {
1949 /* stop moving when mouse button is released:*/
1950 document.onmouseup = null;
1951 document.onmousemove = null;
1952 }
1953 }
1954 </script>
1955
1956 @*<section class="slidePanel" id="slidePanel">
1957
1958 <div class="slidePanel__container">
1959
1960 <a href="javasciprt:void(0);" onclick="toggleClass('.slidePanel', 'open'); toggleClass('main', 'blur')" class="closeButton">
1961 <i class="fal fa-circle-xmark"></i>
1962 </a>
1963
1964
1965 <nav class="sideMenu" id="sideMenu">
1966
1967 <section class="sideMenu__container">
1968 <a href="javascript:history.back();" class="sideMenu__link"><i class="fal fa-reply"></i></a>
1969 <a href="/dashboard-configuration" class="sideMenu__link"><i class="fal fa-grid-horizontal"></i></a>
1970 <a href="/button-configuration" class="sideMenu__link"><i class="fal fa-diagram-cells"></i></a>
1971 <a href="/button-configuration" class="sideMenu__link"><i class="fal fa-link"></i></a>
1972 <a href="/background-configuration" class="sideMenu__link"><i class="fal fa-paintbrush"></i></a>
1973 <a href="/jumbotron-configuration" class="sideMenu__link"><i class="fal fa-megaphone"></i></a>
1974 <a href="/theme-configuration-page/theme-01" class="sideMenu__link"><i class="fal fa-brush"></i></a>
1975 <a href="/font-configuration" class="sideMenu__link"><i class="fal fa-font"></i></a>
1976 <a href="/device-manager" class="sideMenu__link"><i class="fal fa-computer"></i></a>
1977 </section>
1978 </nav>
1979
1980 </div>
1981
1982 </section>*@
1983
1984 <script src="https://kit.fontawesome.com/a46eca85e2.js" crossorigin="anonymous"></script>
1985
1986 }
1987
1988
1989 @if (isVisualEditor)
1990 {
1991
1992 int FooProductDetailLayoutID = 0;
1993
1994 <nav class="webshop-visual-editor__navigation">
1995 <section class="webshop-visual-editor__link-container">
1996 <a href="Default.aspx?ID=@ProductOverviewLayoutID" class="webshop-visual-editor__link"><i class="fa-regular fa-cart-shopping"></i> Edit Product Overview</a>
1997 </section>
1998 <section class="webshop-visual-editor__link-container">
1999 <a href="Default.aspx?ID=@ProductDetailLayoutID" class="webshop-visual-editor__link"><i class="fa-regular fa-cart-shopping"></i> Edit Product Detail</a>
2000 <ul>
2001 @foreach (GridRow g in Dynamicweb.Services.Grids.GetGridRowsByPageId(ProductDetailLayoutID))
2002 {
2003
2004 ProductDetailPageBreakpointRow _data = ItemManager.Storage.GetById<ProductDetailPageBreakpointRow>(g.ItemId.ToString());
2005 FooProductDetailLayoutID = Dynamicweb.Services.Pages.GetPageForItem("ProductDetailPage", _data.ProductDetailConfiguration.Id).ID;
2006
2007 <li><a href="Default.aspx?ID=@FooProductDetailLayoutID">@_data.ProductDetailConfiguration.Name</a></li>
2008
2009 }
2010 </ul>
2011 </section>
2012 </nav>
2013
2014 <style>
2015 .webshop-visual-editor__navigation {
2016 position: fixed;
2017 display: flex;
2018 top: 50px;
2019 left: 50px;
2020 z-index: 100000;
2021 flex-direction: row;
2022 }
2023
2024 .webshop-visual-editor__link {
2025 color: black;
2026 }
2027
2028 .webshop-visual-editor__link-container {
2029 position: relative;
2030 display: flex;
2031 box-shadow: -10px 10px 10px rgb(153 153 255 / 10%);
2032 background-color: white;
2033 padding: 5px;
2034 margin-right: 25px;
2035 flex-direction: column;
2036 }
2037 </style>
2038
2039 }
2040
2041 </body>
2042 </html>
2043