Error executing template "Designs/Mobler/_parsed/Clean_NoBreadcrumb.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 Dynamicweb.Data.DatabaseConnectionProvider.CreateConnection(Boolean open)
   at Dynamicweb.Data.Database.CreateConnection()
   at Dynamicweb.Data.Database.CreateDataReader(CommandBuilder commandBuilder, IDbConnection connection, IDbTransaction transaction, Int32 commandTimeout)
   at Dynamicweb.Content.Items.Queries.Repository.SelectByPageId(IEnumerable`1 pageIds, Query query)
   at Mobler.Website.CustomCode.Frontend.V2.Helpers.Website.ShopInfo(String OverrideShopName)
   at CompiledRazorTemplates.Dynamic.RazorEngine_93466224ea2a452493a29798ca42a64e.Execute() in D:\dynamicweb.net\Solutions\mobler.LIVE\Files\Templates\Designs\Mobler\_parsed\Clean_NoBreadcrumb.parsed.cshtml:line 23
   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 @using System.Web; 2 @using System.Text.RegularExpressions 3 @using Dynamicweb.Core.Helpers 4 @using Dynamicweb.Frontend.Navigation 5 @using Dynamicweb.Rendering.Translation 6 @using Firstweb.Custom.CustomCode.Frontend.Helpers 7 @using Newtonsoft.Json 8 @using NuGet 9 @using Mobler.Website.CustomCode.Models 10 @using Vite.Dw.Extensions 11 @using HttpUtility = System.Web.HttpUtility 12 @using Mobler.Website.CustomCode.Frontend.V2.Helpers 13 @using Mobler.Website.CustomCode.Helpers 14 15 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 16 17 @{ 18 string CurrentEcomShopId = Dynamicweb.Frontend.PageView.Current().Area.EcomShopId; 19 string CurrentEcomLanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID; 20 string MainShopLink = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("MainShopLink"); 21 string shopname = Website.GetShopName(); 22 string shopnameEncoded = HttpUtility.UrlEncode(shopname); 23 var shopInfo = Website.ShopInfo(); 24 string globalAreaName = GetGlobalValue("Global:Area.Name"); 25 26 string culture = Dynamicweb.Frontend.PageView.Current().Area.Culture; 27 string designFolder = Dynamicweb.Frontend.PageView.Current().Area.Layout.Design.Name; 28 29 string logoSrc = ""; 30 string logoSrcMobile = ""; 31 32 if (shopname.ToLower() != "møblér" && shopname.ToLower() != "mobler" && shopname.ToLower() != "m%c3%b8bl%c3%a9r" && !string.IsNullOrEmpty(shopname)) 33 { 34 logoSrc = "/Files/Templates/Designs/Mobler/dist/logos/mobler-" + shopname.Replace(" ", "").ToLower() + ".svg"; 35 logoSrcMobile = "/Files/Templates/Designs/Mobler/dist/logos/mobler-" + shopname.Replace(" ", "").ToLower() + "-mobile.svg"; 36 } else { 37 logoSrc = "/Files/Templates/Designs/Mobler/dist/logos/mobler.svg"; 38 logoSrcMobile = "/Files/Templates/Designs/Mobler/dist/logos/mobler.svg"; 39 } 40 41 //this defines a shoppage 42 if (GetString("Item.SystemName") == "TextPage") 43 { 44 shopname = GetString("DwPageName_2"); 45 } 46 47 string imageName = shopname.Replace(" ", string.Empty) + "-owner.png"; 48 string localShopPage = Website.localshopPage(); 49 string FindDealerPage = GetString("Item.Area.FindDealerPage"); 50 string CartPage = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("CartPage"); 51 52 string SearchNoResults = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("NoResults"); 53 string SearchPagePageSize = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("SearchPagePageSize") != "0" ? Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("SearchPagePageSize") : "20"; 54 string InstantSearchSize = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("InstantsearchPageSize") != "0" ? Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("InstantsearchPageSize") : "10"; 55 56 string SearchResultPageId = ""; 57 if (Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("SearchResultPage").Split('=').Length > 1) 58 { 59 SearchResultPageId = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("SearchResultPage").Split('=')[1]; 60 } 61 string FooterLinkDestination = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("Link"); 62 int ShopPageId = GetInteger("Item.Area.ShopPageId"); 63 string SearchBarPlaceholder = Translate("SearchbarPlaceholderText", "S&oslash;g.."); 64 int GlobalNewsletterParagraphId = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetInt("GlobalNewsletterParagraphId"); 65 int CartCount = GetLoop("OrderLines").Count; 66 bool FirstShopWithSameName = true; 67 string SelectPlaceholder = Translate("ShopSelectPlaceholder", "Indtast by, postnummer eller adresse"); 68 string SelectNoResult = Translate("ShopSelectNoResult", "No such shop found"); 69 int ProductPage = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetInt("PrimaryProductPage"); 70 71 DateTime today = DateTime.Today; 72 string currentYear = today.ToString("yyyy"); 73 74 string BannerBackgroundColor = GetString("Item.Area.BannerBackgroundColor"); 75 string BannerTextColor = GetString("Item.Area.BannerTextColor"); 76 var TopBarNav = GetLoop("Item.Area.TopBarNavigation"); 77 var TopbarHeaderContent = GetLoop("Item.Area.TopbarHeaderContent"); 78 string TilbudBgColor = !String.IsNullOrEmpty(GetString("Item.Area.TilbudBackgroundColor.Value")) ? GetString("Item.Area.TilbudBackgroundColor.Value") : "#00AB5D"; 79 string TilbudTextColor = !String.IsNullOrEmpty(GetString("Item.Area.TilbudTextColor.Value")) ? GetString("Item.Area.TilbudTextColor.Value") : "#FFFFFF"; 80 string StrongPriceBgColor = !String.IsNullOrEmpty(GetString("Item.Area.St_rkPrisBackgroundColor.Value")) ? GetString("Item.Area.St_rkPrisBackgroundColor.Value") : "#9d4778"; 81 string StrongPriceTextColor = !String.IsNullOrEmpty(GetString("Item.Area.St_rkPrisTextColor.Value")) ? GetString("Item.Area.St_rkPrisTextColor.Value") : "#FFFFFF"; 82 var uniqueSellingPoints = GetLoop("Item.Area.UniqueSellingPoints"); 83 string CookieText = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("CookieText"); 84 string CookieReadMore = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("CookieReadMoreText"); 85 var TopLevelGroups = Dynamicweb.Ecommerce.Services.ProductGroups.GetToplevelGroups().Where(g => g.ShopId == CurrentEcomShopId && g.LanguageId == CurrentEcomLanguageId && g.NavigationShowInMenu).ToList(); 86 string CurrentUri = HttpContext.Current.Request.Url.PathAndQuery.ToString().Replace("/Default.aspx", "Default.aspx"); 87 string convertedUri = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(CurrentUri); 88 string CanonicalUri = Website.createCanonical(); 89 string CanonicalDomain = "mobler.dk"; 90 if (Website.IsLocalWebshop()) 91 { 92 CanonicalDomain = System.Web.HttpContext.Current.Request.Url.Host; 93 } 94 string CanonicalURL = "https://" + CanonicalDomain + CanonicalUri; 95 string AvisLink = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("Avis"); 96 string FindShopSearchPlaceholder = Translate("HeaderNav.FindShopPlaceholder", "Indtast postnr., by eller adresse"); 97 string SetBannerEndpoint = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("GetCartJson"); 98 bool ShowTopBanner = Mobler.Website.CustomCode.Frontend.V2.Helpers.MessageBanner.ShowMessageBanner(); 99 bool EnableTopBarHeader = GetBoolean("Item.Area.EnableTopBarHeader.Value"); 100 bool EnableTopBarNavigation = GetBoolean("Item.Area.EnableTopBarBanner.Value") && ShowTopBanner; 101 102 bool EnableGoogleShoppingScript = GetBoolean("Item.Area.EnableGoogleShoppingScript.Value"); 103 string GoogleShoppingContentKey = GetString("Item.Area.GoogleShoppingContentKey.Value"); 104 105 bool EnableFacebookScript = GetBoolean("Item.Area.EnableFacebookScript.Value"); 106 string FacebookScriptContentKey = GetString("Item.Area.FacebookScriptContentKey.Value"); 107 string PinterestDomainVerifyContentKey = GetString("Item.Area.PinterestDomainVerifyContentKey.Value"); 108 109 bool IsCheckoutStep = false || HttpContext.Current.Request.RawUrl.Contains("checkout"); 110 bool isCheckoutFirstStep = false || HttpContext.Current.Request.RawUrl.Contains("indkoebskurv"); 111 112 string GlobalGoogleMapsAPIKey = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("GoogleMapsApiKey"); 113 bool getUserLocation = GetBoolean("Item.Area.GetUserLocation"); 114 115 bool hasMarketingConsent = new CookieConsentHelper().HasMarketingConsent; 116 } 117 118 <!doctype html> 119 <html lang="da" class="box-border w-screen"> 120 121 <head> 122 <script> 123 // Temporary workaround for hiding the Cookiebot banner from Web Vitals scans 124 // https://support.cookiebot.com/hc/en-us/articles/360020501579-Google-Core-Web-Vitals-and-Cookiebot-CMP#h_01H05PZGDJ2TGTZBP5R1FC8EMH 125 window.addEventListener("CookiebotOnDialogInit", function() { 126 if (Cookiebot.getDomainUrlParam("CookiebotScan") === "true") 127 Cookiebot.setOutOfRegion(); 128 }); 129 </script> 130 131 <script> 132 (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({ 133 key: "@GlobalGoogleMapsAPIKey", 134 v: "weekly" 135 }); 136 </script> 137 138 <script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="ec05aeab-ec7b-4d91-81fc-a8ebbcce1f2f" data-blockingmode="auto" type="text/javascript" async=""></script> 139 <script data-cookieconsent="ignore"> 140 window.domGaTrackingEvents = []; 141 window.domFbqTrackingEvents = []; 142 143 window.dataLayer = window.dataLayer || []; 144 function gtag() { 145 dataLayer.push(arguments); 146 } 147 gtag("consent", "default", { 148 ad_storage: "denied", 149 analytics_storage: "denied", 150 functionality_storage: "denied", 151 personalization_storage: "denied", 152 security_storage: "granted", 153 ad_user_data: "denied", 154 ad_personalization: "denied", 155 wait_for_update: 500, 156 }); 157 gtag("set", "ads_data_redaction", true); 158 gtag("set", "url_passthrough", true); 159 </script> 160 @*GTM*@ 161 <script> 162 var ecomm_pagetype = "other"; 163 var ecomm_totalvalue = 0; 164 var ecomm_prodid = ""; 165 </script> 166 @RenderSnippet("DataLayerOverwrites") 167 168 @RenderSnippet("DataLayerOverwriteReceipt") 169 170 <!-- Google Tag Manager --> 171 <script data-cookieconsent="ignore">!function () { "use strict"; function e(e) { return function (e) { for (var t = 0, r = document.cookie.split(";"); t < r.length; t++) { var n = r[t].split("="); if (n[0].trim() === e) return n[1] } }(e) } function t(e) { return localStorage.getItem(e) } function r(e) { return window[e] } function n(e, t) { var r = document.querySelector(e); return t ? null == r ? void 0 : r.getAttribute(t) : null == r ? void 0 : r.textContent } !function (o, i, a, c, u, l, s, v, d, f, g) { var E, I, m, T; try { I = d && (m = navigator.userAgent, (T = new RegExp("Version/([0-9._]+)(.*Mobile)?.*Safari.*").exec(m)) && parseFloat(T[1]) >= 16.4) ? function (o, i, a) { void 0 === i && (i = ""); var c = { cookie: e, localStorage: t, jsVariable: r, cssSelector: n }, u = Array.isArray(i) ? i : [i]; if (o && c[o]) for (var l = c[o], s = 0, v = u; s < v.length; s++) { var d = v[s], f = a ? l(d, a) : l(d); if (f) return f } else console.warn("invalid uid source", o) }(d, "user_id", "") : void 0 } catch (e) { console.error(e) } var _ = o; _[c] = _[c] || [], _[c].push({ "gtm.start": (new Date).getTime(), event: "gtm.js" }); var p = i.getElementsByTagName(a)[0], A = I ? "&bi=" + encodeURIComponent(I) : "", N = i.createElement(a), D = I ? "kp" + v : v, R = !I && s ? s : "https://gtm.mobler.dk"; N.async = !0, N.src = R + "/" + D + ".js?id=GTM-PN9ZSS" + A, null === (E = p.parentNode) || void 0 === E || E.insertBefore(N, p) }(window, document, "script", "dataLayer", 0, 0, "", "rcuxkqbl", "cookie") }();</script> 172 <!-- End Google Tag Manager --> 173 <!-- Required meta tags --> 174 <meta charset="utf-8"> 175 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 176 177 @if (string.IsNullOrEmpty(Dynamicweb.Context.Current.Request["productid"])) 178 { 179 180 181 <title>@GetValue("Title")</title> 182 @GetValue("MetaTags") 183 @GetValue("CopyRightNotice") 184 185 } 186 else 187 { 188 @RenderSnippet("ProductDetailsMeta") 189 } 190 191 @if ((Mobler.Website.CustomCode.Frontend.Helper.IsLocalWebshop() && !System.Web.HttpContext.Current.Request.RawUrl.ToLower().EndsWith("/om-os")) || (System.Web.HttpContext.Current.Request.Url.Host.ToLower().Contains("1stweb") && !System.Web.HttpContext.Current.Request.Url.PathAndQuery.ToLower().Contains("debug")) || System.Web.HttpContext.Current.Request.Url.AbsoluteUri.ToLower().Contains("groupid=pim-")) 192 { 193 <meta name="robots" content="noindex"> 194 } 195 196 @if (!Mobler.Website.CustomCode.Frontend.Helper.IsLocalWebshop()) 197 { 198 <link rel="canonical" href="@CanonicalURL"> 199 } 200 <meta property="og:url" content="@CanonicalURL"> 201 <meta property="og:title" content="@GetValue(" title")"=""> 202 203 <link rel="shortcut icon" type="image/ico" href="/Files/Templates/Designs/Mobler/public/icons/favicon.ico"> 204 205 @if (GetString("Item.SystemName") == "BlogPost") 206 { 207 string imageMasterPage = GetString("Item.Billede.Value"); 208 string TeaserText = Regex.Replace(GetString("Item.TeaserTekst"), "<.*?>", String.Empty); 209 <meta property="og:type" content="article"> 210 <meta property="og:description" content="@TeaserText"> 211 <meta property="og:image" content="@imageMasterPage"> 212 } 213 else if (GetString("Item.SystemName") == "Brand") 214 { 215 string imageMasterPage = GetString("Item.Logo.Value"); 216 string TeaserText = GetString("Item.Navn"); 217 <meta property="og:type" content="article"> 218 <meta property="og:description" content="@TeaserText"> 219 <meta property="og:image" content="@imageMasterPage"> 220 } 221 else if (System.Web.HttpContext.Current.Items["OverrideOgTags"] != null) 222 { 223 @RenderSnippet("OgTags") 224 } 225 else 226 { 227 <meta property="og:type" content="business.business"> 228 <meta property="og:description" content="@GetString(" meta.description")"=""> 229 <meta property="og:image" content="https://mobler.dk/Files/Templates/Designs/Mobler2018/dist/logos/mobler.svg"> 230 } 231 232 233 @if (EnableGoogleShoppingScript && !string.IsNullOrEmpty(GoogleShoppingContentKey)) 234 { 235 <meta name="google-site-verification" content="@GoogleShoppingContentKey"> 236 } 237 238 @if (EnableFacebookScript && !string.IsNullOrEmpty(FacebookScriptContentKey)) 239 { 240 <meta name="facebook-domain-verification" content="@FacebookScriptContentKey"> 241 } 242 243 @if (EnableFacebookScript && !string.IsNullOrEmpty(PinterestDomainVerifyContentKey)) 244 { 245 <meta name="p:domain_verify" content="@PinterestDomainVerifyContentKey"> 246 } 247 248 @Pageview.AddViteStyles() 249 250 <link rel="preconnect" href="https://static.klaviyo.com"> 251 <link rel="preconnect" href="https://connect.facebook.net"> 252 <link rel="preconnect" href="https://googleads.g.doubleclick.net"> 253 <link rel="preconnect" href="https://www.googletagmanager.com"> 254 <link rel="preconnect" href="https://widget.emaerket.dk"> 255 <link rel="preconnect" href="https://gtm.mobler.dk"> 256 @GetValue("Stylesheets") 257 @GetValue("Javascripts") 258 </head> 259 @{ 260 bool isBlackFriday = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetBoolean("BlackFridayTheme"); 261 string blackFridayThemeClass = isBlackFriday ? "theme--black-friday" : ""; 262 } 263 <body style="display:none;" class="@blackFridayThemeClass overflow-x-hidden" data-bind="viewModel: 'MasterViewModel', Cookies" data-currentshopislocalwebshop="@Mobler.Website.CustomCode.Frontend.Helper.IsLocalWebshop()" data-mainshoplink="@MainShopLink" data-culture="@culture" data-design="@designFolder"> 264 <!-- Google Tag Manager (noscript) --> 265 <noscript><iframe src="https://gtm.mobler.dk/ns.html?id=GTM-PN9ZSS" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 266 <!-- End Google Tag Manager (noscript) --> 267 268 <siteheader class="flex flex-col min-h-[145px] md:min-h-[163px] lg:min-h-[196px]" data-get-user-location="@getUserLocation"></siteheader> 269 270 <div> 271 <header class="js-header"> 272 273 @if (EnableTopBarNavigation && !IsCheckoutStep && TopBarNav != null) 274 { 275 dynamic NotificationData = new 276 { 277 bannerStyle = new 278 { 279 backgroundColor = BannerBackgroundColor, 280 textColor = BannerTextColor 281 }, 282 bannerContent = TopBarNav.Select(item => new 283 { 284 link = item.GetString("Item.Area.TopBarNavigation.NavItemLink"), 285 text = item.GetString("Item.Area.TopBarNavigation.NavItemText") 286 }).ToList() 287 }; 288 object NotificationDataJson = HttpUtility.HtmlAttributeEncode(Newtonsoft.Json.JsonConvert.SerializeObject(NotificationData)); 289 <script>//console.log("%cNotificationDataJson", "color:white;background:rebeccapurple;padding:5px;", @Newtonsoft.Json.JsonConvert.SerializeObject(NotificationData, new Newtonsoft.Json.JsonSerializerSettings {ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore, PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects}));</script> 290 291 <notificationelement data-theme="info" data-content="@NotificationDataJson"></notificationelement> 292 @*<div class="container-fluid js-top-banner topbar-nav"> 293 294 <div class="text-center" style="background-color:@BannerBackgroundColor;"> 295 <div class="flex justify-center items- py-1"> 296 <ul class="list-none"> 297 @foreach (var navItem in TopBarNav) 298 { 299 string ItemLink = navItem.GetString("Item.Area.TopBarNavigation.NavItemLink"); 300 string ItemText = navItem.GetString("Item.Area.TopBarNavigation.NavItemText"); 301 <li> 302 <a class="nav-link p-1 rte-content" href='@ItemLink' style="color:@BannerTextColor;"> 303 @ItemText 304 </a> 305 </li> 306 } 307 </ul> 308 <div class="ml-2"> 309 <a href="#" data-bind="topBanner: { target: '.js-top-banner', endpoint: '@SetBannerEndpoint' }"> 310 <i class="fa-solid fa-xmark" style="color:@BannerTextColor;"></i> 311 </a> 312 </div> 313 </div> 314 </div> 315 </div>*@ 316 } 317 </header> 318 </div> 319 320 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 321 322 323 <div id="content1">@GetValue("DwContent(content1)")</div> 324 325 326 @if (!IsCheckoutStep) 327 { 328 if (!isCheckoutFirstStep) 329 { 330 var brandsLoop = @GetLoop("Item.Page.Brand_Icon.Value"); 331 332 <section class="container py-8"> 333 <div class="grid grid-cols-3 md:grid-cols-6 gap-4"> 334 @if (brandsLoop.Count <= 0) 335 { 336 foreach (var item in GetLoop("Item.Area.Featured_Brands")) 337 { 338 string Link = item.GetString("Item.Area.Featured_Brands.Brand.Value"); 339 var Brand = Firstweb.Custom.CustomCode.Frontend.Helpers.Brands.GetBrand(Link); 340 341 if (!String.IsNullOrEmpty(Brand.Name)) 342 { 343 <a href="@Brand.Link"> 344 <img width="900" height="400" class="img-fit-contain-x" src="/Admin/Public/GetImage.ashx?Image=@Brand.Logo&Format=webP&Quality=90&Height=400" alt="@Brand.Name" loading="lazy"> 345 </a> 346 } 347 } 348 } 349 else 350 { 351 foreach (var item in brandsLoop) 352 { 353 string image = item.GetString("Item.Page.Brand_Icon.Value.Image.Value"); 354 string link = item.GetString("Item.Page.Brand_Icon.Value.LinkDestination.Value"); 355 356 if (!String.IsNullOrEmpty(image)) 357 { 358 <a href="@link"> 359 <img width="900" height="400" class="img-fluid" src="/Admin/Public/GetImage.ashx?Image=@image&Format=webP&Quality=90&Height=400" alt="" loading="lazy"> 360 </a> 361 } 362 } 363 } 364 </div> 365 </section> 366 } 367 368 <section class="bg-beige pt-14 lg:pt-28"> 369 <div class="container flex flex-wrap"> 370 <div class="w-full md:w-3/4 lg:w-1/2 flex flex-col md:items-start gap-y-4"> 371 <a href="/"> 372 <img width="400" height="46" class="h-[46px] w-auto hidden md:block" src="@logoSrc" alt='@Translate("LogoAltText", "Møblér: Alt indenfor møbler og boligindretning")' loading="lazy"> 373 <img width="400" height="46" class="h-[46px] w-auto object-contain object-left block md:hidden" src="@logoSrcMobile" alt='@Translate("LogoAltText", "Møblér: Alt indenfor møbler og boligindretning")' loading="lazy"> 374 @if (shopname.ToLower() != "møblér") 375 { 376 <small class="text-xs text-grey-dark hidden md:block">@Translate("LogoServiceText", "Ordren serviceres af Møbler.dk")</small> 377 } 378 </a> 379 380 @if (shopnameEncoded == "M%c3%b8bl%c3%a9r") 381 { 382 <div> 383 <p class="mb-0 font-bold">@GetString("Item.Area.Header")</p> 384 <p> 385 @GetString("Item.Area.About") 386 </p> 387 <a href="@FooterLinkDestination"><u>@Translate("FooterAboutReadMore", "L&aelig;s mere om M&oslash;blér k&aelig;den her")</u></a> 388 </div> 389 } 390 else 391 { 392 if (GetString("Item.SystemName") == "TextPage") 393 { 394 string CurrentAboutUsShopName = GetString("DwPageName_2"); 395 shopInfo = Website.ShopInfo(CurrentAboutUsShopName); 396 shopname = CurrentAboutUsShopName; 397 398 } 399 400 List<Shops.Shop> shopInfos = new List<Shops.Shop>(); 401 402 List<Shops.Shop> allShops = Shops.GetAllShops(); 403 404 if (!string.IsNullOrEmpty(shopname)) 405 { 406 shopInfos = allShops.Where(s => s.MenuText.Equals(shopname, StringComparison.InvariantCultureIgnoreCase)).ToList(); 407 408 } 409 410 <div class="flex flex-wrap gap-y-4 w-full"> 411 <div class="w-full md:w-1/2"> 412 @if (shopInfos.Count > 1) 413 { 414 <ul class="list-none"> 415 <li class="mb-2"><strong>@shopInfo.ShopName</strong></li> 416 <li> 417 <a href="@localShopPage" class="underline text-black">@Translate("ShowOnMap", "Vis p&#229; kort")</a> 418 </li> 419 @foreach (Shops.Shop shopInfoEntry in shopInfos) 420 { 421 <li class="mt-4">@shopInfoEntry.Address, @shopInfoEntry.PostalAndCity</li> 422 <li>@shopInfoEntry.Phone</li> 423 <li> 424 <a href="mailto:@shopInfoEntry.Email " class="underline text-black">@shopInfoEntry.Email </a> 425 </li> 426 } 427 </ul> 428 } 429 else 430 { 431 <ul class="list-none"> 432 <li class="mb-2"><strong>@shopInfo.ShopName</strong></li> 433 <li>@shopInfo.Address</li> 434 <li>@shopInfo.PostalAndCity</li> 435 <li> 436 <a href="@localShopPage" class="underline text-black">@Translate("ShowOnMap", "Vis p&#229; kort")</a> 437 </li> 438 439 @if (!String.IsNullOrEmpty(shopInfo.Address1)) 440 { 441 <li>@shopInfo.Address1, @shopInfo.PostalAndCity1</li> 442 } 443 @if (!String.IsNullOrEmpty(shopInfo.Address2)) 444 { 445 <li>@shopInfo.Address2, @shopInfo.PostalAndCity2</li> 446 } 447 <li class="mt-4">@shopInfo.Phone</li> 448 <li> 449 <a href="mailto:@shopInfo.Email" class="underline text-black">@shopInfo.Email</a> 450 </li> 451 </ul> 452 } 453 454 455 </div> 456 457 458 <div class="w-full md:w-1/2"> 459 @{ 460 string marginTopClass = ""; 461 } 462 463 @foreach (Shops.Shop shopInfoEntry in shopInfos) 464 { 465 466 if (shopInfoEntry.ShopInformationList?.Count > 0 || shopInfoEntry.OpeningHours != null) 467 { 468 469 string openingHeaderShopInfo = shopInfos.Count > 1 ? "- " + shopInfoEntry.City : ""; 470 <p class="mb-2 @marginTopClass"><strong>@Translate("openinghours", "&#197;bningstider") @openingHeaderShopInfo</strong></p> 471 } 472 if (shopInfoEntry.ShopInformationList?.Count > 0) 473 { 474 foreach (var row in shopInfoEntry.ShopInformationList) 475 { 476 var rowClass = !string.IsNullOrEmpty(row.columnTwo) ? "basis-1/2" : ""; 477 <div class="flex gap-x-2"> 478 <div class="@rowClass"> 479 @row.columnOne 480 </div> 481 @if (!string.IsNullOrEmpty(row.columnTwo)) 482 { 483 <div>@row.columnTwo</div> 484 } 485 </div> 486 } 487 } 488 else if (shopInfoEntry.OpeningHours != null) 489 { 490 <div class="flex flex-col justify-content items-center gap-2 md:items-start">@shopInfoEntry.OpeningHours</div> 491 } 492 493 marginTopClass = String.IsNullOrEmpty(marginTopClass) ? "mt-4" : ""; 494 495 } 496 </div> 497 498 499 </div> 500 } 501 <ul class="list-none flex gap-2 mb-8"> 502 @foreach (var Some in GetLoop("Item.Area.SocialMediaIcons")) 503 { 504 string SoMeLink = Some.GetString("Item.Area.SocialMediaIcons.Link"); 505 string SoMeIcon = Some.GetString("Item.Area.SocialMediaIcons.Icon.Value"); 506 <li> 507 <a href="@SoMeLink" target="_blank" class="text-black text-2xl hover:text-grey-dark"> 508 <img width="37" height="37" src="/Admin/Public/GetImage.ashx?Image=@SoMeIcon&Format=webP&Quality=90&Height=40" alt="" loading="lazy"> 509 </a> 510 </li> 511 } 512 513 @foreach (var Some in GetLoop("Item.Area.SocialMediaFontawesomeIcons")) 514 { 515 string SoMeLink = Some.GetString("Item.Area.SocialMediaFontawesomeIcons.Link"); 516 string SoMeIcon = Some.GetString("Item.Area.SocialMediaFontawesomeIcons.FontawesomeClass"); 517 string SoMeText = Some.GetString("Item.Area.SocialMediaFontawesomeIcons.Text"); 518 <li> 519 <a href="@SoMeLink" target="_blank" class="text-black text-3xl hover:text-grey-dark"> 520 <i class="@SoMeIcon"></i> 521 <span class="sr-only">@SoMeText</span> 522 </a> 523 </li> 524 } 525 </ul> 526 </div> 527 <div class="flex justify-center items-end w-full lg:w-2/4"> 528 @{ 529 string footerStaffImagePath = String.Format("/Files/Images/Owners/Large/{0}.png", shopname); 530 string footerStaffGetImage = ""; 531 if (!String.IsNullOrEmpty(footerStaffImagePath)) 532 { 533 footerStaffGetImage = "/Admin/Public/GetImage.ashx?Image=" + footerStaffImagePath + "&Format=webP&Quality=90&width=640&height=300"; 534 } 535 } 536 <img width="640" height="300" class="img-fit-contain-x" src="@footerStaffGetImage" alt="@shopname" loading="lazy"> 537 </div> 538 </div> 539 </section> 540 541 <section class="bg-beige-dark py-10"> 542 <div class="container"> 543 <div class="flex flex-wrap xl:flex-nowrap xl:flex-row gap-4 "> 544 <div class="w-full grid md:grid-cols-3 xl:grid-cols-6 gap-y-4 *:list-none *:text-center *:md:text-left *:text-sm *:leading-8"> 545 <ul class="list-none col-span-3 md:col-span-1"> 546 <li><strong>@GetString("Item.Area.Footer_Column_1_Header")</strong></li> 547 @foreach (var Link in GetLoop("Item.Area.Footer_Column_1_Links")) 548 { 549 string LinkText = Link.GetString("Item.Area.Footer_Column_1_Links.LinkText"); 550 string LinkDestination = "/Default.aspx?id=" + Link.GetString("Item.Area.Footer_Column_1_Links.Link"); 551 <li> 552 <a href="@LinkDestination" class="text-black hover:underline hover:text-black">@LinkText</a> 553 </li> 554 } 555 </ul> 556 <ul class="list-none col-span-3 md:col-span-1"> 557 <li> 558 <strong>@GetString("Item.Area.Footer_Column_2_Header")</strong> 559 </li> 560 @foreach (var Link in GetLoop("Item.Area.Footer_Column_2_Links")) 561 { 562 string LinkText = Link.GetString("Item.Area.Footer_Column_2_Links.LinkText"); 563 string LinkDestination = "/Default.aspx?id=" + Link.GetString("Item.Area.Footer_Column_2_Links.Link"); 564 <li> 565 <a href="@LinkDestination" class="text-sm text-black">@LinkText</a> 566 </li> 567 } 568 </ul> 569 <ul class="list-none col-span-3 md:col-span-1"> 570 <li><strong>@GetString("Item.Area.Footer_Column_3_Header")</strong></li> 571 @foreach (var Link in GetLoop("Item.Area.Footer_Column_3_Links")) 572 { 573 string LinkText = Link.GetString("Item.Area.Footer_Column_3_Links.LinkText"); 574 string LinkDestination = "/Default.aspx?id=" + Link.GetString("Item.Area.Footer_Column_3_Links.Link"); 575 <li> 576 <a href="@LinkDestination" class="text-sm text-black">@LinkText</a> 577 </li> 578 } 579 </ul> 580 581 582 <div class="col-span-3 js-cookie-marketing-container"> 583 <strong>@Translate("Co3.Newsletter.Headline.Text", "Møblérs nyhedsbrev")</strong> 584 @using Mobler.Website.CustomModules.MoblerHelpers 585 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 586 587 <div class="klaviyo-form-RMBr88 grid"></div> 588 589 </div> 590 </div> 591 </div> 592 </div> 593 </section> 594 595 <div class="py-4 bg-white"> 596 <div class="container flex flex-col md:flex-row gap-y-4"> 597 <div class="w-full xl:w-1/2 flex justify-center items-center md:justify-start text-xs"> 598 © @currentYear @Translate("Copyright", "Møblér. All Rights Reserved.") 599 </div> 600 <div class="w-full xl:w-1/2 flex items-center md:justify-end"> 601 <a href='@Translate("PersondataLink", "link")' class="text-xs underline text-black mr-2">@Translate("PersondataText", "Persondatapolitik")</a> 602 <paymentmethodlogos data-all-payments="true"></paymentmethodlogos> 603 </div> 604 605 </div> 606 </div> 607 } 608 609 <script type="module" src="https://viewer-cdn.cylindo.com/v1/index.mjs" defer=""></script> 610 611 612 613 614 615 @Pageview.AddViteScript() 616 617 <script data-cookieconsent="ignore"> 618 (function () { 619 function updateNewsletterVisibility() { 620 const els = document.querySelectorAll('.js-cookie-marketing-container'); 621 622 els.forEach(el => { 623 if (!el || typeof Cookiebot === 'undefined' || !Cookiebot.consent) return 624 625 if (Cookiebot.consent.marketing) { 626 el.classList.remove('hidden') 627 } else { 628 el.classList.add('hidden') 629 } 630 }); 631 632 } 633 634 window.addEventListener('CookiebotOnConsentReady', updateNewsletterVisibility) 635 window.addEventListener('CookiebotOnAccept', updateNewsletterVisibility) 636 window.addEventListener('CookiebotOnDecline', updateNewsletterVisibility) 637 })() 638 </script> 639 640 <script alleviate-cls=""> 641 setTimeout(() => { document.body.style.display = 'block' } , 500) 642 </script> 643 </body> 644 </html> 645