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&oslash;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&aring; 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&aelig;s mere om M&oslash;blér k&aelig;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&#229; 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", "&#197;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