Error executing template "Designs/Mobler/_parsed/Clean_NoBreadcrumb.parsed.cshtml"
System.Data.SqlClient.SqlException (0x80131904): SHUTDOWN is in progress.
Login failed for user 'MoblerDw9LiveUser'. Only administrators may connect at this time.
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:a6fc9739-c63e-4fac-9984-63cfe08d1bd9
Error Number:6005,State:1,Class:14
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