Error executing template "Designs/Mobler/_parsed/BlogPage.parsed.cshtml"
System.ArgumentException: An item with the same key has already been added.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at Dynamicweb.Ecommerce.Products.GroupRelation.GetGroupRelationsByChildId(String childId)
   at Dynamicweb.Ecommerce.Products.Group.get_IsTopGroup()
   at System.Linq.Enumerable.WhereListIterator`1.MoveNext()
   at Dynamicweb.Ecommerce.Products.GroupService.GetToplevelGroups()
   at CompiledRazorTemplates.Dynamic.RazorEngine_e0b6be434f2f4938ba9a74d578afa25c.Execute() in D:\dynamicweb.net\Solutions\mobler.LIVE\Files\Templates\Designs\Mobler\_parsed\BlogPage.parsed.cshtml:line 84
   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()

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