Exception in template (Designs/Hummel/_parsed/Default.parsed.cshtml): System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.dcfcdbdcbb.Execute()
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context) in c:\Users\abbottm\Documents\GitHub\RazorEngine\src\Core\RazorEngine.Core\Templating\TemplateBase.cs:line 126
   at RazorEngine.Templating.TemplateService.Run(ITemplate template, DynamicViewBag viewBag) in c:\Users\abbottm\Documents\GitHub\RazorEngine\src\Core\RazorEngine.Core\Templating\TemplateService.cs:line 608
   at RazorEngine.Templating.TemplateService.Parse(String razorTemplate, Object model, DynamicViewBag viewBag, String cacheName) in c:\Users\abbottm\Documents\GitHub\RazorEngine\src\Core\RazorEngine.Core\Templating\TemplateService.cs:line 439
   at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName) in c:\Users\abbottm\Documents\GitHub\RazorEngine\src\Core\RazorEngine.Core\Razor.cs:line 276
   at Dynamicweb.Rendering.Template.RenderRazorTemplate() in D:\sources\Dynamicweb\Dynamicweb9\06 - Dynamicweb Host\Dynamicweb\Dynamicweb-9.3\Dynamicweb\Rendering\Template.vb:line 806
@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> @{ var isCheckoutFlow = Pageview.Page.NavigationTag == "cart-login" || Pageview.Page.NavigationTag == "checkout"; var cart = new StandardWebshop.Models.Cart.CartModel(Dynamicweb.Ecommerce.Common.Context.Cart); var cartQty = cart.Items.Sum(s => s.Qty); var query = System.Web.HttpContext.Current.Request.QueryString; var hasOrderCompleted = !string.IsNullOrWhiteSpace(query["CompletedOrderId"]); var isAltaPayFormCallback = System.Web.HttpContext.Current.Request.Url.AbsoluteUri.Contains("callback_form") || System.Web.HttpContext.Current.Request.Url.AbsoluteUri.Contains("errorcallback_form"); var isMain = !isAltaPayFormCallback && !isCheckoutFlow; } @SnippetStart("content") @using NORRIQ.Common8.Razor; @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> @Title("Page") @Description("Default Page Template") @Model.Placeholder("PlaceholderOne", "Content", "unwrap:true;default:true") @SnippetEnd("content") @if ((isMain || hasOrderCompleted || cartQty < 1) && !isAltaPayFormCallback) { <text>@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> @using Dynamicweb.Frontend.Devices @using Newtonsoft.Json @using NORRIQ.Common8.Razor; @using StandardWebshop.CustomCode.Razor @{ var currentCulture = System.Globalization.CultureInfo.CurrentUICulture; var LoginParagraph = 0; var PasswordParagraph = 0; var FooterParagraph = 0; Int32.TryParse(Pageview.Area.Item["LoginParagraph"].ToString().Split('#').Last(), out LoginParagraph); Int32.TryParse(Pageview.Area.Item["PasswordParagraph"].ToString().Split('#').Last(), out PasswordParagraph); Int32.TryParse(Pageview.Area.Item["FooterParagraph"].ToString().Split('#').Last(), out FooterParagraph); string canonical = null; if (System.Web.HttpContext.Current.Response.StatusCode == 200) { canonical = Pageview.Page.NavigationTag.Contains("home") ? "/" : (Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(System.Web.HttpContext.Current.Request.Url.PathAndQuery.TrimStart('/')) ?? "").Split('?')[0]; } } <!DOCTYPE html> <html lang="@Pageview.Area.Culture"> <head> @if (Model.Area.Item.GetBoolean("NoIndex")) { <meta name="robots" content="noindex, nofollow" /> @*TODO: remove on launch*@ } <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="format-detection" content="telephone=no" /> @* @Model.Title does not take the title from the productgroup for some resaon /SIN *@ <title>@Pageview.Meta.Title</title> <meta name="Description" content="@Pageview.Meta.GetMetaDescription()" /> @Pageview.Meta.GetMeta("Hrefs") @if (Model.PropertyItem.GetFile("OgImage") != null) { <meta property="og:title" content="@(String.IsNullOrEmpty(Model.PropertyItem.GetString("OgTitle")) ? Pageview.Meta.Title : Model.PropertyItem.GetString("OgTitle"))" /> <meta property="og:type" content="@(String.IsNullOrEmpty(Model.PropertyItem.GetSelectedValue("OgType")) ? "website" : Model.PropertyItem.GetSelectedValue("OgType"))" /> <meta property="og:url" content="https://@System.Web.HttpContext.Current.Request.Url.Host@System.Web.HttpUtility.HtmlAttributeEncode(canonical)" /> <meta property="og:image" content="https:@Pageview.CdnWrap(Model.PropertyItem.GetFile("OgImage").Path)" /> <meta property="og:description" content="@Pageview.Meta.GetMetaDescription()" /> } else if (!String.IsNullOrEmpty(Pageview.Meta.GetMeta("OgImage"))) { <meta property="og:title" content="@(String.IsNullOrEmpty(Pageview.Meta.GetMeta("OgTitle")) ? Pageview.Meta.Title : Pageview.Meta.GetMeta("OgTitle"))" /> <meta property="og:type" content="@(String.IsNullOrEmpty(Pageview.Meta.GetMeta("OgType")) ? "website" : Pageview.Meta.GetMeta("OgType"))" /> <meta property="og:url" content="https://@System.Web.HttpContext.Current.Request.Url.Host@System.Web.HttpUtility.HtmlAttributeEncode(canonical)" /> <meta property="og:image" content="https:@Pageview.CdnWrap(Pageview.Meta.GetMeta("OgImage"))" /> if (Pageview.Meta.GetMeta("OgType") == "product") { <meta property="og:image:width" content="300" /> <meta property="og:image:height" content="300" /> } <meta property="og:description" content="@Pageview.Meta.GetMetaDescription()" /> } @*Canonical, assuming all url's have friendly names :) *@ @if (!string.IsNullOrEmpty(canonical)) { <link rel="canonical" href="@System.Web.HttpUtility.HtmlAttributeEncode(canonical)"/> } <link rel="stylesheet" href="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/css/custom-fonts.min.css")" /> <link rel="stylesheet" href="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/css/master.min.css")" /> <link rel="stylesheet" href="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/Files/Templates/Designs/Hummel/css/custom.min.css")" /> <link rel="icon" type="image/png" sizes="any" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-96x96.png")" /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <link rel="icon" type="image/png" sizes="16x16" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-16x16.png")" /> <link rel="icon" type="image/png" sizes="32x32" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-32x32.png")" /> <link rel="icon" type="image/png" sizes="96x96" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-96x96.png")" /> <link rel="apple-touch-icon" sizes="any" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon.png")" /> <link rel="apple-touch-icon" sizes="57x57" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-57x57.png")" /> <link rel="apple-touch-icon" sizes="60x60" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-60x60.png")" /> <link rel="apple-touch-icon" sizes="72x72" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-72x72.png")" /> <link rel="apple-touch-icon" sizes="76x76" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-76x76.png")" /> <link rel="apple-touch-icon" sizes="114x114" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-114x114.png")" /> <link rel="apple-touch-icon" sizes="120x120" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-120x120.png")" /> <link rel="apple-touch-icon" sizes="144x144" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-144x144.png")" /> <link rel="apple-touch-icon" sizes="152x152" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-152x152.png")" /> <link rel="apple-touch-icon" sizes="180x180" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-180x180.png")" /> <link rel="apple-touch-icon-precomposed" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-precomposed.png")" /> @if(!String.IsNullOrEmpty(Model.Area.Item.GetString("GoogleAnalytics"))) { <!-- Google Tag Manager --> <script>(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', '@Model.Area.Item.GetString("GoogleAnalytics")');</script> <!-- End Google Tag Manager --> } <script> var hummelCart = { cartConfig: { "separator": "@(currentCulture.NumberFormat.CurrencyGroupSeparator)", "decimal": "@(currentCulture.NumberFormat.CurrencyDecimalSeparator)", "currency": "@(currentCulture.NumberFormat.CurrencySymbol)" }, mainCart: {}, cartObj: { "Cart": @(JsonConvert.SerializeObject(new StandardWebshop.Models.Cart.CartModel(Dynamicweb.Ecommerce.Common.Context.Cart))) } } </script> </head> <body class="sticky-header-desktop @(Model.Area.Item.GetBoolean("SiteHasShopping") ? "" : "no-shopping")"> @if (!String.IsNullOrEmpty(Model.Area.Item.GetString("GoogleAnalytics"))) { <noscript> <iframe src='//www.googletagmanager.com/ns.html?id=@(Model.Area.Item.GetString("GoogleAnalytics"))' height='0' width='0' style='display: none; visibility: hidden'></iframe> </noscript> } <div class="overlay overlay__default"></div> <div class="overlay overlay__mobile-nav"></div> <div class="overlay overlay__desktop-nav"></div> <div class="overlay overlay__filter"></div> @using NORRIQ.Common8.Razor; @using StandardWebshop.CustomCode.Razor @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> @{ int HelpID = Navigation.GetPageIdByNavigationTag("help"); int UserID = Navigation.GetPageIdByNavigationTag("useraccount"); } <header> <section class="pre-header"> <div class="container-fluid"> <div class="row"> <div class="col-sm-4 col-sm-offset-4"> @if (Model.Area.Item.GetBoolean("SiteHasShopping")) { <p class="pre-header__selling-point"> @if (!String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader"))) { var UspLink = Model.Area.Item.GetValue("UspHeaderLink").ToString(); if (!String.IsNullOrEmpty(UspLink)) { <a href="@Model.Area.Item.GetValue("UspHeaderLink")" class="@(!String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader2")) || !String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader3")) ? "usp-rotate usp-header-1" : "usp-single")"> @Model.Area.Item.GetString("UspHeader") </a> } else { <span class="@(!String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader2")) || !String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader3")) ? "usp-rotate usp-header-1" : "usp-single")"> @Model.Area.Item.GetString("UspHeader") </span> } } @if (!String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader2"))) { var UspLink = Model.Area.Item.GetValue("UspHeaderLink2").ToString(); if (!String.IsNullOrEmpty(UspLink)) { <a href="@Model.Area.Item.GetValue("UspHeaderLink2")" class="usp-rotate usp-header-2"> @Model.Area.Item.GetString("UspHeader2") </a> } else { <span class="usp-rotate usp-header-2"> @Model.Area.Item.GetString("UspHeader2") </span> } } @if (!String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader3"))) { var UspLink = Model.Area.Item.GetValue("UspHeaderLink3").ToString(); if (!String.IsNullOrEmpty(UspLink)) { <a href="@Model.Area.Item.GetValue("UspHeaderLink3")" class="usp-rotate usp-header-3"> @Model.Area.Item.GetString("UspHeader3") </a> } else { <span class="usp-rotate usp-header-3"> @Model.Area.Item.GetString("UspHeader3") </span> } } </p> } </div> <div class="col-sm-4"> @* Top navigation found in the right side of the black header bar *@ <nav class="nav-top"> <ul class="nav-top__list"> <li class="nav-top__item"> <a href="@Navigation.GetUrlByNavigationTag("storefinder")" class="nav-top__anchor">@Translate("Find butik")</a> </li> @if (Model.Area.Item.GetBoolean("SiteHasShopping")) { <li class="nav-top__item"> <a href="#" class="nav-top__anchor nav-top__anchor-dropdown"> @Translate("Hjælp") <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-down-small"></use> </svg> </a> <div class="nav-top__dropdown"> <ul class="nav-top__dropdown-list"> @DwCaching.CacheByArea("HeaderDropdown.xslt:" + HelpID, () => RenderNavigation(new { Template = "HeaderDropdown.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2, ParentId = HelpID })) </ul> </div> </li> <li class="nav-top__item"> @if (Pageview.Security.UserLoggedIn) { <a href="#" class="nav-top__anchor nav-top__anchor-dropdown" data-overlay-id="overlay-login"> @if (!String.IsNullOrEmpty(Pageview.User.FirstName)) { @Pageview.User.FirstName } else if (!String.IsNullOrEmpty(Pageview.User.Name)) { @Pageview.User.Name } else { @Translate("B2C Min konto", "Min konto") } <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-down-small"></use> </svg> </a> <div class="nav-top__dropdown"> <ul class="nav-top__dropdown-list"> @DwCaching.CacheByArea("HeaderDropdown.xslt:" + UserID, () => RenderNavigation(new { Template = "HeaderDropdown.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2, ParentId = UserID })) <li> <a href='/admin/public/extranetlogoff.aspx?ID=@(Pageview.Page.ID)'> @Translate("B2C Log af", "Log off") </a> </li> </ul> </div> } else if (!Pageview.Security.UserLoggedIn && Pageview.IsCurrentUserAllowed) { <a href="#" class="nav-top__anchor overlay-content-trigger" data-overlay-id="overlay-login">@Translate("B2C Log ind", "Login")</a> } </li> } </ul> </nav> @* END Top navigation *@ </div> </div> </div> </section> <section class="header"> <div class="container-fluid"> <div class="row"> <div class="col-md-3 col-xl-3"> @* left side HUMMEL logo *@ <a class="header__logo" href="/"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#logo"></use> </svg> </a> @* END logo *@ </div> <div class="col-md-5 col-xl-6"> @* Primary navigation and mega dropdowns *@ <nav class="nav-main"> <div class="nav-main--mobile-overflow"> @RenderSnippet("PrimaryNavigation") <ul class="nav-main__list"> @if (Model.Area.Item.GetBoolean("SiteHasShopping")) { @*<li class="nav-main__item"> <a href="@Navigation.GetUrlByNavigationTag("favorites")" class="nav-main__anchor nav-main__anchor--lighter">@Translate("Favoritter")</a> </li>*@ <li class="nav-main__item"> <div class="nav-main__anchor nav-main__anchor--lighter nav-main__anchor--has-children"> @Translate("B2C Hjælp", "Hjælp") <svg class="icon icon--xs"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-right-small"></use> </svg> </div> <div class="nav-main__sub-item nav-main__sub-item-level-1"> <div class="nav-main--mobile-overflow"> <button class="nav-main__sub-item-back-button"> <svg class="icon icon--xs"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-left-small"></use> </svg> @Translate("B2C Hjælp", "Hjælp") </button> <div class="nav-main__sub-item-list"> @DwCaching.CacheByArea("HelpMenuMobile.xslt:" + HelpID, () => RenderNavigation(new { Template = "HelpMenuMobile.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2, ParentId = HelpID })) </div> </div> </div> </li> if (!Pageview.Security.UserLoggedIn) { <li class="nav-main__item"> <a href="#" class="nav-main__anchor nav-main__anchor--lighter overlay-content-trigger" data-overlay-id="overlay-login">@Translate("B2C Log ind", "Login")</a> </li> } else { <li class="nav-main__item"> <div class="nav-main__anchor nav-main__anchor--lighter nav-main__anchor--has-children"> @if (!String.IsNullOrEmpty(Pageview.User.FirstName)) { @Pageview.User.FirstName } else if (!String.IsNullOrEmpty(Pageview.User.Name)) { @Pageview.User.Name } else { @Translate("B2C Min konto", "Min konto") } <svg class="icon icon--xs"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-right-small"></use> </svg> </div> <div class="nav-main__sub-item nav-main__sub-item-level-1"> <div class="nav-main--mobile-overflow"> <button class="nav-main__sub-item-back-button"> <svg class="icon icon--xs"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-left-small"></use> </svg> @if (!String.IsNullOrEmpty(Pageview.User.FirstName)) { @Pageview.User.FirstName } else if (!String.IsNullOrEmpty(Pageview.User.Name)) { @Pageview.User.Name } else { @Translate("B2C Min konto", "Min konto") } </button> <div class="nav-main__sub-item-list"> @DwCaching.CacheByArea("HelpMenuMobile.xslt:" + UserID, () => RenderNavigation(new { Template = "HelpMenuMobile.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2, ParentId = UserID })) <div class="nav-main__sub-item-item"> <a href='/admin/public/extranetlogoff.aspx?ID=@(Pageview.Page.ID)' class="nav-main__anchor nav-main__anchor--light"> @Translate("B2C Log af", "Log off") </a> </div> </div> </div> </div> </li> } } <li class="nav-main__item"> <a href="@Navigation.GetUrlByNavigationTag("storefinder")" class="nav-main__anchor nav-main__anchor--lighter">@Translate("Find butik")</a> </li> @* Shown in footer, so have removed it here - HVK <li class="nav-main__item"> <a href="@Navigation.GetUrlByNavigationTag("country")" class="nav-main__anchor nav-main__anchor--lighter">Danmark</a> </li> *@ </ul> </div><!--//.main-nav--mobile-oveflow end--> </nav> @* END Primary navigation *@ </div> <div class="col-md-4 col-xl-3"> @* Header utlities and tools foound in the right side of the header *@ <div class="header-utilities"> <a href="#" class="header-utilities__anchor search"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#search"></use> </svg> </a> <div class="header-utilities__search"> <div class="header-utilities__search-input-wrap"> <input class="header-utilities__search-input" type="search" placeholder="@(Translate("B2C Søg", "Søg"))" /> <button class="header-utilities__search-button" type="submit" data-url="/api/search/lookup/2" data-result-url="@Navigation.GetUrlByNavigationTag("search")"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#search"></use> </svg> </button> <span class="triangle"></span> </div> <div class="header-utilities__search-dropdown"> <div class="header-utilities__search-dropdown-wrap"> <div class="header-utilities__search-dropdown-categories"> </div> <div class="header-utilities__search-dropdown-products"> </div> <div class="header-utilities__search-dropdown-inspiration"> </div> </div> </div> <button type="button" class="header-utilities__search-dropdown-close btn-close"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#close-big"></use> </svg> </button> </div> @if (Model.Area.Item.GetBoolean("SiteHasShopping")) { @* #Favorite not part of Fase 1# <a href="#" class="header-utilities__anchor favorite-icon"> <svg class="icon favorite-icon__clear"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#favorit-stroke"></use> </svg> <svg class="icon favorite-icon__filled"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#favorit-full"></use> </svg> </a> *@ <a href="@Navigation.GetUrlByNavigationTag("cart")" class="header-utilities__anchor cart"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#shopping-cart"></use> </svg> <span class="number"> <span data-count="@cartQty" hummel-text="Cart.Items | quantity"></span> </span> </a> } else { <div class="header-utilities__anchor cart">&nbsp;</div> } <button class="header-utilities__burger-button" type="button"> <span></span> <span></span> <span></span> </button> </div> @* END Header utlities *@ </div> </div> </div> </section> </header> <main class="main main__@(Model.ItemType.ToLower())"> @RenderSnippet("content") </main> @if (Model.Area.Item.GetBoolean("SiteHasShopping")) { @Pageview.RenderParagraphCachedCrossUsers(FooterParagraph) if (!Pageview.Security.UserLoggedIn && Pageview.IsCurrentUserAllowed) { @Pageview.RenderParagraphCachedCrossUsers(LoginParagraph) } <section class="cart cart--mini cart--mini-mobile-layout"> <div class="cart__content"> @* Only the following should be included if there are no items in the basket, and also *@ <div hummel-show="Cart.Items | empty" class="cart__no-products"> <p class="headline headline--small">@Translate("B2B Der er ingen produkter i kurven", "Der er ingen produkter i kurven")</p> </div> <span hummel-hide="Cart.Items | empty"> @* Cart Products ---------------------------------------------------------------------------------------- Product elements to be updated: - Image: ".cart-products-item__image img src" - Name: ".cart-products-item__name" - Link: ".cart-products-item__link" - Size: ".cart-products-item__size" - Id: ".cart-products-item__id" - Quantity: ".quantity-input__input" - Price: ".cart-products-item__price-full", ".cart-products-item__price-new" and ".cart-products-item__price-old". Expected behaviors -- TO DO: Make product a favorite -- If ".cart-products-item__button-favorite" is already a favorite add the following class ".cart-products-item__button-favorite--active". Update product quantity -- AJAX updates quantity and the following prices, Full price: ".cart-products-item__price-full" New price: ".cart-products-item__price-new" Subtotal price: ".cart__summary-table-subtotal-price" Discounted price: ".cart__summary-table-discount-price" Total price: ".cart__summary-table-total-price" Remove product from order -- Removes synchronously the product from the order and updates the subtotal, discounted and total price, a page reload is expected. ".cart-products-item__button-close" Out-of-stock -- If product is out of stock add class "cart-products-item__quantity--out-of-stock" onto the ".cart-products-item__quantity" element, so feedback is provided. *@ <ul class="cart-products" data-simplebar> @* .cart-products-item START *@ <li class="cart-products-item" hummel-each-item="Cart.Items"> <div class="cart-products-item__image"> <a hummel-href="item.Url"> <img hummel-src="item.Image" hummel-alt="item.Name"> </a> </div> <div class="cart-products-item__text"> <div class="clearfix"> @* .cart-products-item__info START *@ <input type="hidden" id="Number" hummel-value="item.Number"> <input type="hidden" id="Variant" hummel-value="item.Variant"> <div class="cart-products-item__info"> <h3 class="cart-products-item__name-wrap"> <a hummel-href="item.Url" class="cart-products-item__link"><span class="cart-products-item__name" hummel-text="item.Name"></span></a> </h3> <p class="cart-products-item__size-wrap">@Translate("B2C Størrelse", "Størrelse"): <span class="cart-products-item__size" hummel-text="item.Size"></span></p> <p class="cart-products-item__color-wrap">@Translate("B2C Farve", "Farve"): <span class="cart -products-item__color" hummel-text="item.Colour"></span></p> <p class="cart-products-item__id-wrap">@Translate("B2C Varenr", "Varenr."): <span class="cart-products-item__id" hummel-text="item.PrettyNumber"></span></p> <div class="cart-products-item__button"> <button data-remove-url="/API/Cart/RemoveItem" type="button" class="cart-products-item__button-close"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#close-big"></use> </svg> <span>@Translate("B2C Fjern", "Fjern")</span> </button> @*<button hummel-unless="item.Favourite" data-url="/favadd" type="button" class="cart-products-item__button-favorite"> <svg class="icon favorite-icon__clear"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#favorit-stroke"></use> </svg> <span>@Translate("B2C Tilføj til favoritliste", "Tilføj til favoritliste")</span> </button> <button hummel-if="item.Favourite" data-url-remove="/favremove" type="button" class="cart-products-item__button-favorite cart-products-item__button-favorite--active"> <svg class="icon favorite-icon__filled"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#favorit-full"></use> </svg> <span>@Translate("B2C Fjern fra favoritliste", "Fjern fra favoritliste")</span> </button>*@ </div> </div> @* .cart-products-item__info END *@ <div class="cart-products-item__quantity"> <div class="quantity-input" data-url="/API/Cart/UpdateQuantity"> <label>@Translate("B2C Antal", "Antal"):</label> <input class="quantity-input__input" type="text" hummel-value="item.Qty"> <button type="button" class="quantity-input__less-btn">-</button> <button type="button" class="quantity-input__more-btn">+</button> </div> <div class="cart-products-item__feeback" hummel-forceshow="item.QtyBefore"> <p>@Translate("B2C Det er ikke flere på lager", "Det er ikke flere på lager")</p> </div> </div> @* .cart-products-item__add END *@ @* .cart-products-item__price START *@ <div class="cart-products-item__price"> <p hummel-show="item.Discount | > 0" class="cart-products-item__price-new"> <span hummel-text="item.Discount | current"></span> @Pageview.Area.EcomCurrencyId </p> <p hummel-show="item.Discount | > 0" class="cart-products-item__price-old"> <span hummel-text="item.Price | currency"></span> @Pageview.Area.EcomCurrencyId </p> <p hummel-show="item.Discount | < 1" class="cart-products-item__price-full"> <span hummel-text="item.Price | currency"></span> @Pageview.Area.EcomCurrencyId </p> @* There are 3 variations in price presentation: <p class="cart-products-item__price-full">750 kr</p> <p class="cart-products-item__price-new">400 kr</p> <p class="cart-products-item__price-old">800 kr</p> *@ </div> @* .cart-products-item__price END *@ </div> </div> </li> @* .cart-products-item END *@ </ul> @using NORRIQ.Common8.Razor; @{ var showButton = Pageview.Page.NavigationTag == "cart-login" || Pageview.Page.NavigationTag == "checkout"; } <style> .standard { color: peachpuff; } </style> @* Cart Summary ---------------------------------------------------------------------------------------- Expected behaviors -- TO DO: Discount code --- The discount form (#discount-code-form) should be submitted synchronously, the following elements must be updated on page reload: ".cart__summary-table-subtotal-price", ".cart__summary-table-discount-price", ".cart__summary-table-total-price" ".cart__price-to-free-delivery" *@ <div class="cart__summary"> <p class="cart__summary-header">@Translate("B2C Ordreoversigt", "Ordreoversigt")</p> <div class="cart__summary-content"> <table class="cart__summary-table"> <tbody> <tr> <td class="cart__summary-table-subtotal"> @Translate("B2C Subtotal", "Subtotal") </td> <td class="cart__summary-table-subtotal"> <span class="cart__summary-table-subtotal-price" hummel-text="Cart.Summary.Amount | currency">1600</span> @Pageview.Area.EcomCurrencyId </td> </tr> <tr hummel-each-detail="Cart.Summary.Details"> <td hummel-if="detail | single" colspan="2" style="font-weight: 600;" hummel-text="detail | itemat 0"></td> <td hummel-if="detail | double" hummel-text="detail | itemat 0"></td> <td hummel-if="detail | double" class="cart__summary-table-delivery"> <span hummel-if="detail | isdiscount" class="cart__summary-table-discount"> <span class="cart__summary-table-discount-price" hummel-text="detail | itemat 1"></span> <span hummel-if="detail | addcurrency"></span> @Pageview.Area.EcomCurrencyId </span> <span hummel-hide="detail | isdiscount " class="cart__summary-table-delivery-price"> <span hummel-text="detail | itemat 1"></span> <span hummel-if="detail | addcurrency"></span> @Pageview.Area.EcomCurrencyId </span> </td> </tr> <tr class="show-mini-cart"> <td class="cart__summary-table-total"> @Translate("B2C Total", "Total") </td> <td class="cart__summary-table-total"> <span> <span class="cart__summary-table-total-price" hummel-text="Cart.Summary.Total | currency">@*@cart.Summary.Total.ToString("N2", currentCulture)*@ </span> @Pageview.Area.EcomCurrencyId </span> <span class="cart__summary-table-total-tax">@Translate("B2C inkl. moms", "inkl. moms")</span> </td> </tr> <tr class="@(showButton ? "show-mini-cart hidden":"show-mini-cart")"> <td colspan="2"> <a href="@(Pageview.Security.UserLoggedIn ? Navigation.GetUrlByNavigationTag("checkout") : Navigation.GetUrlByNavigationTag("cart-login"))" class="btn"> @Translate("Gå til kassen") </a> <a href="@Navigation.GetUrlByNavigationTag("cart")" class="btn-clear cart__summary-go-to-cart-btn"> <span>@Translate("B2C Gå til kurv", "Gå til kurv")</span> </a> </td> </tr> </tbody> </table> </div> </div> </span> </div> </section> if (!Pageview.Security.UserLoggedIn) { @Pageview.RenderParagraphCachedCrossUsers(PasswordParagraph) } } else { @Pageview.RenderParagraphCachedCrossUsers(FooterParagraph) } @if (System.Web.HttpContext.Current.Request.Url.Host.Equals("localhost")) { <script src="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/scripts/vendor.min.js")"></script> <script src="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/scripts/master.min.js")"></script> } else { <script src="@this.Pageview.CdnWrap(StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/scripts/vendor.min.js"))"></script> <script src="@this.Pageview.CdnWrap(StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/scripts/master.min.js"))"></script> } @* Below is for langauge picker *@ @if (System.Web.HttpContext.Current.Request.Cookies["language-selected"] == null && Pageview.Device != DeviceType.Bot && !string.Equals(System.Web.HttpContext.Current.Request.QueryString["skipmodal"],"true")) { <div id="language-picker" data-url="@System.Web.HttpContext.Current.Request.Url.PathAndQuery"></div> } @SnippetStart("PrimaryNavigation") @DwCaching.CacheByArea("PrimaryNavigation.xslt", () => RenderNavigation(new { Template = "PrimaryNavigation.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 3, GroupPage = Navigation.GetPageIdByNavigationTag("groups") })) @SnippetEnd("PrimaryNavigation") </body> </html> </text> } @*Checkout master if are in checkout flow with a quantity bigger than 0*@ else if (isCheckoutFlow && cartQty > 0 && !isAltaPayFormCallback) { <text>@using Newtonsoft.Json @using NORRIQ.Common8.Razor @using StandardWebshop.CustomCode.Razor @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> @{ var currentCulture = System.Globalization.CultureInfo.CurrentUICulture; var LoginParagraph = 0; var PasswordParagraph = 0; var FooterParagraph = 0; Int32.TryParse(Pageview.Area.Item["LoginParagraph"].ToString().Split('#').Last(), out LoginParagraph); Int32.TryParse(Pageview.Area.Item["PasswordParagraph"].ToString().Split('#').Last(), out PasswordParagraph); Int32.TryParse(Pageview.Area.Item["FooterParagraph"].ToString().Split('#').Last(), out FooterParagraph); } <!DOCTYPE html> <html lang="@Pageview.Area.Culture"> <head> @if (Model.Area.Item.GetBoolean("NoIndex")) { <meta name="robots" content="noindex, nofollow" /> @*TODO: remove on launch*@ } <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="format-detection" content="telephone=no" /> <title>@Pageview.Meta.Title</title> <meta name="Description" content="@Pageview.Meta.GetMetaDescription()" /> @*Canonical, assuming all url's have friendly names :) *@ @if (Pageview.SearchFriendlyUrl != null && !Pageview.SearchFriendlyUrl.Contains("ID=")) { <link rel="canonical" href="@System.Web.HttpUtility.HtmlAttributeEncode(Pageview.SearchFriendlyUrl.Split(new []{'?'},2)[0])" /> } <link rel="stylesheet" href="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/css/custom-fonts.min.css")" /> <link rel="stylesheet" href="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/css/master.min.css")" /> <link rel="stylesheet" href="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/Files/Templates/Designs/Hummel/css/custom.min.css")" /> @this.Pageview.Page.MetaCanonical <link rel="icon" type="image/png" sizes="any" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-96x96.png")" /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <link rel="icon" type="image/png" sizes="16x16" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-16x16.png")" /> <link rel="icon" type="image/png" sizes="32x32" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-32x32.png")" /> <link rel="icon" type="image/png" sizes="96x96" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-96x96.png")" /> <link rel="apple-touch-icon" sizes="any" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon.png")" /> <link rel="apple-touch-icon" sizes="57x57" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-57x57.png")" /> <link rel="apple-touch-icon" sizes="60x60" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-60x60.png")" /> <link rel="apple-touch-icon" sizes="72x72" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-72x72.png")" /> <link rel="apple-touch-icon" sizes="76x76" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-76x76.png")" /> <link rel="apple-touch-icon" sizes="114x114" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-114x114.png")" /> <link rel="apple-touch-icon" sizes="120x120" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-120x120.png")" /> <link rel="apple-touch-icon" sizes="144x144" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-144x144.png")" /> <link rel="apple-touch-icon" sizes="152x152" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-152x152.png")" /> <link rel="apple-touch-icon" sizes="180x180" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-180x180.png")" /> <link rel="apple-touch-icon-precomposed" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-precomposed.png")" /> @if(!String.IsNullOrEmpty(Model.Area.Item.GetString("GoogleAnalytics"))) { <!-- Google Tag Manager --> <script>(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', '@Model.Area.Item.GetString("GoogleAnalytics")');</script> <!-- End Google Tag Manager --> } <script> var hummelCart = { cartConfig: { "separator": "@(currentCulture.NumberFormat.CurrencyGroupSeparator)", "decimal": "@(currentCulture.NumberFormat.CurrencyDecimalSeparator)", "currency": "@(currentCulture.NumberFormat.CurrencySymbol)" }, mainCart: {}, cartObj: { "Cart": @(JsonConvert.SerializeObject(new StandardWebshop.Models.Cart.CartModel(Dynamicweb.Ecommerce.Common.Context.Cart))) } } </script> </head> <body class="checkout @(Model.Area.Item.GetBoolean("SiteHasShopping") ? "" : "no-shopping")"> @if (!String.IsNullOrEmpty(Model.Area.Item.GetString("GoogleAnalytics"))) { <noscript> <iframe src='//www.googletagmanager.com/ns.html?id=@(Model.Area.Item.GetString("GoogleAnalytics"))' height='0' width='0' style='display: none; visibility: hidden'></iframe> </noscript> } <div class="overlay overlay__default"></div> <div class="overlay overlay__mobile-nav"></div> <div class="overlay overlay__desktop-nav"></div> <div class="overlay overlay__filter"></div> <header class="checkout__header"> <div class="row"> <div class="col-xs-4"> <a class="header__logo" href="/"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#logo"></use> </svg> </a> </div> <div class="col-xs-8"> <div class="checkout__header-text text-right"> @(Pageview.Area.Item["CheckoutHelptext"] ?? "") </div> </div> </div> </header> <main class="main @Model.ItemType.ToLower()"> @RenderSnippet("content") </main> @if (Model.Area.Item.GetBoolean("SiteHasShopping")) { <footer class="checkout__footer text-center"> @(Pageview.Area.Item["CheckoutHelptext"] != null ? Pageview.Area.Item["CheckoutHelptext"] : "") </footer> if (!Pageview.Security.UserLoggedIn) { @Pageview.RenderParagraphCachedCrossUsers(PasswordParagraph) } } else { @Pageview.RenderParagraphCachedCrossUsers(FooterParagraph) } <script src="@this.Pageview.CdnWrap(StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/scripts/vendor.min.js"))"></script> <script src="@this.Pageview.CdnWrap(StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/scripts/master.min.js"))"></script> @SnippetStart("PrimaryNavigation") @DwCaching.CacheByArea("PrimaryNavigation.xslt", () => RenderNavigation(new {Template = "PrimaryNavigation.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 3, GroupPage = Navigation.GetPageIdByNavigationTag("groups") })) @SnippetEnd("PrimaryNavigation") </body> </html></text> } @*Its an altapay form callback --> use stripped master.*@ else if (isAltaPayFormCallback) { <text>@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> @using StandardWebshop.CustomCode.Razor <!DOCTYPE html> @* Altapay styling Altapay replaces content in form element, normally with class="PensioPaymentForm" . Current elements are placeholders to show the styling for each item but the only way to confirm styling is correct is to check with the content altapay puts in the form. This requires a testgateway to check the content being replaced and thus the markup needs to be supplied in order to finish the correct styling so it matches replaced elements External files that are required: /dist/css/altapay.min.css /dist/images/logo.png /dist/fonts/34226D_2_0.eot /dist/fonts/34226D_2_0.woff2 /dist/fonts/34226D_2_0.woff /dist/fonts/34226D_2_0.ttf *@ <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Hummel Secure Pay</title> <link rel="icon" type="image/png" sizes="any" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-96x96.png")" /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <link rel="icon" type="image/png" sizes="16x16" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-16x16.png")" /> <link rel="icon" type="image/png" sizes="32x32" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-32x32.png")" /> <link rel="icon" type="image/png" sizes="96x96" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-96x96.png")" /> <link rel="apple-touch-icon" sizes="any" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon.png")" /> <link rel="apple-touch-icon" sizes="57x57" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-57x57.png")" /> <link rel="apple-touch-icon" sizes="60x60" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-60x60.png")" /> <link rel="apple-touch-icon" sizes="72x72" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-72x72.png")" /> <link rel="apple-touch-icon" sizes="76x76" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-76x76.png")" /> <link rel="apple-touch-icon" sizes="114x114" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-114x114.png")" /> <link rel="apple-touch-icon" sizes="120x120" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-120x120.png")" /> <link rel="apple-touch-icon" sizes="144x144" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-144x144.png")" /> <link rel="apple-touch-icon" sizes="152x152" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-152x152.png")" /> <link rel="apple-touch-icon" sizes="180x180" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-180x180.png")" /> <link rel="apple-touch-icon-precomposed" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-precomposed.png")" /> <link rel="stylesheet" href="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/css/custom-fonts.min.css")" /> <link rel="stylesheet" href="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/css/altapay.min.css")"> @*TODO: Make Heyday fix this.!*@ <style> .altapay__error-message { padding: 15px; } .altapay__error-title { color: #d03a3a; font-family: 'Gibson-Regular',sans-serif; font-size: 15px; margin-top: 0; margin-bottom: 10px; font-weight: 600; } .altapay__error-list { color: #000000; font-family: 'Gibson-Regular',sans-serif; font-size: 14px; list-style: none; margin: 0; padding: 0; } .altapay__error-btn { font-family: 'Gibson-Regular',sans-serif; text-decoration: none; color: #000; text-transform: uppercase; font-size: 14px; margin-top: 15px; padding-top: 15px; border-top: 1px solid #d8d8d8; display: block; } .overlay__content-inner{ display: none; } .altapay__back-button, form + a { margin-left: 0; left: 0; } @@media (max-width: 568px) { .altapay__back-button, form + a { width: 100%; text-align: center; margin-top: 115px; } } </style> </head> <body> <header class="checkout__header"> <div class="row"> <div class="col-xs-4"> <a class="header__logo" href="/"> <img src="@this.Pageview.CdnWrap("/dist/images/logo.png")" width="150"> </a> </div> <div class="col-xs-8"> <div class="checkout__header-text"> @(Pageview.Area.Item["CheckoutHelptext"] ?? "") </div> </div> </div> </header> <div class="main"> <div> <h1>@Translate("B2C INDTAST KONTOOPLYSNINGER", "INDTAST KONTOOPLYSNINGER")</h1> @RenderSnippet("content") </div> </div> </body> </html> </text> } @*Always fallback to regular master!*@ else { <text>@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> @using Dynamicweb.Frontend.Devices @using Newtonsoft.Json @using NORRIQ.Common8.Razor; @using StandardWebshop.CustomCode.Razor @{ var currentCulture = System.Globalization.CultureInfo.CurrentUICulture; var LoginParagraph = 0; var PasswordParagraph = 0; var FooterParagraph = 0; Int32.TryParse(Pageview.Area.Item["LoginParagraph"].ToString().Split('#').Last(), out LoginParagraph); Int32.TryParse(Pageview.Area.Item["PasswordParagraph"].ToString().Split('#').Last(), out PasswordParagraph); Int32.TryParse(Pageview.Area.Item["FooterParagraph"].ToString().Split('#').Last(), out FooterParagraph); string canonical = null; if (System.Web.HttpContext.Current.Response.StatusCode == 200) { canonical = Pageview.Page.NavigationTag.Contains("home") ? "/" : (Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(System.Web.HttpContext.Current.Request.Url.PathAndQuery.TrimStart('/')) ?? "").Split('?')[0]; } } <!DOCTYPE html> <html lang="@Pageview.Area.Culture"> <head> @if (Model.Area.Item.GetBoolean("NoIndex")) { <meta name="robots" content="noindex, nofollow" /> @*TODO: remove on launch*@ } <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="format-detection" content="telephone=no" /> @* @Model.Title does not take the title from the productgroup for some resaon /SIN *@ <title>@Pageview.Meta.Title</title> <meta name="Description" content="@Pageview.Meta.GetMetaDescription()" /> @Pageview.Meta.GetMeta("Hrefs") @if (Model.PropertyItem.GetFile("OgImage") != null) { <meta property="og:title" content="@(String.IsNullOrEmpty(Model.PropertyItem.GetString("OgTitle")) ? Pageview.Meta.Title : Model.PropertyItem.GetString("OgTitle"))" /> <meta property="og:type" content="@(String.IsNullOrEmpty(Model.PropertyItem.GetSelectedValue("OgType")) ? "website" : Model.PropertyItem.GetSelectedValue("OgType"))" /> <meta property="og:url" content="https://@System.Web.HttpContext.Current.Request.Url.Host@System.Web.HttpUtility.HtmlAttributeEncode(canonical)" /> <meta property="og:image" content="https:@Pageview.CdnWrap(Model.PropertyItem.GetFile("OgImage").Path)" /> <meta property="og:description" content="@Pageview.Meta.GetMetaDescription()" /> } else if (!String.IsNullOrEmpty(Pageview.Meta.GetMeta("OgImage"))) { <meta property="og:title" content="@(String.IsNullOrEmpty(Pageview.Meta.GetMeta("OgTitle")) ? Pageview.Meta.Title : Pageview.Meta.GetMeta("OgTitle"))" /> <meta property="og:type" content="@(String.IsNullOrEmpty(Pageview.Meta.GetMeta("OgType")) ? "website" : Pageview.Meta.GetMeta("OgType"))" /> <meta property="og:url" content="https://@System.Web.HttpContext.Current.Request.Url.Host@System.Web.HttpUtility.HtmlAttributeEncode(canonical)" /> <meta property="og:image" content="https:@Pageview.CdnWrap(Pageview.Meta.GetMeta("OgImage"))" /> if (Pageview.Meta.GetMeta("OgType") == "product") { <meta property="og:image:width" content="300" /> <meta property="og:image:height" content="300" /> } <meta property="og:description" content="@Pageview.Meta.GetMetaDescription()" /> } @*Canonical, assuming all url's have friendly names :) *@ @if (!string.IsNullOrEmpty(canonical)) { <link rel="canonical" href="@System.Web.HttpUtility.HtmlAttributeEncode(canonical)"/> } <link rel="stylesheet" href="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/css/custom-fonts.min.css")" /> <link rel="stylesheet" href="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/css/master.min.css")" /> <link rel="stylesheet" href="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/Files/Templates/Designs/Hummel/css/custom.min.css")" /> <link rel="icon" type="image/png" sizes="any" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-96x96.png")" /> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> <link rel="icon" type="image/png" sizes="16x16" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-16x16.png")" /> <link rel="icon" type="image/png" sizes="32x32" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-32x32.png")" /> <link rel="icon" type="image/png" sizes="96x96" href="@this.Pageview.CdnWrap("/Files/Images/favicons/favicon-96x96.png")" /> <link rel="apple-touch-icon" sizes="any" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon.png")" /> <link rel="apple-touch-icon" sizes="57x57" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-57x57.png")" /> <link rel="apple-touch-icon" sizes="60x60" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-60x60.png")" /> <link rel="apple-touch-icon" sizes="72x72" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-72x72.png")" /> <link rel="apple-touch-icon" sizes="76x76" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-76x76.png")" /> <link rel="apple-touch-icon" sizes="114x114" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-114x114.png")" /> <link rel="apple-touch-icon" sizes="120x120" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-120x120.png")" /> <link rel="apple-touch-icon" sizes="144x144" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-144x144.png")" /> <link rel="apple-touch-icon" sizes="152x152" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-152x152.png")" /> <link rel="apple-touch-icon" sizes="180x180" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-180x180.png")" /> <link rel="apple-touch-icon-precomposed" href="@this.Pageview.CdnWrap("/Files/Images/favicons/apple-icon-precomposed.png")" /> @if(!String.IsNullOrEmpty(Model.Area.Item.GetString("GoogleAnalytics"))) { <!-- Google Tag Manager --> <script>(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', '@Model.Area.Item.GetString("GoogleAnalytics")');</script> <!-- End Google Tag Manager --> } <script> var hummelCart = { cartConfig: { "separator": "@(currentCulture.NumberFormat.CurrencyGroupSeparator)", "decimal": "@(currentCulture.NumberFormat.CurrencyDecimalSeparator)", "currency": "@(currentCulture.NumberFormat.CurrencySymbol)" }, mainCart: {}, cartObj: { "Cart": @(JsonConvert.SerializeObject(new StandardWebshop.Models.Cart.CartModel(Dynamicweb.Ecommerce.Common.Context.Cart))) } } </script> </head> <body class="sticky-header-desktop @(Model.Area.Item.GetBoolean("SiteHasShopping") ? "" : "no-shopping")"> @if (!String.IsNullOrEmpty(Model.Area.Item.GetString("GoogleAnalytics"))) { <noscript> <iframe src='//www.googletagmanager.com/ns.html?id=@(Model.Area.Item.GetString("GoogleAnalytics"))' height='0' width='0' style='display: none; visibility: hidden'></iframe> </noscript> } <div class="overlay overlay__default"></div> <div class="overlay overlay__mobile-nav"></div> <div class="overlay overlay__desktop-nav"></div> <div class="overlay overlay__filter"></div> @using NORRIQ.Common8.Razor; @using StandardWebshop.CustomCode.Razor @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> @{ int HelpID = Navigation.GetPageIdByNavigationTag("help"); int UserID = Navigation.GetPageIdByNavigationTag("useraccount"); } <header> <section class="pre-header"> <div class="container-fluid"> <div class="row"> <div class="col-sm-4 col-sm-offset-4"> @if (Model.Area.Item.GetBoolean("SiteHasShopping")) { <p class="pre-header__selling-point"> @if (!String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader"))) { var UspLink = Model.Area.Item.GetValue("UspHeaderLink").ToString(); if (!String.IsNullOrEmpty(UspLink)) { <a href="@Model.Area.Item.GetValue("UspHeaderLink")" class="@(!String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader2")) || !String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader3")) ? "usp-rotate usp-header-1" : "usp-single")"> @Model.Area.Item.GetString("UspHeader") </a> } else { <span class="@(!String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader2")) || !String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader3")) ? "usp-rotate usp-header-1" : "usp-single")"> @Model.Area.Item.GetString("UspHeader") </span> } } @if (!String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader2"))) { var UspLink = Model.Area.Item.GetValue("UspHeaderLink2").ToString(); if (!String.IsNullOrEmpty(UspLink)) { <a href="@Model.Area.Item.GetValue("UspHeaderLink2")" class="usp-rotate usp-header-2"> @Model.Area.Item.GetString("UspHeader2") </a> } else { <span class="usp-rotate usp-header-2"> @Model.Area.Item.GetString("UspHeader2") </span> } } @if (!String.IsNullOrEmpty(Model.Area.Item.GetString("UspHeader3"))) { var UspLink = Model.Area.Item.GetValue("UspHeaderLink3").ToString(); if (!String.IsNullOrEmpty(UspLink)) { <a href="@Model.Area.Item.GetValue("UspHeaderLink3")" class="usp-rotate usp-header-3"> @Model.Area.Item.GetString("UspHeader3") </a> } else { <span class="usp-rotate usp-header-3"> @Model.Area.Item.GetString("UspHeader3") </span> } } </p> } </div> <div class="col-sm-4"> @* Top navigation found in the right side of the black header bar *@ <nav class="nav-top"> <ul class="nav-top__list"> <li class="nav-top__item"> <a href="@Navigation.GetUrlByNavigationTag("storefinder")" class="nav-top__anchor">@Translate("Find butik")</a> </li> @if (Model.Area.Item.GetBoolean("SiteHasShopping")) { <li class="nav-top__item"> <a href="#" class="nav-top__anchor nav-top__anchor-dropdown"> @Translate("Hjælp") <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-down-small"></use> </svg> </a> <div class="nav-top__dropdown"> <ul class="nav-top__dropdown-list"> @DwCaching.CacheByArea("HeaderDropdown.xslt:" + HelpID, () => RenderNavigation(new { Template = "HeaderDropdown.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2, ParentId = HelpID })) </ul> </div> </li> <li class="nav-top__item"> @if (Pageview.Security.UserLoggedIn) { <a href="#" class="nav-top__anchor nav-top__anchor-dropdown" data-overlay-id="overlay-login"> @if (!String.IsNullOrEmpty(Pageview.User.FirstName)) { @Pageview.User.FirstName } else if (!String.IsNullOrEmpty(Pageview.User.Name)) { @Pageview.User.Name } else { @Translate("B2C Min konto", "Min konto") } <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-down-small"></use> </svg> </a> <div class="nav-top__dropdown"> <ul class="nav-top__dropdown-list"> @DwCaching.CacheByArea("HeaderDropdown.xslt:" + UserID, () => RenderNavigation(new { Template = "HeaderDropdown.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2, ParentId = UserID })) <li> <a href='/admin/public/extranetlogoff.aspx?ID=@(Pageview.Page.ID)'> @Translate("B2C Log af", "Log off") </a> </li> </ul> </div> } else if (!Pageview.Security.UserLoggedIn && Pageview.IsCurrentUserAllowed) { <a href="#" class="nav-top__anchor overlay-content-trigger" data-overlay-id="overlay-login">@Translate("B2C Log ind", "Login")</a> } </li> } </ul> </nav> @* END Top navigation *@ </div> </div> </div> </section> <section class="header"> <div class="container-fluid"> <div class="row"> <div class="col-md-3 col-xl-3"> @* left side HUMMEL logo *@ <a class="header__logo" href="/"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#logo"></use> </svg> </a> @* END logo *@ </div> <div class="col-md-5 col-xl-6"> @* Primary navigation and mega dropdowns *@ <nav class="nav-main"> <div class="nav-main--mobile-overflow"> @RenderSnippet("PrimaryNavigation") <ul class="nav-main__list"> @if (Model.Area.Item.GetBoolean("SiteHasShopping")) { @*<li class="nav-main__item"> <a href="@Navigation.GetUrlByNavigationTag("favorites")" class="nav-main__anchor nav-main__anchor--lighter">@Translate("Favoritter")</a> </li>*@ <li class="nav-main__item"> <div class="nav-main__anchor nav-main__anchor--lighter nav-main__anchor--has-children"> @Translate("B2C Hjælp", "Hjælp") <svg class="icon icon--xs"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-right-small"></use> </svg> </div> <div class="nav-main__sub-item nav-main__sub-item-level-1"> <div class="nav-main--mobile-overflow"> <button class="nav-main__sub-item-back-button"> <svg class="icon icon--xs"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-left-small"></use> </svg> @Translate("B2C Hjælp", "Hjælp") </button> <div class="nav-main__sub-item-list"> @DwCaching.CacheByArea("HelpMenuMobile.xslt:" + HelpID, () => RenderNavigation(new { Template = "HelpMenuMobile.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2, ParentId = HelpID })) </div> </div> </div> </li> if (!Pageview.Security.UserLoggedIn) { <li class="nav-main__item"> <a href="#" class="nav-main__anchor nav-main__anchor--lighter overlay-content-trigger" data-overlay-id="overlay-login">@Translate("B2C Log ind", "Login")</a> </li> } else { <li class="nav-main__item"> <div class="nav-main__anchor nav-main__anchor--lighter nav-main__anchor--has-children"> @if (!String.IsNullOrEmpty(Pageview.User.FirstName)) { @Pageview.User.FirstName } else if (!String.IsNullOrEmpty(Pageview.User.Name)) { @Pageview.User.Name } else { @Translate("B2C Min konto", "Min konto") } <svg class="icon icon--xs"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-right-small"></use> </svg> </div> <div class="nav-main__sub-item nav-main__sub-item-level-1"> <div class="nav-main--mobile-overflow"> <button class="nav-main__sub-item-back-button"> <svg class="icon icon--xs"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#arrow-left-small"></use> </svg> @if (!String.IsNullOrEmpty(Pageview.User.FirstName)) { @Pageview.User.FirstName } else if (!String.IsNullOrEmpty(Pageview.User.Name)) { @Pageview.User.Name } else { @Translate("B2C Min konto", "Min konto") } </button> <div class="nav-main__sub-item-list"> @DwCaching.CacheByArea("HelpMenuMobile.xslt:" + UserID, () => RenderNavigation(new { Template = "HelpMenuMobile.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2, ParentId = UserID })) <div class="nav-main__sub-item-item"> <a href='/admin/public/extranetlogoff.aspx?ID=@(Pageview.Page.ID)' class="nav-main__anchor nav-main__anchor--light"> @Translate("B2C Log af", "Log off") </a> </div> </div> </div> </div> </li> } } <li class="nav-main__item"> <a href="@Navigation.GetUrlByNavigationTag("storefinder")" class="nav-main__anchor nav-main__anchor--lighter">@Translate("Find butik")</a> </li> @* Shown in footer, so have removed it here - HVK <li class="nav-main__item"> <a href="@Navigation.GetUrlByNavigationTag("country")" class="nav-main__anchor nav-main__anchor--lighter">Danmark</a> </li> *@ </ul> </div><!--//.main-nav--mobile-oveflow end--> </nav> @* END Primary navigation *@ </div> <div class="col-md-4 col-xl-3"> @* Header utlities and tools foound in the right side of the header *@ <div class="header-utilities"> <a href="#" class="header-utilities__anchor search"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#search"></use> </svg> </a> <div class="header-utilities__search"> <div class="header-utilities__search-input-wrap"> <input class="header-utilities__search-input" type="search" placeholder="@(Translate("B2C Søg", "Søg"))" /> <button class="header-utilities__search-button" type="submit" data-url="/api/search/lookup/2" data-result-url="@Navigation.GetUrlByNavigationTag("search")"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#search"></use> </svg> </button> <span class="triangle"></span> </div> <div class="header-utilities__search-dropdown"> <div class="header-utilities__search-dropdown-wrap"> <div class="header-utilities__search-dropdown-categories"> </div> <div class="header-utilities__search-dropdown-products"> </div> <div class="header-utilities__search-dropdown-inspiration"> </div> </div> </div> <button type="button" class="header-utilities__search-dropdown-close btn-close"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#close-big"></use> </svg> </button> </div> @if (Model.Area.Item.GetBoolean("SiteHasShopping")) { @* #Favorite not part of Fase 1# <a href="#" class="header-utilities__anchor favorite-icon"> <svg class="icon favorite-icon__clear"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#favorit-stroke"></use> </svg> <svg class="icon favorite-icon__filled"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#favorit-full"></use> </svg> </a> *@ <a href="@Navigation.GetUrlByNavigationTag("cart")" class="header-utilities__anchor cart"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#shopping-cart"></use> </svg> <span class="number"> <span data-count="@cartQty" hummel-text="Cart.Items | quantity"></span> </span> </a> } else { <div class="header-utilities__anchor cart">&nbsp;</div> } <button class="header-utilities__burger-button" type="button"> <span></span> <span></span> <span></span> </button> </div> @* END Header utlities *@ </div> </div> </div> </section> </header> <main class="main main__@(Model.ItemType.ToLower())"> @RenderSnippet("content") </main> @if (Model.Area.Item.GetBoolean("SiteHasShopping")) { @Pageview.RenderParagraphCachedCrossUsers(FooterParagraph) if (!Pageview.Security.UserLoggedIn && Pageview.IsCurrentUserAllowed) { @Pageview.RenderParagraphCachedCrossUsers(LoginParagraph) } <section class="cart cart--mini cart--mini-mobile-layout"> <div class="cart__content"> @* Only the following should be included if there are no items in the basket, and also *@ <div hummel-show="Cart.Items | empty" class="cart__no-products"> <p class="headline headline--small">@Translate("B2B Der er ingen produkter i kurven", "Der er ingen produkter i kurven")</p> </div> <span hummel-hide="Cart.Items | empty"> @* Cart Products ---------------------------------------------------------------------------------------- Product elements to be updated: - Image: ".cart-products-item__image img src" - Name: ".cart-products-item__name" - Link: ".cart-products-item__link" - Size: ".cart-products-item__size" - Id: ".cart-products-item__id" - Quantity: ".quantity-input__input" - Price: ".cart-products-item__price-full", ".cart-products-item__price-new" and ".cart-products-item__price-old". Expected behaviors -- TO DO: Make product a favorite -- If ".cart-products-item__button-favorite" is already a favorite add the following class ".cart-products-item__button-favorite--active". Update product quantity -- AJAX updates quantity and the following prices, Full price: ".cart-products-item__price-full" New price: ".cart-products-item__price-new" Subtotal price: ".cart__summary-table-subtotal-price" Discounted price: ".cart__summary-table-discount-price" Total price: ".cart__summary-table-total-price" Remove product from order -- Removes synchronously the product from the order and updates the subtotal, discounted and total price, a page reload is expected. ".cart-products-item__button-close" Out-of-stock -- If product is out of stock add class "cart-products-item__quantity--out-of-stock" onto the ".cart-products-item__quantity" element, so feedback is provided. *@ <ul class="cart-products" data-simplebar> @* .cart-products-item START *@ <li class="cart-products-item" hummel-each-item="Cart.Items"> <div class="cart-products-item__image"> <a hummel-href="item.Url"> <img hummel-src="item.Image" hummel-alt="item.Name"> </a> </div> <div class="cart-products-item__text"> <div class="clearfix"> @* .cart-products-item__info START *@ <input type="hidden" id="Number" hummel-value="item.Number"> <input type="hidden" id="Variant" hummel-value="item.Variant"> <div class="cart-products-item__info"> <h3 class="cart-products-item__name-wrap"> <a hummel-href="item.Url" class="cart-products-item__link"><span class="cart-products-item__name" hummel-text="item.Name"></span></a> </h3> <p class="cart-products-item__size-wrap">@Translate("B2C Størrelse", "Størrelse"): <span class="cart-products-item__size" hummel-text="item.Size"></span></p> <p class="cart-products-item__color-wrap">@Translate("B2C Farve", "Farve"): <span class="cart -products-item__color" hummel-text="item.Colour"></span></p> <p class="cart-products-item__id-wrap">@Translate("B2C Varenr", "Varenr."): <span class="cart-products-item__id" hummel-text="item.PrettyNumber"></span></p> <div class="cart-products-item__button"> <button data-remove-url="/API/Cart/RemoveItem" type="button" class="cart-products-item__button-close"> <svg class="icon"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#close-big"></use> </svg> <span>@Translate("B2C Fjern", "Fjern")</span> </button> @*<button hummel-unless="item.Favourite" data-url="/favadd" type="button" class="cart-products-item__button-favorite"> <svg class="icon favorite-icon__clear"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#favorit-stroke"></use> </svg> <span>@Translate("B2C Tilføj til favoritliste", "Tilføj til favoritliste")</span> </button> <button hummel-if="item.Favourite" data-url-remove="/favremove" type="button" class="cart-products-item__button-favorite cart-products-item__button-favorite--active"> <svg class="icon favorite-icon__filled"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/dist/icons/icons.svg#favorit-full"></use> </svg> <span>@Translate("B2C Fjern fra favoritliste", "Fjern fra favoritliste")</span> </button>*@ </div> </div> @* .cart-products-item__info END *@ <div class="cart-products-item__quantity"> <div class="quantity-input" data-url="/API/Cart/UpdateQuantity"> <label>@Translate("B2C Antal", "Antal"):</label> <input class="quantity-input__input" type="text" hummel-value="item.Qty"> <button type="button" class="quantity-input__less-btn">-</button> <button type="button" class="quantity-input__more-btn">+</button> </div> <div class="cart-products-item__feeback" hummel-forceshow="item.QtyBefore"> <p>@Translate("B2C Det er ikke flere på lager", "Det er ikke flere på lager")</p> </div> </div> @* .cart-products-item__add END *@ @* .cart-products-item__price START *@ <div class="cart-products-item__price"> <p hummel-show="item.Discount | > 0" class="cart-products-item__price-new"> <span hummel-text="item.Discount | current"></span> @Pageview.Area.EcomCurrencyId </p> <p hummel-show="item.Discount | > 0" class="cart-products-item__price-old"> <span hummel-text="item.Price | currency"></span> @Pageview.Area.EcomCurrencyId </p> <p hummel-show="item.Discount | < 1" class="cart-products-item__price-full"> <span hummel-text="item.Price | currency"></span> @Pageview.Area.EcomCurrencyId </p> @* There are 3 variations in price presentation: <p class="cart-products-item__price-full">750 kr</p> <p class="cart-products-item__price-new">400 kr</p> <p class="cart-products-item__price-old">800 kr</p> *@ </div> @* .cart-products-item__price END *@ </div> </div> </li> @* .cart-products-item END *@ </ul> @using NORRIQ.Common8.Razor; @{ var showButton = Pageview.Page.NavigationTag == "cart-login" || Pageview.Page.NavigationTag == "checkout"; } <style> .standard { color: peachpuff; } </style> @* Cart Summary ---------------------------------------------------------------------------------------- Expected behaviors -- TO DO: Discount code --- The discount form (#discount-code-form) should be submitted synchronously, the following elements must be updated on page reload: ".cart__summary-table-subtotal-price", ".cart__summary-table-discount-price", ".cart__summary-table-total-price" ".cart__price-to-free-delivery" *@ <div class="cart__summary"> <p class="cart__summary-header">@Translate("B2C Ordreoversigt", "Ordreoversigt")</p> <div class="cart__summary-content"> <table class="cart__summary-table"> <tbody> <tr> <td class="cart__summary-table-subtotal"> @Translate("B2C Subtotal", "Subtotal") </td> <td class="cart__summary-table-subtotal"> <span class="cart__summary-table-subtotal-price" hummel-text="Cart.Summary.Amount | currency">1600</span> @Pageview.Area.EcomCurrencyId </td> </tr> <tr hummel-each-detail="Cart.Summary.Details"> <td hummel-if="detail | single" colspan="2" style="font-weight: 600;" hummel-text="detail | itemat 0"></td> <td hummel-if="detail | double" hummel-text="detail | itemat 0"></td> <td hummel-if="detail | double" class="cart__summary-table-delivery"> <span hummel-if="detail | isdiscount" class="cart__summary-table-discount"> <span class="cart__summary-table-discount-price" hummel-text="detail | itemat 1"></span> <span hummel-if="detail | addcurrency"></span> @Pageview.Area.EcomCurrencyId </span> <span hummel-hide="detail | isdiscount " class="cart__summary-table-delivery-price"> <span hummel-text="detail | itemat 1"></span> <span hummel-if="detail | addcurrency"></span> @Pageview.Area.EcomCurrencyId </span> </td> </tr> <tr class="show-mini-cart"> <td class="cart__summary-table-total"> @Translate("B2C Total", "Total") </td> <td class="cart__summary-table-total"> <span> <span class="cart__summary-table-total-price" hummel-text="Cart.Summary.Total | currency">@*@cart.Summary.Total.ToString("N2", currentCulture)*@ </span> @Pageview.Area.EcomCurrencyId </span> <span class="cart__summary-table-total-tax">@Translate("B2C inkl. moms", "inkl. moms")</span> </td> </tr> <tr class="@(showButton ? "show-mini-cart hidden":"show-mini-cart")"> <td colspan="2"> <a href="@(Pageview.Security.UserLoggedIn ? Navigation.GetUrlByNavigationTag("checkout") : Navigation.GetUrlByNavigationTag("cart-login"))" class="btn"> @Translate("Gå til kassen") </a> <a href="@Navigation.GetUrlByNavigationTag("cart")" class="btn-clear cart__summary-go-to-cart-btn"> <span>@Translate("B2C Gå til kurv", "Gå til kurv")</span> </a> </td> </tr> </tbody> </table> </div> </div> </span> </div> </section> if (!Pageview.Security.UserLoggedIn) { @Pageview.RenderParagraphCachedCrossUsers(PasswordParagraph) } } else { @Pageview.RenderParagraphCachedCrossUsers(FooterParagraph) } @if (System.Web.HttpContext.Current.Request.Url.Host.Equals("localhost")) { <script src="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/scripts/vendor.min.js")"></script> <script src="@StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/scripts/master.min.js")"></script> } else { <script src="@this.Pageview.CdnWrap(StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/scripts/vendor.min.js"))"></script> <script src="@this.Pageview.CdnWrap(StandardWebshop.CustomCode.Razor.TimestampSource.GetSourceWithTimestamp("/dist/scripts/master.min.js"))"></script> } @* Below is for langauge picker *@ @if (System.Web.HttpContext.Current.Request.Cookies["language-selected"] == null && Pageview.Device != DeviceType.Bot && !string.Equals(System.Web.HttpContext.Current.Request.QueryString["skipmodal"],"true")) { <div id="language-picker" data-url="@System.Web.HttpContext.Current.Request.Url.PathAndQuery"></div> } @SnippetStart("PrimaryNavigation") @DwCaching.CacheByArea("PrimaryNavigation.xslt", () => RenderNavigation(new { Template = "PrimaryNavigation.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 3, GroupPage = Navigation.GetPageIdByNavigationTag("groups") })) @SnippetEnd("PrimaryNavigation") </body> </html> </text> } @*Dynamicweb does not allow multiple @ContentPlaceholdes in includefiles even though only one is included. By having it in a snippet and rendering it, we work around the issue. *@