Error executing template "Designs/Mobler2018/_parsed/Clean.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at Mobler.Website.CustomModules.MoblerHelpers.MoblerHelpers.createCanonical() in D:\a\1\s\Mobler.Website\CustomModules\MoblerHelpers\MoblerHelpers.cs:line 1546
at CompiledRazorTemplates.Dynamic.RazorEngine_dbebfb77c739438faf9c9c6f443043e9.Execute() in D:\dynamicweb.net\Solutions\mobler.LIVE\Files\Templates\Designs\Mobler2018\_parsed\Clean.parsed.cshtml:line 82
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 Mobler.Website.CustomModules.MoblerHelpers;
2 @using System.Web;
3 @using System.Text.RegularExpressions
4 @using Dynamicweb.Core.Helpers
5 @using Dynamicweb.Rendering.Translation
6 @using Newtonsoft.Json
7 @using NuGet
8 @using Vite.Dw.Extensions
9 @using HttpUtility = System.Web.HttpUtility
10 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
11
12 @{
13 string CurrentEcomShopId = Dynamicweb.Frontend.PageView.Current().Area.EcomShopId;
14 string CurrentEcomLanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID;
15 string MainShopLink = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("MainShopLink");
16 string shopname = MoblerHelpers.GetShopName();
17 string shopnameEncoded = HttpUtility.UrlEncode( shopname );
18 var shopInfo = MoblerHelpers.ShopInfo();
19 string globalAreaName = GetGlobalValue("Global:Area.Name");
20 string logosrc = "Files/Images/Shoplogos/logo" + shopname.Replace(" ", "") + ".png";
21 string logoDesktop = "Files/Images/Shoplogos/logo" + shopname.Replace(" ", "") + ".png";
22 string logoMobile = "Files/Images/Shoplogos/logoSmall" + shopname.Replace(" ", "") + ".png";
23 if (shopname == "Møblér")
24 {
25 logosrc = "Files/Images/Shoplogos/moebler.png";
26 logoMobile = "Files/Images/Shoplogos/moebler_small.png";
27 }
28 //this defines a shoppage
29 if (GetString("Item.SystemName") == "TextPage")
30 {
31 string CurrentShopName = GetString("DwPageName_2");
32 logosrc = "Files/Images/Shoplogos/logo" + CurrentShopName.Replace(" ", "") + ".png";
33 logoDesktop = "Files/Images/Shoplogos/logo" + CurrentShopName.Replace(" ", "") + ".png";
34 logoMobile = "Files/Images/Shoplogos/logoSmall" + CurrentShopName.Replace(" ", "") + ".png";
35 }
36 string logoSrcResized = "/Admin/Public/GetImage.ashx?Image=" + logosrc + "&Format=webP&Quality=90&height=50&crop=5";
37 string logoMobileResized = "/Admin/Public/GetImage.ashx?Image=" + logoMobile + "&Format=webP&Quality=90&height=50&crop=5";
38 var headerSearchIcon = MoblerHelpers.GetSVGIcon("icon-search");
39 string imageName = shopname.Replace(" ", string.Empty) + "-owner.png";
40 string localShopPage = MoblerHelpers.localshopPage();
41 string FindDealerPage = GetString("Item.Area.FindDealerPage");
42 string CartPage = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("CartPage");
43 string ProductInstantSearchUrl = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("ProductInstantSearchUrl");
44
45 string SearchNoResults = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("NoResults");
46 string SearchPagePageSize = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("SearchPagePageSize") != "0" ? Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("SearchPagePageSize") : "20";
47 string InstantSearchSize = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("InstantsearchPageSize") != "0" ? Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("InstantsearchPageSize") : "10";
48
49 string SearchResultPageId = "";
50 if (Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("SearchResultPage").Split('=').Length > 1)
51 {
52 SearchResultPageId = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("SearchResultPage").Split('=')[1];
53 }
54 string FooterLinkDestination = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("Link");
55 int ShopPageId = GetInteger("Item.Area.ShopPageId");
56 var AllShops = Firstweb.Custom.CustomCode.Frontend.Helpers.Shops.GetAllShops(ShopPageId);
57 string SearchBarPlaceholder = Translate("SearchbarPlaceholderText", "Søg..");
58 int GlobalNewsletterParagraphId = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetInt("GlobalNewsletterParagraphId");
59 int CartCount = GetLoop("OrderLines").Count;
60 bool FirstShopWithSameName = true;
61 string SelectPlaceholder = Translate("ShopSelectPlaceholder", "Indtast by, postnummer eller adresse");
62 string SelectNoResult = Translate("ShopSelectNoResult", "No such shop found");
63 int ProductPage = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetInt("PrimaryProductPage");
64
65 DateTime today = DateTime.Today;
66 string currentYear = today.ToString("yyyy");
67
68 string BannerBackgroundColor = GetString("Item.Area.BannerBackgroundColor");
69 string BannerTextColor = GetString("Item.Area.BannerTextColor");
70 var TopBarNav = GetLoop("Item.Area.TopBarNavigation");
71 var TopbarHeaderContent = GetLoop("Item.Area.TopbarHeaderContent");
72 string TilbudBgColor = !String.IsNullOrEmpty(GetString("Item.Area.TilbudBackgroundColor.Value")) ? GetString("Item.Area.TilbudBackgroundColor.Value") : "#00AB5D";
73 string TilbudTextColor = !String.IsNullOrEmpty(GetString("Item.Area.TilbudTextColor.Value")) ? GetString("Item.Area.TilbudTextColor.Value") : "#FFFFFF";
74 string StrongPriceBgColor = !String.IsNullOrEmpty(GetString("Item.Area.St_rkPrisBackgroundColor.Value")) ? GetString("Item.Area.St_rkPrisBackgroundColor.Value") : "#9d4778";
75 string StrongPriceTextColor = !String.IsNullOrEmpty(GetString("Item.Area.St_rkPrisTextColor.Value")) ? GetString("Item.Area.St_rkPrisTextColor.Value") : "#FFFFFF";
76 var uniqueSellingPoints = GetLoop("Item.Area.UniqueSellingPoints");
77 string CookieText = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("CookieText");
78 string CookieReadMore = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("CookieReadMoreText");
79 var TopLevelGroups = Dynamicweb.Ecommerce.Services.ProductGroups.GetToplevelGroups().Where(g => g.ShopId == CurrentEcomShopId && g.LanguageId == CurrentEcomLanguageId && g.NavigationShowInMenu).ToList();
80 string CurrentUri = HttpContext.Current.Request.Url.PathAndQuery.ToString().Replace("/Default.aspx", "Default.aspx");
81 string convertedUri = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(CurrentUri);
82 string CanonicalUri = MoblerHelpers.createCanonical();
83 string CanonicalDomain = "mobler.dk";
84 if (Mobler.Website.CustomCode.Frontend.Helper.IsLocalWebshop())
85 {
86 CanonicalDomain = System.Web.HttpContext.Current.Request.Url.Host;
87 }
88 string CanonicalURL = "https://" + CanonicalDomain + CanonicalUri;
89 string AvisLink = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("Avis");
90 string FindShopSearchPlaceholder = Translate("HeaderNav.FindShopPlaceholder", "Indtast postnr., by eller adresse");
91 string GetAllShopsEndpoint = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("GetShopsJson");
92 string SetBannerEndpoint = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("GetCartJson");
93 bool ShowTopBanner = Mobler.Website.CustomCode.Frontend.Helpers.MessageBanner.ShowMessageBanner();
94 bool EnableTopBarHeader = GetBoolean("Item.Area.EnableTopBarHeader.Value");
95 bool EnableTopBarNavigation = GetBoolean("Item.Area.EnableTopBarBanner.Value") && ShowTopBanner;
96
97 bool EnableGoogleShoppingScript = GetBoolean("Item.Area.EnableGoogleShoppingScript.Value");
98 string GoogleShoppingContentKey = GetString("Item.Area.GoogleShoppingContentKey.Value");
99
100 bool EnableFacebookScript = GetBoolean("Item.Area.EnableFacebookScript.Value");
101 string FacebookScriptContentKey = GetString("Item.Area.FacebookScriptContentKey.Value");
102 string PinterestDomainVerifyContentKey = GetString("Item.Area.PinterestDomainVerifyContentKey.Value");
103
104 bool IsCheckoutStep = false || HttpContext.Current.Request.RawUrl.Contains("checkout");
105 bool isCheckoutFirstStep = false || HttpContext.Current.Request.RawUrl.Contains("indkoebskurv");
106 string HeaderIsCheckoutStepModifier = IsCheckoutStep ? "" : "pt-2 pt-md-3";
107
108 // Theming
109 bool blackFridayTheme = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetBoolean("BlackFridayTheme");
110 string blackFridayClass = blackFridayTheme ? "bf-bg-black bf-color-white" : "";
111 }
112
113 @SnippetStart("LocalShopPage")
114 <a class="menu-item py-2 px-3 px-md-0" href="@localShopPage">
115 <span>@Translate("MenuAboutUs.Text", "Om os")</span>
116 <div class="mobile-menu-arrow">
117 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill-rule="evenodd" clip-rule="evenodd"><path d="M23.245 4l-11.245 14.374-11.219-14.374-.781.619 12 15.381 12-15.391-.755-.609z"></path></svg>
118 </div>
119 </a>
120 @SnippetEnd("LocalShopPage")
121
122 @SnippetStart("MenuArrowSvg")
123 <div class="mobile-menu-arrow">
124 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill-rule="evenodd" clip-rule="evenodd"><path d="M23.245 4l-11.245 14.374-11.219-14.374-.781.619 12 15.381 12-15.391-.755-.609z"></path></svg>
125 </div>
126 @SnippetEnd("MenuArrowSvg")
127
128 @SnippetStart("MenuDownArrowSvg")
129 <div class="mobile-menu-down-arrow">
130 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill-rule="evenodd" clip-rule="evenodd"><path d="M23.245 4l-11.245 14.374-11.219-14.374-.781.619 12 15.381 12-15.391-.755-.609z"></path></svg>
131 </div>
132 @SnippetEnd("MenuDownArrowSvg")
133
134 @foreach (var TopLevelGroup in TopLevelGroups)
135 {
136 string snippetName = TopLevelGroup.Id;
137 if (snippetName.Contains("-"))
138 {
139 snippetName = snippetName.Split(new char[] {'-'} )[1];
140 }
141
142 @SnippetStart(snippetName)
143 foreach (var primaryGroup in TopLevelGroup.Subgroups.Where(pg => pg.NavigationShowInMenu))
144 {
145 string primaryGroupUrl;
146 string menuLinkText = primaryGroup.Name;
147 string AlternativeLink = primaryGroup.ProductGroupFieldValues.GetProductGroupFieldValue( "alternativelink" ) != null ? "" + primaryGroup.ProductGroupFieldValues.GetProductGroupFieldValue( "alternativelink" ).Value : "";
148 string AlternativeLinkText = primaryGroup.ProductGroupFieldValues.GetProductGroupFieldValue("alternativelinktext") != null ? "" + primaryGroup.ProductGroupFieldValues.GetProductGroupFieldValue("alternativelinktext").Value : "";
149 if (!string.IsNullOrEmpty(AlternativeLinkText))
150 {
151 menuLinkText = AlternativeLinkText;
152 }
153
154 if ( !string.IsNullOrEmpty( AlternativeLink ) )
155 {
156 primaryGroupUrl = AlternativeLink;
157 }
158 else
159 {
160 primaryGroupUrl = !string.IsNullOrEmpty( primaryGroup.ProductGroupFieldValues
161 .GetProductGroupFieldValue( "LinkToGroupsPrimaryPosition" ).Value.ToString() ) ?
162 primaryGroup.ProductGroupFieldValues.GetProductGroupFieldValue( "LinkToGroupsPrimaryPosition" ).Value.ToString() :
163 TopLevelGroup.Meta.PrimaryPage + "&GroupID=" + primaryGroup.Id;
164 }
165
166 // When using alternative link, to display a universe page, let's create an "All" link, for that category
167 string primaryGroupPage = "";
168 if (!string.IsNullOrEmpty(AlternativeLink))
169 {
170 primaryGroupPage = !string.IsNullOrEmpty( primaryGroup.ProductGroupFieldValues
171 .GetProductGroupFieldValue( "LinkToGroupsPrimaryPosition" ).Value.ToString() ) ?
172 primaryGroup.ProductGroupFieldValues.GetProductGroupFieldValue( "LinkToGroupsPrimaryPosition" ).Value.ToString() :
173 TopLevelGroup.Meta.PrimaryPage + "&GroupID=" + primaryGroup.Id;
174 }
175
176 <div class="category p-md-3">
177 <div class="sub-menu-item has-drop category-header d-flex justify-content-between align-items-center w-100 px-3 py-2 p-md-0 d-block d-md-none">
178 @primaryGroup.Name
179 <div class="mobile-menu-down-arrow">
180 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill-rule="evenodd" clip-rule="evenodd"><path d="M23.245 4l-11.245 14.374-11.219-14.374-.781.619 12 15.381 12-15.391-.755-.609z"></path></svg>
181 </div>
182 </div>
183 <div class="sub-drop">
184 <a href="@(primaryGroupUrl)">
185 <div class="sub-menu-item has-drop category-header link d-flex justify-content-between align-items-center w-100 px-3 py-2 p-md-0">
186 <div class="ml-3 ml-md-0">
187 <div class="d-inline d-md-none">@Translate("Navigation.Mobile.GroupTitle", "Gå til:")</div> @menuLinkText
188 </div>
189 <div class="mobile-menu-arrow">
190 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill-rule="evenodd" clip-rule="evenodd"><path d="M23.245 4l-11.245 14.374-11.219-14.374-.781.619 12 15.381 12-15.391-.755-.609z"></path></svg>
191 </div>
192 </div>
193 </a>
194 @if (!string.IsNullOrEmpty(primaryGroupPage))
195 {
196 <div>
197 <a class="px-3 py-2 p-md-0 d-flex justify-content-between align-items-center w-100 ecom-link" href="@(primaryGroupPage)#@(CStrings.productListAnchorId)">
198 <!-- Senge -->
199 @if (primaryGroup.Id.Contains("GROUP651"))
200 {
201 <span class="ml-2 ml-md-0">@primaryGroup.Name @Translate("Navigation.Group.Offer", "tilbud")</span>
202 }
203 else
204 {
205 <span class="ml-2 ml-md-0">@Translate("Navigation.Group.All", "Alle") @primaryGroup.Name.ToLower()</span>
206 }
207 <div class="mobile-menu-arrow">
208 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill-rule="evenodd" clip-rule="evenodd"><path d="M23.245 4l-11.245 14.374-11.219-14.374-.781.619 12 15.381 12-15.391-.755-.609z"></path></svg>
209 </div>
210 </a>
211 </div>
212 }
213 @foreach (var SubGroup in primaryGroup.Subgroups.Where(sg => sg.NavigationShowInMenu))
214 {
215 string GroupLink = SubGroup.ProductGroupFieldValues.GetProductGroupFieldValue("LinkToGroupsPrimaryPosition").HasValue && !String.IsNullOrEmpty(SubGroup.ProductGroupFieldValues.GetProductGroupFieldValue("LinkToGroupsPrimaryPosition").Value.ToString()) ? SubGroup.ProductGroupFieldValues.GetProductGroupFieldValue("LinkToGroupsPrimaryPosition").Value.ToString() : "/" + TopLevelGroup.Meta.PrimaryPage + "&GroupID=" + SubGroup.Id;
216 <div>
217 <a class="px-3 py-2 p-md-0 d-flex justify-content-between align-items-center w-100 ecom-link" href="@(GroupLink)#@(CStrings.productListAnchorId)">
218 <span class="group-name">@SubGroup.Name</span>
219 <div class="mobile-menu-arrow">
220 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill-rule="evenodd" clip-rule="evenodd"><path d="M23.245 4l-11.245 14.374-11.219-14.374-.781.619 12 15.381 12-15.391-.755-.609z"></path></svg>
221 </div>
222 </a>
223
224 </div>
225 }
226 </div>
227 </div>
228 }
229 @SnippetEnd(snippetName)
230 }
231
232 <!doctype html>
233 <html lang="da">
234 <head>
235 <script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="ec05aeab-ec7b-4d91-81fc-a8ebbcce1f2f" data-blockingmode="auto" type="text/javascript"></script>
236 <script data-cookieconsent="ignore">
237 window.dataLayer = window.dataLayer || [];
238 function gtag() {
239 dataLayer.push(arguments);
240 }
241 gtag("consent", "default", {
242 ad_personalization: "denied",
243 ad_user_data: "denied",
244 ad_storage: "denied",
245 analytics_storage: "denied",
246 functionality_storage: "denied",
247 personalization_storage: "denied",
248 security_storage: "granted",
249 wait_for_update: 500,
250 });
251 gtag("set", "ads_data_redaction", true);
252 gtag("set", "url_passthrough", true);
253 </script>
254 @*GTM*@
255 <script>
256 var ecomm_pagetype = "other";
257 var ecomm_totalvalue = 0;
258 var ecomm_prodid = "";
259 </script>
260 @RenderSnippet("DataLayerOverwrites")
261
262 @RenderSnippet("DataLayerOverwriteReceipt")
263
264 <!-- Google Tag Manager -->
265 <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>
266 <!-- End Google Tag Manager -->
267
268 <!-- Required meta tags -->
269 <meta charset="utf-8">
270 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
271
272 @if (GetInteger("DwPageID") != ProductPage)
273 {
274
275
276 <title>@GetValue("Title")</title>
277 @GetValue("MetaTags")
278 @GetValue("CopyRightNotice")
279
280 }
281 else
282 {
283 @RenderSnippet("ProductDetailsMeta")
284 }
285
286 @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.AbsoluteUri.ToLower().Contains("groupid=pim-"))
287 {
288 <meta name="robots" content="noindex">
289 }
290
291 @if (!Mobler.Website.CustomCode.Frontend.Helper.IsLocalWebshop())
292 {
293 <link rel="canonical" href="@CanonicalURL">
294 }
295 <!-- Bootstrap CSS -->
296 <meta property="og:url" content="@CanonicalURL">
297 <meta property="og:title" content="@GetValue(" title")"="">
298
299 <link rel="shortcut icon" type="image/ico" href="/Files/Templates/Designs/Mobler2016/images/icons/favicon.ico">
300
301 @if (GetString("Item.SystemName") == "BlogPost")
302 {
303 string imageMasterPage = GetString("Item.Billede.Value");
304 string TeaserText = Regex.Replace(GetString("Item.TeaserTekst"), "<.*?>", String.Empty);
305 <meta property="og:type" content="article">
306 <meta property="og:description" content="@TeaserText">
307 <meta property="og:image" content="@imageMasterPage">
308 }
309 else if (GetString("Item.SystemName") == "Brand")
310 {
311 string imageMasterPage = GetString("Item.Logo.Value");
312 string TeaserText = GetString("Item.Navn");
313 <meta property="og:type" content="article">
314 <meta property="og:description" content="@TeaserText">
315 <meta property="og:image" content="@imageMasterPage">
316 }
317 else if (System.Web.HttpContext.Current.Items["OverrideOgTags"] != null)
318 {
319 @RenderSnippet("OgTags")
320 }
321 else
322 {
323 <meta property="og:type" content="business.business">
324 <meta property="og:description" content="@GetString(" meta.description")"="">
325 <meta property="og:image" content="https://mobler.dk/Files/Templates/Designs/Mobler2018/dist/logos/logoM%C3%B8bl%C3%A9r.png">
326 }
327
328
329 @if (EnableGoogleShoppingScript && !string.IsNullOrEmpty(GoogleShoppingContentKey))
330 {
331 <meta name="google-site-verification" content="@GoogleShoppingContentKey">
332 }
333
334 @if (EnableFacebookScript && !string.IsNullOrEmpty(FacebookScriptContentKey))
335 {
336 <meta name="facebook-domain-verification" content="@FacebookScriptContentKey">
337 }
338
339 @if (EnableFacebookScript && !string.IsNullOrEmpty(PinterestDomainVerifyContentKey))
340 {
341 <meta name="p:domain_verify" content="@PinterestDomainVerifyContentKey">
342 }
343
344 @Pageview.AddViteStyles()
345
346 <link rel="preconnect" href="https://content.cylindo.com" crossorigin="">
347 @GetValue("Stylesheets")
348 @GetValue("Javascripts")
349 </head>
350 <body data-bind="viewModel: 'MasterViewModel', Cookies" data-currentshopislocalwebshop="@Mobler.Website.CustomCode.Frontend.Helper.IsLocalWebshop()" data-mainshoplink="@MainShopLink">
351
352 <!-- Google Tag Manager (noscript) -->
353 <noscript><iframe src="https://gtm.mobler.dk/ns.html?id=GTM-PN9ZSS" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
354 <!-- End Google Tag Manager (noscript) -->
355
356 <div data-bind="viewModel: 'HeaderViewModel'">
357 <div class="d-none" data-bind="setInitValue: { observable: GetShopsEndpoint, value: '@GetAllShopsEndpoint' }"></div>
358
359 <div class="menu-open-overlay" data-bind="css: { active: MenuOpen }, click: ToggleMenu"></div>
360 <header class="js-header">
361 @if (EnableTopBarHeader && !IsCheckoutStep)
362 {
363 <div class="container-fluid">
364 <div class="row">
365 <div class="col-12 topbarheader">
366 <div class="container">
367 <div class="row">
368 <div class="col-12">
369 <ul>
370 @if (TopbarHeaderContent != null)
371 {
372 foreach (var topheaderItem in TopbarHeaderContent)
373 {
374 string image = topheaderItem.GetString("Item.Area.TopbarHeaderContent.Image.Value");
375 string fontawesomeClass = topheaderItem.GetString("Item.Area.TopbarHeaderContent.FontawesomeClass.Value");
376 string text = topheaderItem.GetString("Item.Area.TopbarHeaderContent.Text.Value");
377 string link = topheaderItem.GetString("Item.Area.TopbarHeaderContent.Link.Value");
378
379 //I know....:-( If deliveri info and shops has free delivery and handling
380 if (fontawesomeClass.EndsWith("-truck") && shopInfo.ShippingFreeDeliveryAndHandling)
381 {
382 text = Translate("USP.FreeDeliveryAndhandling.Header", "Gratis levering og indbæring");
383 }
384
385 <li>
386 @if (!string.IsNullOrEmpty(fontawesomeClass))
387 {
388 <i class="@fontawesomeClass"></i>
389 } else if (!string.IsNullOrEmpty(image)) {
390 <img width="20" height="20" src="@image" alt="@text">
391 }
392 <a href="@link">@text</a>
393 </li>
394 }
395 }
396 </ul>
397 </div>
398 </div>
399 </div>
400 </div>
401 </div>
402 </div>
403 }
404
405 @if (EnableTopBarNavigation && !IsCheckoutStep)
406 {
407 <div class="container-fluid js-top-banner topbar-nav">
408 <div class="row">
409 <div class="col-12 text-center" style="background-color:@BannerBackgroundColor;">
410 <div class="d-flex justify-content-center align-items-center">
411 <ul class="nav justify-content-center flex-fill">
412 @if (TopBarNav != null)
413 {
414 foreach (var navItem in TopBarNav)
415 {
416 string ItemLink = navItem.GetString("Item.Area.TopBarNavigation.NavItemLink");
417 string ItemText = navItem.GetString("Item.Area.TopBarNavigation.NavItemText");
418
419 <li class="nav-item"></li>
420 <li>
421 <a class="nav-link p-1 rte-content" href='@ItemLink' style="color:@BannerTextColor;">
422 @ItemText
423 </a>
424 </li>
425 <li class="nav-item topbar-nav--separator font-weight-bold p-1" style="color:@BannerTextColor;">-</li>
426 }
427 }
428 </ul>
429 <div class="ml-2 mt-1">
430 <svg class="close-icon cursor-pointer" data-bind="topBanner: { target: '.js-top-banner', endpoint: '@SetBannerEndpoint' }" fill="@BannerTextColor" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill-rule="evenodd" clip-rule="evenodd"><path d="M12 11.293l10.293-10.293.707.707-10.293 10.293 10.293 10.293-.707.707-10.293-10.293-10.293 10.293-.707-.707 10.293-10.293-10.293-10.293.707-.707 10.293 10.293z"></path></svg>
431 </div>
432 </div>
433 </div>
434 </div>
435 </div>
436 }
437 <div class="container position-md-relative @HeaderIsCheckoutStepModifier" data-bind="setInitValue: { observable: CurrentShopIsLocalWebshop, value: @Mobler.Website.CustomCode.Frontend.Helper.IsLocalWebshop().ToString().ToLower() }">
438 <div class="mini-cart box-shadow-cart unimportant-hidden mini-cart-header js-mini-cart-modal" data-bind="css: { 'd-block': CartOpen }">
439 <div class="modal-closer-custom" data-bind="click: ToggleCart">
440 <img width="24" height="24" src="/Files/Templates/Designs/Mobler2018/dist/icons/close.svg">
441 </div>
442 <div class="m-0 p-3 font-weight-bold bg-grey fs3 d-flex justify-content-center align-items-center flex-column">
443 <div class="position-relative" data-bind="click: ToggleCart">
444 <span class="position-absolute fs-10px cart-counter js-cart-count">@CartCount</span>
445 <svg width="55px" height="44px" viewbox="0 0 21 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
446 <g id="Desktop" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
447 <g id="Møblér---Forside-med-mega-menu" transform="translate(-1339.000000, -35.000000)" fill-rule="nonzero">
448 <g id="Cart-Copy" transform="translate(1332.000000, 25.000000)">
449 <g id="shopping-cart" transform="translate(7.000000, 10.000000)">
450 <path d="M20.8736917,3.4299738 C20.7591283,3.27470749 20.5822811,3.18376218 20.3949458,3.18376218 L5.00238622,3.18376218 L4.33009275,0.474420121 C4.26078996,0.194991487 4.02004549,0 3.74444792,0 L0.605088327,0 C0.270918214,0 0,0.28382376 0,0.633912508 C0,0.984001256 0.270918214,1.26782502 0.605088327,1.26782502 L3.27651295,1.26782502 L3.94880642,3.97716708 C3.94880642,3.9772516 3.94880642,3.9772516 3.9488871,3.97733612 L6.31930045,13.5256644 C6.38860323,13.8050085 6.62934771,14 6.90486459,14 L18.024129,14 C18.2996459,14 18.5403904,13.8050085 18.6096932,13.5256644 L20.9804293,3.97716708 C21.0277068,3.78733141 20.9882551,3.58515558 20.8736917,3.4299738 Z M9.51013289,12.7322595 L7.37279957,12.7322595 L6.89744218,10.8176747 L9.51013289,10.8176747 L9.51013289,12.7322595 Z M9.51013289,9.54976515 L6.58271557,9.54976515 L6.10711614,7.63391251 L9.51013289,7.63391251 L9.51013289,9.54976515 Z M9.51013289,6.36608749 L5.79230886,6.36608749 L5.31703215,4.4515872 L9.51013289,4.4515872 L9.51013289,6.36608749 Z M14.2090068,12.7322595 L10.7203095,12.7322595 L10.7203095,10.8176747 L14.2090068,10.8176747 L14.2090068,12.7322595 Z M14.2090068,9.54976515 L10.7203095,9.54976515 L10.7203095,7.63391251 L14.2090068,7.63391251 L14.2090068,9.54976515 Z M14.2090068,6.36608749 L10.7203095,6.36608749 L10.7203095,4.4515872 L14.2090068,4.4515872 L14.2090068,6.36608749 Z M17.5563554,12.7322595 L15.4191835,12.7322595 L15.4191835,10.8176747 L18.0317128,10.8176747 L17.5563554,12.7322595 Z M18.3465201,9.54976515 L15.4191835,9.54976515 L15.4191835,7.63391251 L18.8222002,7.63391251 L18.3465201,9.54976515 Z M19.1370075,6.36608749 L15.4192641,6.36608749 L15.4192641,4.4515872 L19.6124456,4.4515872 L19.1370075,6.36608749 Z" id="Shape" fill="#00AB5D"></path>
451 <path d="M8.0000365,14 C6.89722765,14 6,14.8971621 6,15.9998175 C6,17.1026919 6.89722765,18 8.0000365,18 C9.10277235,18 10,17.1026919 10,15.9998175 C10,14.8971621 9.10284536,14 8.0000365,14 Z M8.0000365,16.9050096 C7.50104944,16.9050096 7.09507036,16.4989141 7.09507036,15.9998175 C7.09507036,15.5008669 7.50104944,15.0949904 8.0000365,15.0949904 C8.49895056,15.0949904 8.90492964,15.5009399 8.90492964,15.9998175 C8.90492964,16.4989871 8.49902356,16.9050096 8.0000365,16.9050096 Z" id="Shape" fill="#3F9C54"></path>
452 <path d="M15.999854,14 C14.8971308,14 14,14.8971621 14,15.9998175 C14,17.1026919 14.8971308,18 15.999854,18 C17.1027962,18 18,17.1026919 18,15.9998175 C18,14.8971621 17.1027232,14 15.999854,14 Z M15.999854,16.9050096 C15.5009856,16.9050096 15.0951303,16.4989141 15.0951303,15.9998175 C15.0951303,15.5008669 15.5009856,15.0949904 15.999854,15.0949904 C16.4989414,15.0949904 16.9048697,15.5009399 16.9048697,15.9998175 C16.9048697,16.4989871 16.4988684,16.9050096 15.999854,16.9050096 Z" id="Shape" fill="#3F9C54"></path>
453 </g>
454 </g>
455 </g>
456 </g>
457 </svg>
458 </div>
459 <div class="fs-10px color-primary">@Translate("Minicart.CartContent", "Din indkøbskurv")</div>
460 </div>
461
462
463 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
464 @using Mobler.Website.CustomModules.MoblerHelpers
465 @{
466 bool AnyLines = GetLoop("OrderLines").Any();
467 string BlackFridayTheme = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("BlackFridayTheme");
468 string CartEndpoint = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("GetCartJson");
469 }
470 <div class="js-mini-cart-lines position-relative" data-bind="viewModel: 'CartViewModel'">
471 <div class="d-none js-update-cart" data-bind="setInitValue: { observable: CartEndpoint, value: '@CartEndpoint' }, click: GetCart.bind($data)"></div>
472
473 <div class="cart-command-loader unimportant-hidden justify-content-center align-items-center" data-bind="css: { 'd-flex': Loading }">
474 <div class="d-flex align-items-center">
475 <p class="m-0 mr-2">@Translate("Cart.UpdatingCart", "Opdaterer kurv")</p>
476 <i class="fas fa-circle-notch fa-spin"></i>
477 </div>
478 </div>
479
480 <div class="lines" data-bind="foreach: Orderlines">
481 <div class="cartline js-cartline d-flex justify-content-between align-items-center px-3 py-2 position-relative" data-bind="attr:{'data-guid': GUID, 'data-orderline-id': OrderlineId}">
482 <div class="d-none cartline-gaitem-data" data-bind="gaEcommerceItem: GAItem"></div>
483 <span class="delete-orderline color-subtle cursor-pointer mr-2" data-bind="click: $parent.DeleteOrderline.bind($data, OrderlineId, GAItem, GUID), css: { 'd-none': IsDiscount || IsRelated }">
484 <i class="fas fa-times"></i>
485 </span>
486 <div class="product-image w-10" data-bind="css: { 'd-none': IsDiscount || IsRelated }">
487 <img width="260" height="200" class="img-fit-contain-x" data-bind="attr: { src: ImagePath }">
488 </div>
489 <div class="flex-fill px-3 w-75" data-bind="css: { 'd-none': IsDiscount || IsRelated }">
490 <p class="font-weight-bold m-0" data-bind="text: ProductName"></p>
491 <p class="m-0 color-subtle small-quantity-indicator"><span data-bind="text: Quantity"></span> stk. a <span data-bind="text: QuantityPrice"></span></p>
492 <div class="variant-dimensions" data-bind="foreach: VariantDimensions">
493 <p class="m-0 color-subtle color-dark-grey font-weight-bold">
494 <span data-bind="text: Label"></span>
495 <span class="font-weight-normal" data-bind="text: Value"></span>
496 </p>
497 </div>
498 <div class="qty-counter-checkout">
499 <div class="d-flex">
500 <div class="quantity-controls d-flex align-items-center mr-3">
501 <div class="control minus" data-bind="click: $parent.QuantityControl.bind($data, -1, OrderlineId, GAItem, GUID)">
502 -
503 </div>
504 <input disabled="" type="text" name="Quantity" value="1" data-bind="value: Quantity, attr: { 'data-id': 'js-input-' + OrderlineId }">
505 <div class="control plus" data-bind="click: $parent.QuantityControl.bind($data, 1, OrderlineId, GAItem, GUID)">
506 +
507 </div>
508 </div>
509 </div>
510 </div>
511 </div>
512
513 <div class="flex-fill" data-bind="css: { 'd-none': !IsDiscount }">
514 <p class="font-weight-bold m-0" data-bind="text: ProductName"></p>
515 </div>
516 <div class="flex-fill" data-bind="css: { 'd-none': !IsRelated }">
517 <p class="m-0"><span class="font-weight-bold">Tilkøb:</span> <span data-bind="text: ProductName"></span></p>
518 <p class="m-0 color-subtle small-quantity-indicator"><span data-bind="text: Quantity"></span> stk. a <span data-bind="text: QuantityPrice"></span></p>
519 </div>
520
521 <div data-bind="html: OrderlinePriceHtml"></div>
522 </div>
523 </div>
524
525 @if (BlackFridayTheme == "True")
526 {
527 <div class="bf-bg-black p-3 d-flex justify-content-between align-items-center price-summary">
528 <p class="m-0 color-white fs-12px font-weight-semibold">@Translate("MiniCartTotal", "Din kurv i alt (ex. fragt)")</p>
529 <p class="m-0 color-white fs1 font-weight-bold" data-bind="text: CartTotalNoFees"></p>
530 </div>
531 } else {
532 <div class="bg-brand p-3 d-flex justify-content-between align-items-center price-summary">
533 <p class="m-0 color-white fs-12px font-weight-semibold">@Translate("MiniCartTotal", "Din kurv i alt (ex. fragt)")</p>
534 <p class="m-0 color-white fs1 font-extra-bold" data-bind="text: CartTotalNoFees"></p>
535 </div>
536 }
537 </div>
538
539
540 <div class="p-3 d-flex justify-content-between align-items-center">
541 <p class="pointer color-black color-white m-0 fs-12px text-underline" data-bind="click: ToggleCart">
542 @Translate("MiniCartContinueShopping", "Handel videre")
543 </p>
544 <a href="@CartPage" class="pointer py-2 px-3 fs0 font-weight-semibold bg-brand color-white cart-btn-radius d-block no-underline">
545 @Translate("MiniCartGoToCheckout", "Gå til kassen")
546 </a>
547 </div>
548 <div class="p-2 pb-4 bg-white payment-options d-flex justify-content-around justify-content-lg-center align-items-center">
549 <img width="41" height="25" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/DK_Logo_konturstreg.png&Format=webP&Quality=90&Height=30" alt="Dankort">
550 <img width="34" height="22" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/visa.png&Format=webP&Quality=90&Height=30" alt="VISA">
551 <img width="35" height="22" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/visa-elektron.png&Format=webP&Quality=90&Height=30" alt="VISA Elektron">
552 <img width="33" height="22" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/mc_vrt_pos.png&Format=webP&Quality=90&Height=30" alt="American express">
553 <img width="109" height="20" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/santander.png&Format=webP&Quality=90&Height=30" alt="Santander">
554 <img width="76" height="25" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/DK_Logo_mobilepay.png&Format=webP&Quality=90&Height=30" alt="Mobilepay">
555 </div>
556 </div>
557
558 <div class="row small-gutter handheld-no-gutter align-items-md-center nav-height menu-row">
559 <div class="col-md-3 menu-and-logo-col">
560 <div class="d-flex align-items-center">
561 @if(!IsCheckoutStep) {
562 <div class="d-md-none">
563 <div class="d-flex flex-column justify-content-center align-items-center burger-menu-icon py-2" data-bind="click: ToggleMenu">
564 <img width="30" height="23" class="menu-icon" src="/Files/Templates/Designs/Mobler2018/dist/icons/Burgermenu.svg">
565 <p class="m-0 mt-2 color-primary font-weight-bold">@Translate("MobileMenu.Text", "Menu")</p>
566 </div>
567 </div>
568 }
569 <div class="text-center text-lg-left menu-logo">
570 <a href="/">
571 @if (shopnameEncoded == "M%c3%b8bl%c3%a9r")
572 {
573 <img width="160" height="42" class="img-fit-contain-x d-none d-md-inline" src="@logoSrcResized" alt='@Translate("LogoAltText", "Møblér: Alt indenfor møbler og boligindretning")'>
574 }
575 else
576 {
577 <img width="315" height="50" class="img-fit-contain-x d-none d-md-inline" src="@logoSrcResized" alt='@Translate("LogoAltText", "Møblér: Alt indenfor møbler og boligindretning")'>
578 }
579 <img width="315" height="50" class="img-fluid d-md-none p-2" src="@logoMobileResized" alt='@Translate("LogoAltText", "Møblér: Alt indenfor møbler og boligindretning")'>
580 </a>
581 </div>
582 </div>
583 </div>
584
585 @if (!IsCheckoutStep)
586 {
587 <div class="col-md-4 col-lg-4 col-xl-3 quick-action-col d-flex justify-content-end align-items-center position-static order-md-2">
588
589 <div class="d-flex align-items-center w-100 justify-content-end menu-icons">
590
591 <div class="border-left-1px w-33 p-2">
592 <a href="@AvisLink" class="no-underline">
593 <div class="d-flex align-items-center flex-column">
594 <img width="48" height="40" class="svg-icon" src="/Files/Templates/Designs/Mobler2018/dist/icons/paper.svg">
595 <div class="font-weight-bold color-primary fs-10px mt-2 text-center">
596 @Translate("HeaderNav.News", "Avis")
597 </div>
598 </div>
599 </a>
600 </div>
601
602 <div class="position-relative border-left-1px w-33 p-2 ">
603 <a href="/@FindDealerPage" class="d-flex align-items-center flex-column cursor-pointer">
604 <div class="position-relative">
605 <img width="51" height="42" class="svg-icon" src="/Files/Templates/Designs/Mobler2018/dist/icons/shop.svg">
606 </div>
607 <div class="font-weight-bold color-primary fs-10px text-center mt-2">
608 @Translate("HeaderNav.FindShop", "Find forhandler")
609 </div>
610 </a>
611 </div>
612
613
614 <a class="position-relative border-left-1px w-33 pl-2 js-mini-cart-modal" href="@CartPage">
615 <div class="d-flex align-items-center flex-column cursor-pointer">
616 <div class="position-relative">
617 <span class="position-absolute fs-10px cart-counter js-cart-count">@CartCount</span>
618 <img width="55" height="44" class="svg-icon" src="/Files/Templates/Designs/Mobler2018/dist/icons/cart.svg">
619 </div>
620 <div class="font-weight-bold color-primary fs-10px text-center mt-2">
621 @Translate("HeaderNav.Cart", "Kurv")
622 </div>
623 </div>
624 </a>
625 </div>
626 </div>
627 <div class="col-12 col-md-5 col-lg-4 col-xl-5 offset-lg-1 offset-xl-1 d-flex align-items-center mt-2 mt-md-0 pl-0 order-md-1">
628 <searchbar id="js-search-bar" class="tw-w-full" data-search-endpoint="@ProductInstantSearchUrl" data-search-results-page="@SearchResultPageId" data-no-results="@SearchNoResults"></searchbar>
629 </div>
630 }
631 </div>
632 </div>
633 @if (!IsCheckoutStep)
634 {
635 <div class="nav-bg container">
636 <div class="position-relative">
637 <nav class="menu mt-md-3 mt-lg-4" data-bind="css: { open: MenuOpen }, menuToggler: { menuItemSelector: '.menu-item.has-drop', subMenuItemSelector: '.sub-menu-item.has-drop', isMenuOpenObs: MenuOpen, productsArray: Products, searchError: SearchError }">
638 <div class="mobile-navigation-top d-flex justify-content-between d-md-none js-mobile-navigation">
639 <img class="img-fluid py-2" src="@logoMobileResized" alt="Logo" width="160" height="42">
640 <div class="mobile-menu-closer px-3 d-flex flex-column align-items-center justify-content-center" data-bind="click: ToggleMenu">
641 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill-rule="evenodd" clip-rule="evenodd"><path d="M12 11.293l10.293-10.293.707.707-10.293 10.293 10.293 10.293-.707.707-10.293-10.293-10.293 10.293-.707-.707 10.293-10.293-10.293-10.293.707-.707 10.293 10.293z"></path></svg>
642 <p class="mb-0">@Translate("MobileMenu.CloseText", "Luk")</p>
643 </div>
644 </div>
645 <div class="d-none d-md-block">
646 <div class="menu-closer fs3 pointer" data-bind="click: ToggleMenu">
647 <img src="/Files/Templates/Designs/Mobler2018/dist/icons/close.svg">
648 </div>
649 </div>
650 <div class="d-flex flex-wrap w-100 justify-content-start">
651 @RenderNavigation(new
652 {
653 ExpandMode = "All",
654 Template = "navigation.xslt",
655 TilbudTextColor = "color: " + TilbudTextColor + ";",
656 TilbudBgColor = "background-color: " + TilbudBgColor + ";",
657 StrongPriceBg = "background-color: " + StrongPriceBgColor + ";",
658 StrongPriceTextColor = "color: " + StrongPriceTextColor + ";"
659 })
660 </div>
661 </nav>
662 </div>
663 </div>
664 }
665 </header>
666 <div class="find-shop-popup unimportant-hidden p-4 box-shadow bg-white">
667 <div class="find-shop-popup-text">
668 <p>@GetString("Item.Area.LocalWebshopText")</p>
669 </div>
670 <div class="d-flex justify-content-between">
671 <a href="#" onclick="history.back();" class="pointer py-2 px-3 bg-dark-grey color-white rounded no-underline m-0">@Translate("FindShopPopupCancel", "Tilbage")</a>
672 <a href="#" class="find-shop-popup-link pointer py-2 px-3 bg-brand color-white rounded d-block no-underline" data-shopname="@shopnameEncoded">@Translate("FindShopPopupConfirm", "Godkend")</a></div>
673 </div>
674 </div>
675
676 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
677
678
679 @RenderNavigation(new { ExpandMode = "All", Template = "breadcrumb.xslt" })
680
681
682 <div id="content1">@GetValue("DwContent(content1)")</div>
683
684
685 @if (!IsCheckoutStep)
686 {
687 var brandsLoop = @GetLoop("Item.Page.Brand_Icon.Value");
688
689 <div class="py-5">
690 @if (!isCheckoutFirstStep)
691 {
692 <div class="container">
693 <div class="row align-items-center">
694 @if (brandsLoop.Count <= 0)
695 {
696 foreach (var item in GetLoop("Item.Area.Featured_Brands"))
697 {
698 string Link = item.GetString("Item.Area.Featured_Brands.Brand.Value");
699 var Brand = Firstweb.Custom.CustomCode.Frontend.Helpers.Brands.GetBrand(Link);
700
701 if (!String.IsNullOrEmpty(Brand.Name))
702 {
703 <div class="col-4 col-sm-2">
704 <a href="@Brand.Link">
705 <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">
706 </a>
707 </div>
708 }
709 }
710 }
711 else
712 {
713 foreach (var item in brandsLoop)
714 {
715 string image = item.GetString("Item.Page.Brand_Icon.Value.Image.Value");
716 string link = item.GetString("Item.Page.Brand_Icon.Value.LinkDestination.Value");
717
718 if (!String.IsNullOrEmpty(image))
719 {
720 <div class="col-4 col-sm-2">
721 <a href="@link">
722 <img width="900" height="400" class="img-fluid" src="/Admin/Public/GetImage.ashx?Image=@image&Format=webP&Quality=90&Height=400" alt="">
723 </a>
724 </div>
725 }
726 }
727 }
728 </div>
729 </div>
730 }
731 </div>
732
733 <div class="footer-find-dealer bg-grey pt-5">
734 <div class="container">
735 <div class="row mt-3">
736 <div class="col-12 col-sm-12 col-md-8 col-lg-6 mb-5">
737 @if (shopnameEncoded == "M%c3%b8bl%c3%a9r")
738 {
739 <img class="img-fluid mb-3" src="@logoSrcResized" alt="logo" width="160" height="42">
740 <div class="fs2">
741 <p class="mb-0 font-weight-bold">@GetString("Item.Area.Header")</p>
742 <p>
743 @GetString("Item.Area.About")
744 </p>
745 <a href="@FooterLinkDestination"><u>@Translate("FooterAboutReadMore", "Læs mere om Møblér kæden her")</u></a>
746 </div>
747 }
748 else
749 {
750 if (GetString("Item.SystemName") == "TextPage")
751 {
752 string CurrentAboutUsShopName = GetString("DwPageName_2");
753 shopInfo = MoblerHelpers.ShopInfo(CurrentAboutUsShopName);
754 shopname = CurrentAboutUsShopName;
755 }
756 <div class="text-center text-md-left">
757 <img width="315" height="50" class="img-fit-contain-x d-none d-md-inline mb-5" src="@logoSrcResized" alt="Logo">
758 <img class="img-fluid d-md-none p-2" src="@logoMobileResized" alt="Logo" width="160" height="42">
759 <div class="row">
760 <div class="col-12 col-md-6 fs0">
761 <p class="color-black fs0 font-weight-bold mt-0 mb-3">@shopInfo.ShopName</p>
762 <p class="mb-0">@shopInfo.Address</p>
763 <p class="mb-0">@shopInfo.PostalAndCity</p>
764 <p class="mb-0"><a href="@localShopPage" class="text-underline">@Translate("ShowOnMap", "Vis på kort")</a></p>
765 @if (!String.IsNullOrEmpty(MoblerHelpers.ShopInfo().Address1))
766 {
767 <p class="mb-0">@MoblerHelpers.ShopInfo().Address1, @MoblerHelpers.ShopInfo().PostalAndCity1</p>
768 }
769 @if (!String.IsNullOrEmpty(MoblerHelpers.ShopInfo().Address2))
770 {
771 <p class="mb-0">@MoblerHelpers.ShopInfo().Address2, @MoblerHelpers.ShopInfo().PostalAndCity2</p>
772 }
773 <p class="mt-3 mb-0">@shopInfo.Phone</p>
774 <p class="mb-0"><a href="mailto:@shopInfo.Email">@shopInfo.Email</a></p>
775 </div>
776 <div class="col-12 col-md-6 fs0 mt-4 mt-md-0">
777 <p class="color-black fs0 font-weight-bold mt-0 mb-3">@Translate("openinghours", "Åbningstider")</p>
778 <div class="openinghours">@shopInfo.OpeningHours</div>
779 </div>
780 </div>
781 </div>
782 }
783 </div>
784 <div class="col-12 d-none d-lg-flex align-items-end col-lg-3 text-center">
785 @{
786 string footerStaffImagePath = String.Format("/Files/Images/Owners/Large/{0}.png", shopname);
787 string footerStaffGetImage = "";
788 if (!String.IsNullOrEmpty(footerStaffImagePath))
789 {
790 footerStaffGetImage = "/Admin/Public/GetImage.ashx?Image=" + footerStaffImagePath + "&Format=webP&Quality=90&width=600&height=200";
791 }
792 }
793 <img width="600" height="200" class="img-fit-contain-x" src="@footerStaffGetImage" alt="@shopname">
794 </div>
795 <div class="col-12 col-sm-12 col-md-4 col-lg-3">
796 <div class="some-icons d-flex justify-content-end mb-3">
797 @foreach (var Some in GetLoop("Item.Area.SocialMediaIcons"))
798 {
799 string Link = Some.GetString("Item.Area.SocialMediaIcons.Link");
800 string Icon = Some.GetString("Item.Area.SocialMediaIcons.Icon.Value");
801 <a href="@Link" target="_blank" class="icon d-flex pr-2 align-items-start justify-content-center">
802 <img width="37" height="37" src="/Admin/Public/GetImage.ashx?Image=@Icon&Format=webP&Quality=90&Height=40" alt="social icon">
803 </a>
804 }
805
806 @foreach (var Some in GetLoop("Item.Area.SocialMediaFontawesomeIcons"))
807 {
808 string Link = Some.GetString("Item.Area.SocialMediaFontawesomeIcons.Link");
809 string Icon = Some.GetString("Item.Area.SocialMediaFontawesomeIcons.FontawesomeClass");
810 <a href="@Link" target="_blank" class="icon d-flex pr-2 align-items-start justify-content-center">
811 <i class="@Icon"></i>
812 </a>
813 }
814 </div>
815 </div>
816 </div>
817 </div>
818 </div>
819
820 <div class="footer-links bg-grey py-4">
821 <div class="container">
822 <div class="row">
823
824 <div class="col-sm-12 col-md-4 col-xl-2 mb-4 mb-md-0">
825 <h5 class="font-weight-bold">@GetString("Item.Area.Footer_Column_1_Header")</h5>
826 @foreach (var Link in GetLoop("Item.Area.Footer_Column_1_Links"))
827 {
828 string LinkText = Link.GetString("Item.Area.Footer_Column_1_Links.LinkText");
829 string LinkDestination = "/Default.aspx?id=" + Link.GetString("Item.Area.Footer_Column_1_Links.Link");
830 <div>
831 <a href="@LinkDestination">@LinkText</a>
832 </div>
833 }
834 </div>
835 <div class="col-sm-12 col-md-4 col-xl-2 mb-4 mb-md-0">
836 <h5 class="font-weight-bold">@GetString("Item.Area.Footer_Column_2_Header")</h5>
837 @foreach (var Link in GetLoop("Item.Area.Footer_Column_2_Links"))
838 {
839 string LinkText = Link.GetString("Item.Area.Footer_Column_2_Links.LinkText");
840 string LinkDestination = "/Default.aspx?id=" + Link.GetString("Item.Area.Footer_Column_2_Links.Link");
841 <div>
842 <a href="@LinkDestination">@LinkText</a>
843 </div>
844 }
845 </div>
846
847 <div class="col-sm-12 col-md-4 col-xl-2 mb-4 mb-md-0">
848 <h5 class="font-weight-bold">@GetString("Item.Area.Footer_Column_3_Header")</h5>
849 @foreach (var Link in GetLoop("Item.Area.Footer_Column_3_Links"))
850 {
851 string LinkText = Link.GetString("Item.Area.Footer_Column_3_Links.LinkText");
852 string LinkDestination = "/Default.aspx?id=" + Link.GetString("Item.Area.Footer_Column_3_Links.Link");
853 <div>
854 <a href="@LinkDestination">@LinkText</a>
855 </div>
856 }
857 </div>
858
859 <div class="col-sm-12 col-md-12 col-xl-5 offset-xl-1">
860 <h5 class="font-weight-bold">@Translate("Co3.Newsletter.Headline.Text", "Møblérs nyhedsbrev")</h5>
861 <form class="w-100 validate js-newsletter-signup">
862 <div class="js-form form-row align-items-center">
863 <div class="col-12 col-lg-8 mb-2 form-element">
864 <input name="FNAME" id="newsletterSignupName" type="text" class="form-control rounded-0 border-transparent color-dark-grey" placeholder="@Translate(" newsletter.name","navn")"="" required="">
865 </div>
866 <div class="col-12 col-lg-8 mb-2 mb-lg-0 form-element">
867 <input name="EMAIL" id="newsletterSignupEmail" type="email" class="form-control rounded-0 background-transparent color-dark-grey" placeholder="@Translate(" newsletter.email","e-mail")"="" required="">
868 </div>
869 <div class="col-12 col-lg-4 form-element">
870 <button type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="btn btn-footer-outline w-100">
871 Tilmeld
872 </button>
873 </div>
874 <div class="col-12 col-md-12 fs0 pt-4 pb-2 align-items-center">
875 <label class="ml-2 mb-0" data-bind="newsletterSubscribe">
876 <input id="termsofuse" type="checkbox" value="" required="">
877 @Translate("Newsletter.TermsOfUseLabel", "Jeg accepterer Møblérs <a href='/'>betingelser</a>")
878 </label>
879 </div>
880 </div>
881 <div id="newsletterMessage" class="col-12 pl-0 mt-3 mb-3 success d-none text-success align-items-center">
882 <span class="fs4 form-element">
883 @Translate("Newsletter.Success", "Thank you! You have subscribed to our newsletter.")
884 </span>
885 </div>
886 </form>
887 </div>
888 </div>
889 </div>
890 </div>
891
892 <div class="footer-icons py-4 bg-grey">
893 <div class="container">
894 <div class="row">
895 <div class="col-12 mb-sm-1 col-xl-6">
896 <div class="copyright d-flex justify-content-center justify-content-lg-start align-items-center">
897 © @currentYear @Translate("Copyright", "Møblér. All Rights Reserved.")
898 </div>
899 </div>
900 <div class="col-12 mb-sm-1 col-xl-1 offset-xl-1">
901 <div class="d-flex justify-content-center justify-content-lg-start align-items-center">
902 <a href='@Translate( "PersondataLink", "link" )'>@Translate("PersondataText", "Persondatapolitik")</a>
903 </div>
904 </div>
905 <div class="col-12 col-xl-4">
906 <div class="payment-options mt-4 mt-lg-0 d-flex justify-content-end align-items-center">
907 <img width="41" height="25" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/DK_Logo_konturstreg.png&Format=webP&Quality=90&Height=30" alt="Dankort">
908 <img width="34" height="22" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/visa.png&Format=webP&Quality=90&Height=30" alt="VISA">
909 <img width="35" height="22" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/visa-elektron.png&Format=webP&Quality=90&Height=30" alt="VISA Elektron">
910 <img width="33" height="22" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/mc_vrt_pos.png&Format=webP&Quality=90&Height=30" alt="American express">
911 <img width="109" height="20" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/santander.png&Format=webP&Quality=90&Height=30" alt="Santander">
912 <img width="76" height="25" src="/Admin/Public/GetImage.ashx?Image=/Files/Templates/Designs/Mobler2018/dist/img/DK_Logo_mobilepay.png&Format=webP&Quality=90&Height=30" alt="Mobilepay">
913 </div>
914 </div>
915 </div>
916 </div>
917 </div>
918 }
919
920 <script type="module" src="https://viewer-cdn.cylindo.com/v1/index.mjs" defer=""></script>
921
922 @Pageview.AddViteScript()
923 </body>
924 </html>
925