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ø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æs mere om Møblér kæ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å 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å 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", "Å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