Exception in template (Designs/StandardWebshop/_parsed/StandardPage.parsed.cshtml): System.ArgumentNullException: Value cannot be null.
Parameter name: source
   at System.Linq.Enumerable.Where[TSource](IEnumerable`1 source, Func`2 predicate)
   at NORRIQ.Seo.UrlProvider.NorriqEcomProvider.GetMappings()
   at Dynamicweb.Frontend.UrlProviders.Handler.GetUrls()
   at Dynamicweb.Frontend.UrlProviders.Handler.Initialize()
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.MakeGroupTree(GroupCollection groups, NavigationItem parentNode, Int32 thisLevel, Int32 maxLevel, Page productPage, IDictionary`2 groupsProductCounts)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.MakeGroupTree(Page page, NavigationItem parentNode, Boolean applyStartAndEndLevelToNavigation)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.Process(NavigationItem node, Boolean applyStartAndEndLevelToNavigation)
   at Dynamicweb.Ecommerce.Frontend.NavigationProviders.GroupNavigationProvider.Process(NavigationItem node, Boolean applyStartAndEndLevelToNavigation)
   at Dynamicweb.Frontend.XmlNavigation.MakeXml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, Int32 selectedAreaId)
   at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(Int32 parentId, Int32 levelStart, Int32 levelStop, Expand expand, String name, String xsltPath, Int32 selectedAreaId, Boolean sitemapMode, NameValueCollection settings, NameValueCollection attributes, IncludeMode mode)
   at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(NameValueCollection settings, NameValueCollection attributes)
   at NORRIQ.Common8.Caching.CacheItemContainer.BuildItem[T](Func`1 buildmethod, Type dependencyType)
   at NORRIQ.Common8.Caching.HttpCache.GetOrInsert[T](String cacheKey, Func`1 buildCacheDependency, Func`1 buildNewItem)
   at NORRIQ.Common8.Caching.HttpCache`1.GetOrInsert[T](String cacheKey, Func`1 buildNewItem)
   at NORRIQ.Common8.Caching.AreaCache.GetOrInsert[T](String cacheKey, Func`1 buildNewItem)
   at NORRIQ.Common8.Caching.DwCaching.CacheByPage(String cacheKey, Func`1 buildFunc)
   at CompiledRazorTemplates.Dynamic.cbaaccbbecbbcab.b__1(TextWriter __razor_helper_writer)
   at RazorEngine.Templating.TemplateWriter.WriteTo(TextWriter writer)
   at RazorEngine.Templating.TemplateBase.Write(TemplateWriter helper)
   at CompiledRazorTemplates.Dynamic.cbaaccbbecbbcab.Execute()
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context)
   at RazorEngine.Templating.TemplateService.Run(ITemplate template, DynamicViewBag viewBag)
   at RazorEngine.Templating.TemplateService.Parse(String razorTemplate, Object model, DynamicViewBag viewBag, String cacheName)
   at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()
@inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> @using NORRIQ.Common8.Caching @using NORRIQ.Common8.Context @using NORRIQ.Common8.Factory @using NORRIQ.Common8.Razor; @{ var watermark2 = Model.Area.Item.GetFile("Watermark") ?? new Dynamicweb.Frontend.FileViewModel(); } <!DOCTYPE html> <html lang="@Pageview.Area.Culture"> <head> <title>@Model.Title</title> @if (Model.Area.Item.GetBoolean("NoIndex")) { <meta name="robots" content="noindex, nofollow" /> <!-- TODO: remove on launch--> } <meta charset='utf-8' /> <meta name="description" content='@Model.Description' /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no" /> <link rel="shortcut icon" href="/Files/Images/Website/favicon.ico" /> <link href="@NORRIQ.Common8.Razor.TimestampSource.GetSourceWithTimestamp("/dist/css/accelerator/style-min.css")" rel='stylesheet' /> @if (Model.Area.Item.GetList("Tracking_Provider").SelectedValue == "GTM") { @Model.Area.Item.GetString("GTM_Header_Script") } <!--[if IE]> <style>.productlist-grid { float: left; }</style> <![endif]--> <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> </head> <body data-is-desktop="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop ? "true" : "false")" data-is-tablet="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Tablet ? "true" : "false")" data-is-phone="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Mobile ? "true" : "false")"> @if (Model.Area.Item.GetList("Tracking_Provider").SelectedValue == "GTM") { @Model.Area.Item.GetString("GTM_BodyIFrame") } @* We need to render header in a snippet else the minicart wont be updated in cart *@ @RenderSnippet("Header") @{ var itemSettings = ObjectFactory.GetInstance<AreaItemSettings>(); bool newsLetterShowOnAllPages = itemSettings.GetCurrentAreaValue<bool>("NewsletterShowOnAllPages"); string newsLetterParagraphLink = itemSettings.GetCurrentAreaValue<string>("NewsletterParagraphLink"); int newsletterParagraphId = 0; if (newsLetterShowOnAllPages && int.TryParse(newsLetterParagraphLink, out newsletterParagraphId) && newsletterParagraphId > 0) { @RenderParagraphContent(newsletterParagraphId) } } @using Dynamicweb.Ecommerce.Products @using Dynamicweb.Frontend; @using NORRIQ.Common8.Caching @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> @Title("Standard Page") @Description("Page Template") @{ var image = Model.Item.GetFile("PageImage"); var imageheight = Model.Item.GetValue<ListViewModel>("ImageHeight").SelectedValue; //var backgroundcolor = Model.Item.GetValue<ListViewModel>("BackgroundColor").SelectedValue; var PageText = Model.Item.GetString("Text"); var PageType = Model.Item.GetValue<ListViewModel>("PageType").SelectedValue; // If Password is enabled on page PageType is empty so set it to default if (string.IsNullOrEmpty(PageType)) { PageType = "fixed"; } var ecomquery = @System.Web.HttpContext.Current.Request.QueryString["ecomQuery"]; var prodid = @System.Web.HttpContext.Current.Request.QueryString["productid"]; var groupid = @System.Web.HttpContext.Current.Request.QueryString["groupid"]; var padding = "padding"; //var watermark2 = Model.Area.Item.GetFile("Watermark"); } @*@SnippetStart("watermark") <img class="watermark2" src="@watermark2.Path" alt="" /> @SnippetEnd("watermark")*@ @if (Model.PropertyItem.GetBoolean("NoPadding")) { padding = "no-padding"; } @if (!Pageview.IsCurrentUserAllowed && !Pageview.Security.UserLoggedIn) { @*<main data-page-type="protected"> <div class="container"> <h1 class="title-styled" data-align="center"> @Model.Area.Item.GetString("RestrictedTitle") </h1> <div class="row-flex"> @if (!String.IsNullOrEmpty(Model.Area.Item.GetString("NewUserText"))) { <div class="col-xs-12 col-sm-6 col-md-5 col-md-offset-1" data-display="flex"> <div data-align="left" data-content-border="boxed" data-content-type="box"> @Model.Area.Item.GetString("LoginText") @using NORRIQ.Common8.Razor; <form name="ExtUserForm" id="loginForm" method="post" data-pageId="@Pageview.Page.ID" class="form" role="form" action="/API/Account/Login"> <div class="form-group"> <label for="Username">@Translate("Username")</label> <input id="Username" data-bind="value: username" name="Username" type="text" value="" class="form-control" autocomplete="off"> </div> <div class="form-group"> <label for="Password">@Translate("Password")</label> <input id="Password" data-bind="value: password" name="Password" type="password" value="" class="form-control" autocomplete="off"> </div> <div class="form-group"> <div span id="loginFeedback" data-bind="if: ($root.loginError() || $root.loginFailed())"> <p data-bind="if: $root.loginError" class="user-login-error">@Translate("An error occured!")</p> <p data-bind="if: $root.loginFailed" class="user-login-error">@Translate("Username or password is incorrect!")</p> </div> <button type="submit" role="button" class="btn btn-primary btn-block" id="loginBtn"> <span data-bind="ifnot: $root.loggingIn"> @Translate("Sign in") </span> <span data-bind="if: $root.loggingIn"> <i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Signing in") </span> </button> </div> <ul class="form-login-links"> <li> <a href="@Navigation.GetUrlByNavigationTag("forgot-password")">@Translate("Forgot password")</a> </li> <li> <a href="@Navigation.GetUrlByNavigationTag("new-user")">@Translate("Register user")</a> </li> </ul> </form> </div> </div> <div class="col-xs-12 col-sm-6 col-md-5" data-display="flex"> <div data-align="left" data-content-border="boxed" data-content-type="box"> @Model.Area.Item.GetString("NewUserText") </div> </div> } else { <div class="col-xs-12 col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4" data-display="flex"> <div data-align="left" data-content-border="boxed" data-content-type="box"> @Model.Area.Item.GetString("LoginText") @using NORRIQ.Common8.Razor; <form name="ExtUserForm" id="loginForm" method="post" data-pageId="@Pageview.Page.ID" class="form" role="form" action="/API/Account/Login"> <div class="form-group"> <label for="Username">@Translate("Username")</label> <input id="Username" data-bind="value: username" name="Username" type="text" value="" class="form-control" autocomplete="off"> </div> <div class="form-group"> <label for="Password">@Translate("Password")</label> <input id="Password" data-bind="value: password" name="Password" type="password" value="" class="form-control" autocomplete="off"> </div> <div class="form-group"> <div span id="loginFeedback" data-bind="if: ($root.loginError() || $root.loginFailed())"> <p data-bind="if: $root.loginError" class="user-login-error">@Translate("An error occured!")</p> <p data-bind="if: $root.loginFailed" class="user-login-error">@Translate("Username or password is incorrect!")</p> </div> <button type="submit" role="button" class="btn btn-primary btn-block" id="loginBtn"> <span data-bind="ifnot: $root.loggingIn"> @Translate("Sign in") </span> <span data-bind="if: $root.loggingIn"> <i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Signing in") </span> </button> </div> <ul class="form-login-links"> <li> <a href="@Navigation.GetUrlByNavigationTag("forgot-password")">@Translate("Forgot password")</a> </li> <li> <a href="@Navigation.GetUrlByNavigationTag("new-user")">@Translate("Register user")</a> </li> </ul> </form> </div> </div> } </div> </div> </main>*@ } else { if (image != null) { <div class="pageimage" style="background-image:url(@image.Path);height:@imageheight;">@RenderSnippet("watermark")</div> } @RenderBreadcrumb() <main class="page-content @padding" data-page-type="@PageType"> @if (PageType == "fixed") { @RenderNavigation() <div class="container"> <div class="row-flex"> <div class="col-xs-12"> @RenderHeader() @RenderPageText() @RenderPrimary() </div> </div> </div> } else if (PageType == "ecom") { <main class="" data-page-type="fluid"> @RenderPageText() @RenderPrimary() </main> } else if (PageType == "ecomstatic") { <div class="container"> <main class="padding" data-page-type="fluid"> <div class="row"> <div class="col-xs-12 col-sm-3"> <nav id="desktop-menu"> @DwCaching.CacheByPage("nav-sidebar-ecomstatic.xslt", () => RenderNavigation(new { Template = "nav-sidebar-ecomstatic.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4 })) </nav> </div> <div class="col-xs-12 col-sm-9"> @RenderPageText() @RenderPrimary() </div> </div> </main> </div> } else if (PageType == "wide") { @RenderNavigation() <main class="" data-page-type="fluid"> <div class="container"> <div class="row"> @RenderHeader() @RenderPageText() </div> </div> <div class="multi"> @RenderPrimary() </div> </main> } </main> } @* Default content for pages *@ @helper RenderPrimary() { if (!String.IsNullOrEmpty(Model.Placeholder("Primary"))) { @Model.Placeholder("Primary", "Content", "unwrap:true;default:true") } } @helper RenderNavigation() { if (!Model.PropertyItem.GetBoolean("HideNavigation")) { <div class="horiz-nav"> <div class="container"> <div class=""> <nav id="desktop-menu"> @DwCaching.CacheByPage("nav-sidebar.xslt", () => RenderNavigation(new { Template = "nav-sidebar.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 4 })) </nav> </div> </div> </div> } } @helper RenderBreadcrumb() { // Model.PropertyItem may sometimes be null, thus we must check for it. if (Model.PropertyItem != null) { if (!Model.PropertyItem.GetBoolean("HideBreadcrumb")) { <nav class="clearfix breadcrumb-container"> <div class="container"> <div class="col-xs-12"> <ol class="breadcrumb"> @RenderSnippet("BreadCrumb") </ol> </div> </div> </nav> } } } @helper RenderHeader() { var TitleStyle = Model.Item.GetValue<ListViewModel>("TitleStyle").SelectedValue; if (TitleStyle != "hidden") { <div class="col-xs-12 pageheader"> <header> <h1 class="@TitleStyle"> @Model.Item.GetString("Title") </h1> </header> </div> } } @helper RenderPageText() { if (!String.IsNullOrEmpty(Model.Item.GetString("Text"))) { <div class="col-xs-12"> <div class="pagetext"> @Model.Item.GetString("Text") @if (!String.IsNullOrEmpty(Model.Item.GetString("Link")) && !String.IsNullOrEmpty(Model.Item.GetString("LinkText"))) { var btnstyle = Model.Item.GetBoolean("Styled") ? "btn-default" : "btn-primary"; var target = Model.Item.GetBoolean("Blank") ? "_blank" : ""; <p> <a class="btn @btnstyle" target="@target" href="@Model.Item.GetString("Link")"> @Model.Item.GetString("LinkText") </a> </p> } </div> </div> } } @DwCaching.CacheByArea("ItemList_Footer", () => RenderItemList(new { ItemType = "Footer", ListSourceType = "SelfArea", ItemFieldsList = "*", IncludeParagraphItems = true, IncludeAllChildItems = true, ListOrderBy = "Sort", ListTemplate = "ItemPublisher/List/Footer.cshtml", ListPageSize = "100", }).ToString()) <script append="true"> $(document).ready(function () { var login = new AppStart.Login({ $loginForm: $("#loginForm") }); login.init(); }) </script> @NORRIQ.Common8.Razor.TimestampSource.GetJavaScriptWithTimestamp("/dist/scripts/bundle.min.js") @{ var locale = Pageview.Area.Culture.Split('-').FirstOrDefault() ?? ""; } <script append="true"> $(document).ready(function () { var jqueryValidatelocalization = new AppStart.JqueryValidateLocalizationManager(); jqueryValidatelocalization.LoadLocale("@locale.ToUpper()"); var jqueryUilocalization = new AppStart.JqueryUiLocalizationManager(); jqueryUilocalization.LoadLocale("@locale.ToUpper()"); }) </script> @if (Model.Area.Item.GetList("Tracking_Provider").SelectedValue == "GA") { if (!String.IsNullOrEmpty(Model.Area.Item.GetString("Google"))) { <script> (function(i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function() { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); ga('create', '@Model.Area.Item.GetString("Google")', 'auto'); ga('send', 'pageview'); </script> } } <script append="replace"></script> @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> <script type="text/x-template" id="modal-component-template"> <div> <button style="display:none" :id="'modalBtn'+uniqueId" type="button" data-toggle="modal" :data-target="'#modal'+uniqueId">Launch modal</button> <div :id="'modal'+uniqueId" class="modal fade" tabindex="-1" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content"> <slot name="modal"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <slot name="title" v-bind:obj="obj"> <h4 class="modal-title">default title</h4> </slot> </div> <div class="modal-body"> <slot name="body" v-bind:obj="obj"> <slot v-if="!isAccepted" name="msg" v-bind:obj="obj"> <p>message to user</p> </slot> <slot v-if="isAccepted" name="msg-is-accepted"> <p>@Translate("confirm_accepted", "Operation was successfully done")</p> </slot> <slot v-if="!isAccepted && error" name="msg-error"> <p>@Translate("confirm_error", "An error occurred, please try again.")</p> </slot> </slot> </div> <slot name="footer"> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal" @@click="emitCancel($event, obj)">@Translate("modal_close", "close")</button> <button v-if="!isAccepted" type="button" class="btn btn-primary" @@click="emitAccept($event,obj)">@Translate("modal_savechanges", "save changes")</button> </div> </slot> </slot> </div><!-- /.modal-content --> </div><!-- /.modal-dialog --> </div><!-- /.modal --> </div> </script> <!--<script type="text/x-template" id="modal-component-template"> <div> <div style="display:none"> <button :id="'modalBtn'+uniqueId" type="button" data-toggle="modal" :data-target="'#modal'+uniqueId">Launch modal</button> </div> <div :id="'modal'+uniqueId" class="modal fade" tabindex="-1" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <slot name="title" v-bind:obj="obj"> <h4 class="modal-title">default title</h4> </slot> </div> <div class="modal-body"> <slot v-if="!isAccepted" name="msg" v-bind:obj="obj"> <p>message to user</p> </slot> <slot v-if="isAccepted" name="msg-is-accepted"> <p>@Translate("confirm_accepted", "Operation was successfully done")</p> </slot> <slot v-if="!isAccepted && error" name="msg-error"> <p>@Translate("confirm_error", "An error occurred, please try again.")</p> </slot> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal" @@click="emitCancel($event, obj)">@Translate("modal_close", "close")</button> <button v-if="!isAccepted" type="button" class="btn btn-primary" @@click="emitAccept($event,obj)">@Translate("modal_savechanges", "save changes")</button> </div> </div>--> <!-- /.modal-content --> <!--</div>--><!-- /.modal-dialog --> <!--</div>--><!-- /.modal --> <!--</div> </script>--> <script type="text/javascript"> AppStart.VueProvider.init(); </script> <div class="modal fade" tabindex="-1" role="dialog" id="languages"> <div class="modal-dialog modal-sm" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <h4 class="modal-title">@Translate("Change language", "Change language")</h4> </div> <div class="modal-body"> @if (Model.Languages.Any()) { var areaService = NLWI.Core.Factory.ObjectFactory.GetInstance<Dynamicweb.Content.AreaService>(); foreach (var lang in Model.Languages) { var area = areaService.GetArea(lang.ID); var Domain = lang.PrimaryDomain; if (string.IsNullOrEmpty(Domain)) { Domain = area.Domain.Split(new char[0]).First(); } var Flag = "flag_" + lang.Culture.Split('-').Last() + ".png"; <a href='//@Domain'> <img src="/Admin/Images/Flags/@Flag" alt="@lang.Culture.Split('-').Last()-Flag" class="img-responsive lang-select" /> </a> } } </div> </div> </div> </div> @*DW Hack, because ecom nav need to be rendered after ContentPlaceHolder() when using the new viewmodels WTF*@ @* We need to render header in a snippet else the minicart wont be updated in cart *@ @SnippetStart("BreadCrumb") @DwCaching.CacheByPage("breadcrumb.xslt", () => RenderNavigation(new { Template = "breadcrumb.xslt", StartLevel = 1, EndLevel = 3 })) @SnippetEnd("BreadCrumb") @SnippetStart("Header") @using NORRIQ.Common8.Razor; @using Dynamicweb @using Dynamicweb.Ecommerce.Common; @using Dynamicweb.Ecommerce.Orders @using Dynamicweb.Ecommerce.Prices @using Newtonsoft.Json @using NORRIQ.Common8.Caching @using NORRIQ.Common8.Factory @using StandardWebshop.CustomCode.Basket.Models @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> @{ var isCartEmpty = (Dynamicweb.Ecommerce.Common.Context.Cart == null || Dynamicweb.Ecommerce.Common.Context.Cart.OrderLines.Count == 0); var cart = new BasketInfo(Dynamicweb.Ecommerce.Common.Context.Cart); var watermark = Model.Area.Item.GetFile("Watermark"); } <header class="header-default"> @if (watermark != null) { <div class="watermark-wrap"> <img class="watermark" src="@watermark.Path" alt="" /> </div> } <div class="header-default-top"> <div class="container"> <div class="header-default-helper"> @*<a href="#languages" data-toggle="modal" class="culture"> <img src='@Pageview.Area.Flag16X16' width="16" alt='@Pageview.Area.Culture.Split('-').Last()-Flag' /> <span>@Pageview.Area.CultureInfo.NativeName.Split('(').First()</span> </a>*@ @if (Pageview.Security.UserLoggedIn) { <span class="header-default-user"> <span class="header-default-username"><i class="icon-user" aria-hidden="true"></i> @Pageview.User.Name - </span> <a href='/admin/public/extranetlogoff.aspx?ID=@(Pageview.Page.ID)'> @Translate("Sign out") </a> </span> } </div> @if (Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop || Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Tablet) { @DwCaching.CacheByArea("navbar-nav-secondary-inline.xslt", () => RenderNavigation(new { Template = "navbar-nav-secondary-inline.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 3 })) } </div> </div> <div class="container"> <div class="header-default-logo"> <a href="/" title='@Translate("Go to frontpage", "Go to frontpage")'> @{ var logo = Model.Area.Item.GetFile("Logo"); if (logo != null) { <img class="" src="@logo.Path" alt='@Translate("Website Logo Alttext", "Standard Webshop")' /> } else { <i>No logo found, please configure it in the Dynamicweb Administration</i> } } </a> </div> <div class="callus">@Translate("Tlf. 63 41 12 66")</div> <ul class="nav navbar-nav header-default-nav"> <li class="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Mobile ? "dropdown dropdown-icon dropdown-mobile" : "header-default-search")"> @if (Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Mobile) { <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> <i class="icon-search"></i> <span class="dropdown-label">@Translate("Search", "Search")</span> </a> <div class="dropdown-menu"> @using NORRIQ.Common8.Razor; @{ var searchLabel = Translate("Search products"); var searchResultPageId = Navigation.GetPageIdByNavigationTag("search"); var searchQuery = @System.Web.HttpContext.Current.Request.QueryString["ecomQuery"]; } <div class="form-search" id="instantsearch"> <form class="form form-search-form" id="search-form" action="/Default.aspx" method="get"> <input type="hidden" value="@searchQuery" id="searchstring"> <input type="hidden" name="ID" value="@searchResultPageId" /> <label for="searchTerm" class="sr-only"> @searchLabel </label> <div class="input-group"> <input type="search" class="form-control" id="searchTerm" name="eComQuery" placeholder="@searchLabel" autocomplete="off" data-tabindex="0" value="@searchQuery" /> <span class="input-group-btn"> <button type="submit" id="instantSearchBtn" class="btn btn-default js-search-btn"> <i id="instantSearchIcon" class="icon-search" aria-hidden="true"></i><span class="sr-only">@Translate("Search")</span> </button> </span> </div> </form> <div class="form-search-collapse collapse" id="search-result-foldout"> <div class="form-search-result" id="search-result-container"></div> </div> </div> <script type="text/x-jsrender" id="quicksearchtemplate"> <table class="table table-condensed productlist-table"> <tbody> {{for Products}} <tr data-product-id="{{:Id}}" data-product-key='{{:AutoAddProductKey}}' data-product-language-id="{{:LanguageId}}"> @if (Pageview.Security.UserLoggedIn) { <td class="productlist-table-thumb text-center" width="70"> <img src="/Admin/Public/GetImage.ashx?Image={{:ThumbnailImageName}}&amp;Width=60&amp;Height=60&amp;Crop=5&amp;Compression=80" height="60" class="img-responsive" alt="{{:ThumbnailImageAltText}}" /> </td> <td class="productlist-table-product"> <a href="{{:Link}}" class="productlist-table-name"> {{:Name}} </a> <div class="clearfix"> <div class="pull-left text-small"> @Translate("Product Number"): {{:Number}}<br /> @Translate("Price"): {{:UnitPrice}} </div> <div class="productlist-table-quantity pull-right"> <div class="input-group"> <input type="text" class="form-control qty-input text-center js-qs-qty-input" value="{{:QtyInBasket}}" onclick="this.focus(); this.select();" data-tabindex="{{:#index + 1}}" /> <span class="input-group-addon qty-input-user-feedback js-qs-qty-input-feedback"> {{if QtyInBasket > 0}} <i class="icon-added"></i> {{else}} <i class="icon-minicart"></i> {{/if}} </span> </div> </div> </div> </td> } else { <td class="productlist-table-thumb text-center" width="70"> <img src="/Admin/Public/GetImage.ashx?Image={{:ThumbnailImageName}}&amp;Width=60&amp;Height=60&amp;Crop=5&amp;Compression=80" height="60" class="img-responsive" alt="{{:ThumbnailImageAltText}}" /> </td> <td class="productlist-table-product"> <a href="{{:Link}}" class="productlist-table-name"> {{:Name}} </a> </td> } </tr> {{/for}} </tbody> </table> {{if MoreResults}} <a href="{{:LinkToFullResults}}" class="btn btn-primary btn-sm">@Translate("Show all results") ({{:NumberOfResults}})</a> {{/if}} </script> <script type="text/x-jsrender" id="quicksearchloadingtemplate"> <p class="product-search-label"> <i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Searching") </p> </script> <script type="text/x-jsrender" id="noquerytemplate"> <p class="product-search-label"><i class="icon-keyboard" aria-hidden="true"></i> @Translate("Start typing to search")</p> </script> <script type="text/x-jsrender" id="failedsearchtemplate"> <p class="product-search-label"><i class="icon-warning" aria-hidden="true"></i> @Translate("An error occured")</p> </script> <script type="text/x-jsrender" id="noresultstemplate"> <p class="product-search-label"><i class="icon-warning" aria-hidden="true"></i> @Translate("Search found no products")</p> </script> <script type="text/x-jsrender" id="qsautoaddfeedbackloading"> <i class="icon-async icon-pulse"></i> </script> <script type="text/x-jsrender" id="qsautoaddfeedbacksuccess"> <i class="icon-added" title="@Translate("Product added to cart")"></i> </script> <script type="text/x-jsrender" id="qsautoaddfeedbackerror"> {{if error == "badinput"}} <i class="icon-warning" title="@Translate("Please enter a numerical value")"></i> {{else error == "servererror"}} <i class="icon-warning" title="@Translate("An server error occured your cart was not updated")"></i> {{else}} <i class="icon-warning"></i> {{/if}} </script> <script append="true"> $(document).ready(function() { var instantSearch = new AppStart.InstantSearch({ WaitTime: 250, $SearchResultTemplate: $('#quicksearchtemplate'), $SearchInput: $('#searchTerm'), $ResultContainer: $('#search-result-container'), $ResultLoadingTemplate: $('#quicksearchloadingtemplate'), $NoQueryTemplate: $('#noquerytemplate'), $FailedSearchTemplate: $('#failedsearchtemplate'), $CollapseContainer: $('#search-result-foldout'), $NoResulsTemplate: $('#noresultstemplate'), $SearchContainer: $('#instantsearch'), LinkToSearchResults: "/default.aspx?ID=@Navigation.GetPageIdByNavigationTag("search")", PostPageId: "@Navigation.GetPageIdByNavigationTag("instant-search")", $searchBtn: $('.js-search-btn') }); instantSearch.Init(); }); </script> </div> } else { <text>@using NORRIQ.Common8.Razor; @{ var searchLabel = Translate("Search products"); var searchResultPageId = Navigation.GetPageIdByNavigationTag("search"); var searchQuery = @System.Web.HttpContext.Current.Request.QueryString["ecomQuery"]; } <div class="form-search" id="instantsearch"> <form class="form form-search-form" id="search-form" action="/Default.aspx" method="get"> <input type="hidden" value="@searchQuery" id="searchstring"> <input type="hidden" name="ID" value="@searchResultPageId" /> <label for="searchTerm" class="sr-only"> @searchLabel </label> <div class="input-group"> <input type="search" class="form-control" id="searchTerm" name="eComQuery" placeholder="@searchLabel" autocomplete="off" data-tabindex="0" value="@searchQuery" /> <span class="input-group-btn"> <button type="submit" id="instantSearchBtn" class="btn btn-default js-search-btn"> <i id="instantSearchIcon" class="icon-search" aria-hidden="true"></i><span class="sr-only">@Translate("Search")</span> </button> </span> </div> </form> <div class="form-search-collapse collapse" id="search-result-foldout"> <div class="form-search-result" id="search-result-container"></div> </div> </div> <script type="text/x-jsrender" id="quicksearchtemplate"> <table class="table table-condensed productlist-table"> <tbody> {{for Products}} <tr data-product-id="{{:Id}}" data-product-key='{{:AutoAddProductKey}}' data-product-language-id="{{:LanguageId}}"> @if (Pageview.Security.UserLoggedIn) { <td class="productlist-table-thumb text-center" width="70"> <img src="/Admin/Public/GetImage.ashx?Image={{:ThumbnailImageName}}&amp;Width=60&amp;Height=60&amp;Crop=5&amp;Compression=80" height="60" class="img-responsive" alt="{{:ThumbnailImageAltText}}" /> </td> <td class="productlist-table-product"> <a href="{{:Link}}" class="productlist-table-name"> {{:Name}} </a> <div class="clearfix"> <div class="pull-left text-small"> @Translate("Product Number"): {{:Number}}<br /> @Translate("Price"): {{:UnitPrice}} </div> <div class="productlist-table-quantity pull-right"> <div class="input-group"> <input type="text" class="form-control qty-input text-center js-qs-qty-input" value="{{:QtyInBasket}}" onclick="this.focus(); this.select();" data-tabindex="{{:#index + 1}}" /> <span class="input-group-addon qty-input-user-feedback js-qs-qty-input-feedback"> {{if QtyInBasket > 0}} <i class="icon-added"></i> {{else}} <i class="icon-minicart"></i> {{/if}} </span> </div> </div> </div> </td> } else { <td class="productlist-table-thumb text-center" width="70"> <img src="/Admin/Public/GetImage.ashx?Image={{:ThumbnailImageName}}&amp;Width=60&amp;Height=60&amp;Crop=5&amp;Compression=80" height="60" class="img-responsive" alt="{{:ThumbnailImageAltText}}" /> </td> <td class="productlist-table-product"> <a href="{{:Link}}" class="productlist-table-name"> {{:Name}} </a> </td> } </tr> {{/for}} </tbody> </table> {{if MoreResults}} <a href="{{:LinkToFullResults}}" class="btn btn-primary btn-sm">@Translate("Show all results") ({{:NumberOfResults}})</a> {{/if}} </script> <script type="text/x-jsrender" id="quicksearchloadingtemplate"> <p class="product-search-label"> <i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Searching") </p> </script> <script type="text/x-jsrender" id="noquerytemplate"> <p class="product-search-label"><i class="icon-keyboard" aria-hidden="true"></i> @Translate("Start typing to search")</p> </script> <script type="text/x-jsrender" id="failedsearchtemplate"> <p class="product-search-label"><i class="icon-warning" aria-hidden="true"></i> @Translate("An error occured")</p> </script> <script type="text/x-jsrender" id="noresultstemplate"> <p class="product-search-label"><i class="icon-warning" aria-hidden="true"></i> @Translate("Search found no products")</p> </script> <script type="text/x-jsrender" id="qsautoaddfeedbackloading"> <i class="icon-async icon-pulse"></i> </script> <script type="text/x-jsrender" id="qsautoaddfeedbacksuccess"> <i class="icon-added" title="@Translate("Product added to cart")"></i> </script> <script type="text/x-jsrender" id="qsautoaddfeedbackerror"> {{if error == "badinput"}} <i class="icon-warning" title="@Translate("Please enter a numerical value")"></i> {{else error == "servererror"}} <i class="icon-warning" title="@Translate("An server error occured your cart was not updated")"></i> {{else}} <i class="icon-warning"></i> {{/if}} </script> <script append="true"> $(document).ready(function() { var instantSearch = new AppStart.InstantSearch({ WaitTime: 250, $SearchResultTemplate: $('#quicksearchtemplate'), $SearchInput: $('#searchTerm'), $ResultContainer: $('#search-result-container'), $ResultLoadingTemplate: $('#quicksearchloadingtemplate'), $NoQueryTemplate: $('#noquerytemplate'), $FailedSearchTemplate: $('#failedsearchtemplate'), $CollapseContainer: $('#search-result-foldout'), $NoResulsTemplate: $('#noresultstemplate'), $SearchContainer: $('#instantsearch'), LinkToSearchResults: "/default.aspx?ID=@Navigation.GetPageIdByNavigationTag("search")", PostPageId: "@Navigation.GetPageIdByNavigationTag("instant-search")", $searchBtn: $('.js-search-btn') }); instantSearch.Init(); }); </script></text> } </li> @*DESIGN: extra icons, if needed *@ @*@if (Pageview.Security.UserLoggedIn && Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop) { <li class="dropdown-icon"> <a href='@Navigation.GetUrlByNavigationTag("favorites")'> <i class="icon-favorite-added" aria-hidden="true"></i> <span class="dropdown-label">@Translate("Favorites")</span> </a> </li> <li class="dropdown-icon"> <a href='@Navigation.GetUrlByNavigationTag("reorder")'> <i class="icon-tasks" aria-hidden="true"></i> <span class="dropdown-label">@Translate("Reorder")</span> </a> </li> }*@ @*<li class="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop ? "dropdown dropdown-hover" : "dropdown") dropdown-icon"> <a href="javascript:void(0)" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> <i class="icon-user" aria-hidden="true"></i> <span class="dropdown-label"> @if (Pageview.Security.UserLoggedIn) { @Translate("Account") } else { @Translate("Sign in") } </span> </a> @if (Pageview.Security.UserLoggedIn) { <ul class="dropdown-menu"> @RenderNavigation(new { Template = "navbar-nav-customer.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 }) <li> <a href="/admin/public/extranetlogoff.aspx?ID=@(Pageview.Page.ID)"> <i class="icon-chevron-left" aria-hidden="true"></i> @Translate("Sign out") </a> </li> </ul> } else { <div class="dropdown-menu"> @using NORRIQ.Common8.Razor; <form name="ExtUserForm" id="loginForm" method="post" data-pageId="@Pageview.Page.ID" class="form" role="form" action="/API/Account/Login"> <div class="form-group"> <label for="Username">@Translate("Username")</label> <input id="Username" data-bind="value: username" name="Username" type="text" value="" class="form-control" autocomplete="off"> </div> <div class="form-group"> <label for="Password">@Translate("Password")</label> <input id="Password" data-bind="value: password" name="Password" type="password" value="" class="form-control" autocomplete="off"> </div> <div class="form-group"> <div span id="loginFeedback" data-bind="if: ($root.loginError() || $root.loginFailed())"> <p data-bind="if: $root.loginError" class="user-login-error">@Translate("An error occured!")</p> <p data-bind="if: $root.loginFailed" class="user-login-error">@Translate("Username or password is incorrect!")</p> </div> <button type="submit" role="button" class="btn btn-primary btn-block" id="loginBtn"> <span data-bind="ifnot: $root.loggingIn"> @Translate("Sign in") </span> <span data-bind="if: $root.loggingIn"> <i class="icon-async icon-pulse" aria-hidden="true"></i> @Translate("Signing in") </span> </button> </div> <ul class="form-login-links"> <li> <a href="@Navigation.GetUrlByNavigationTag("forgot-password")">@Translate("Forgot password")</a> </li> <li> <a href="@Navigation.GetUrlByNavigationTag("new-user")">@Translate("Register user")</a> </li> </ul> </form> </div> } </li>*@ @*<li class="@(Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop ? "dropdown dropdown-hover" : "dropdown") dropdown-icon" id="cart-information"> @{ double quantity = 0; var price = new PriceInfo(); if (!isCartEmpty) { quantity = Dynamicweb.Ecommerce.Common.Context.Cart.OrderLines.Where(ol => ol.GetOrderLineType() == OrderLineType.Product).Sum(s => s.Quantity); price = Dynamicweb.Ecommerce.Common.Context.Cart.Price; } } <a href="javascript:void(0)" class="dropdown-toggle dropdown-minicart" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> <i class="icon-minicart" aria-hidden="true"></i> <span class="dropdown-label">@Translate("Cart", "Cart")</span> @if (Pageview.Security.UserLoggedIn) { <span data-bind="html: Quantity(), visible: Quantity() > 0" class="dropdown-qty">@(quantity > 0 ? quantity.ToString() : "")</span> } </a> @if (Pageview.Security.UserLoggedIn) { <div class="dropdown-menu"> <div data-bind="visible: Quantity() > 0"> <table class="table table-mini"> <tr> <td class="text-left" data-bind="html: Quantity() || @quantity">@Translate("Purchase", "Purchase"): @quantity</td> <td class="text-right"><strong data-bind="html: PriceWithoutVATFormattedNoSymbol() || @price.PriceWithoutVATFormattedNoSymbol">@price.PriceWithoutVATFormattedNoSymbol</strong></td> </tr> <tr> <td colspan="2" class="text-right"><i>@Translate("Prices without VAT", "Prices without VAT")</i></td> </tr> </table> <a href="@Navigation.GetUrlByNavigationTag("cart")" class="btn btn-primary btn-block">@Translate("Show cart", "Show cart")</a> </div> <div data-bind="visible: Quantity() < 1">@Translate("Your cart is empty", "Your cart is empty")</div> </div> } </li>*@ <li class="dropdown dropdown-icon dropdown-mobile"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> <i class="icon-hamburger"></i> <span class="dropdown-label">Menu</span> </a> @DwCaching.CacheByArea("navbar-nav-dropdown.xslt", () => RenderNavigation(new { Template = "navbar-nav-dropdown.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 })) </li> </ul> </div> </header> <script type="text/x-jsrender" id="cart-information-template-show"> <a href="javascript:void(0) " class="dropdown-toggle dropdown-minicart" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> <i class="icon-minicart" aria-hidden="true"></i> <span class="dropdown-label">@Translate("Cart", "Cart")</span> <span class="dropdown-qty">{{:Quantity}}</span> </a> <div class="dropdown-menu"> <table class="table table-mini"> <tr> <td class="text-left">@Translate("Purchase", "Purchase"): {{:Quantity}}</td> <td class="text-right"><strong>{{:Price.PriceWithoutVATFormattedNoSymbol}}</strong></td> </tr> <tr> <td colspan="2" class="text-right"><i>@Translate("Prices without VAT", "Prices without VAT")</i></td> </tr> </table> <a href="@Navigation.GetUrlByNavigationTag("cart")" class="btn btn-primary btn-block">@Translate("Show cart", "Show cart")</a> </div> </script> <script type="text/x-jsrender" id="cart-information-template-empty"> <a href="javascript:void(0) " class="dropdown-toggle dropdown-minicart" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> <span class="dropdown-item"> <i class="icon-minicart" aria-hidden="true"></i> <span class="dropdown-label sr-only">@Translate("Cart", "Cart")</span> </span> </a> <div class="dropdown-menu"> <p>@Translate("Your cart is empty", "Your cart is empty")</p> </div> </script> <nav class="navbar navbar-inverse navbar-mixed"> <div class="container"> @*@RenderNavigation(new { Template = "megamenu-bothV2.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 3 })*@ @*@RenderNavigation(new { Template = "navbar-nav-ecom-mega.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 3 })*@ @*Due to device logic in the navigations xslt, we have to cache the navigation with different cache keys depending on witch device *@ @if (Pageview.Device == Dynamicweb.Frontend.Devices.DeviceType.Desktop) { @DwCaching.CacheByArea("Desktop-navbar-nav-ecom.xslt", () => RenderNavigation(new { Template = "navbar-nav-ecom.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 })) @DwCaching.CacheByArea("Desktop-navbar-nav-pages.xslt", () => RenderNavigation(new { Template = "navbar-nav-pages.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 })) } else { @DwCaching.CacheByArea("navbar-nav-ecom.xslt", () => RenderNavigation(new { Template = "navbar-nav-ecom.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 })) @DwCaching.CacheByArea("navbar-nav-pages.xslt", () => RenderNavigation(new { Template = "navbar-nav-pages.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 })) } </div> </nav> <script append="true"> $(document).ready(function () { var minicart = new AppStart.MiniCart( @JsonConvert.SerializeObject(cart), document.getElementById("cart-information")); minicart.initMiniCart(); }) </script> @SnippetEnd("Header") @SnippetStart("watermark") <img class="watermark2" src="@watermark2.Path" alt="" /> @SnippetEnd("watermark") </body> </html>