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