Exception in template (Designs\StandardWebshop\eCom/Productlist/NoProductsFound.cshtml): System.NullReferenceException: Object reference not set to an instance of an object.
at Dynamicweb.eCommerce.Products.Group.get_AllGroupsByLanguageID(String languageID)
at Dynamicweb.eCommerce.Products.Group.get_Subgroups()
at Dynamicweb.Frontend.NavigationProviders.GroupNavigationProvider._Closure$__20-0._Lambda$__0(GroupCollection items, Int32 thisLevel)
at Dynamicweb.Frontend.NavigationProviders.GroupNavigationProvider._Closure$__20-0._Lambda$__0(GroupCollection items, Int32 thisLevel)
at Dynamicweb.Frontend.NavigationProviders.GroupNavigationProvider._Closure$__20-0._Lambda$__0(GroupCollection items, Int32 thisLevel)
at Dynamicweb.Frontend.NavigationProviders.GroupNavigationProvider._Closure$__20-0._Lambda$__0(GroupCollection items, Int32 thisLevel)
at Dynamicweb.Frontend.NavigationProviders.GroupNavigationProvider.BuildGroupsProductCounts(GroupCollection topGroups, Int32 level, Int32 maxLevel)
at Dynamicweb.Frontend.NavigationProviders.GroupNavigationProvider.MakeGroupTree(Page page, NavigationItem parentNode, Boolean applyStartAndEndLevelToNavigation)
at Dynamicweb.Frontend.NavigationProviders.GroupNavigationProvider.Process(NavigationItem node, Boolean applyStartAndEndLevelToNavigation)
at Dynamicweb.Frontend.XmlNavigation.XML(Int32 ParentID, Int32 StartLevel, Int32 StopLevel, Expand expand, Int32 areaID)
at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(Int32 ParentID, Int32 StartLevel, Int32 StopLevel, Expand ExpandMode, String NavigationName, String XsltPath, Int32 AreaID, Boolean SitemapMode, NameValueCollection settings, NameValueCollection attributes, IncludeMode mode)
at Dynamicweb.Frontend.XmlNavigation.GetNavigationHtml(NameValueCollection settings, NameValueCollection attributes)
at CompiledRazorTemplates.Dynamic.ebdacffa.Execute()
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context)
at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName)
at Dynamicweb.Rendering.Template.Output()
@inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
@{
var Columns = "col-xs-6 col-sm-4 col-md-4";
var mode = ObjectFactory.GetInstance<TemporarilySettings>().GetAndUpdate("listmode") ?? "" + ObjectFactory.GetInstance<AreaItemSettings>().GetCurrentAreaValue<string>("ProductlistMode") + "";
var SortBy = GetString("Ecom:ProductList.SortBy");
var SortOrder = GetString("Ecom:ProductList.SortOrder");
var query = HttpContext.Current.Request["EcomQuery"];
var isFavoriteList = (System.Web.HttpContext.Current.Request["favoriteMode"] ?? string.Empty).Equals("true", StringComparison.InvariantCultureIgnoreCase);
}
<div class="col-xs-12 col-sm-12 col-md-3" data-content="sidebar" id="desktopSidebar">
@using System.Web
@using NORRIQ.Universal.Extensions
@using NORRIQ.Common8.Context
@using System.Web.Mvc.Html
@using Dynamicweb.NewsLetterV3
@using Newtonsoft.Json
@using NORRIQ.Common8.Ecom
@using NORRIQ.Common8.Factory
@using StandardWebshop.CustomCode.Razor
@using NORRIQ.Common8.Razor;
@using Dynamicweb.eCommerce.Common;
@inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
<div class="panel-group" id="filterTabs" role="tablist" aria-multiselectable="true">
<ul class="filter-tabs">
@if (HttpContext.Current.Request["groupid"] != null || GetGlobalValue("Global:Page.NavigationTag").Contains("ecom"))
{
<li class="filter-tabs-item" role="tab" id="headingSubmenu">
<a class="collapsed"
role="button"
data-toggle="collapse"
data-parent="#filterTabs"
data-target="#collapseSubmenu"
aria-expanded="false"
aria-controls="collapseSubmenu">
<i class="icon-hamburger" aria-hidden="true"></i>
@Translate("Categories", "Categories")
</a>
</li>
}
@if (GetLoop("FacetGroups").Any())
{
<li class="filter-tabs-item" role="tab" id="headingFilter">
<a class="collapsed"
role="button"
data-toggle="collapse"
data-parent="#filterTabs"
data-target="#collapseFilter"
aria-expanded="false"
aria-controls="collapseFilter">
@*<i class="icon-filter" aria-hidden="true"></i>*@
<i class="pe-is-i-sliders-circle"></i>
@Translate("Filter", "Filter")
</a>
</li>
}
</ul>
<div class="clearfix"></div>
@if (HttpContext.Current.Request["groupid"] != null || GetGlobalValue("Global:Page.NavigationTag").Contains("ecom"))
{
<div class="panel">
<div id="collapseSubmenu"
class="filter-collapse collapse"
role="tabpanel"
aria-labelledby="headingSubmenu">
@if (HttpContext.Current.Request["groupid"] != null)
{
@RenderNavigation(new { Template = "submenu-ecom-inpath.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 2 })
}
else
{
@RenderNavigation(new { Template = "submenu-ecom.xslt", Expandmode = "all", StartLevel = 1, EndLevel = 3 })
}
</div>
</div>
}
@if (GetLoop("FacetGroups").Any())
{
<div class="container filter-wrap">
<nav id="collapseFilter" class="filter-collapse collapse center_header-navigation" role="tabpanel" aria-labelledby="headingFilter">
<h2>@Translate("Filter", "Filter")</h2>
<button type="button" aria-label="Close Navigation" class="btn-close" aria-controls="collapseFilter" data-toggle="collapse" data-target="#collapseFilter">
<span> </span>
<span> </span>
</button>
</nav>
</div>
<div class="panel">
<div id="collapseFilterXX"
class="filter-collapse collapse center_header-navigation"
role="tabpanel"
aria-labelledby="headingFilter">
@*<form id="filter-form" method="get" action="/Default.aspx">
<input type='hidden' name='ID' value='@Pageview.Page.ID' />
@if (HttpContext.Current.Request["ecomquery"] != null)
{
<input type="hidden" name="ecomquery" value="@HttpContext.Current.Request["ecomquery"]" />
}
@foreach (LoopItem groups in GetLoop("FacetGroups"))
{
if (groups.GetLoop("Facets").Any())
{
foreach (LoopItem facets in groups.GetLoop("Facets"))
{
if (facets.GetLoop("FacetOptions").Any())
{
<div class="filter-group" id="@facets.GetString("Facet.QueryParameter")" name="@facets.GetString("Facet.QueryParameter")" data-filter-type="option">
<div class="filter-group-header">
<i class="icon-spinner icon-pulse" aria-hidden="true" style="display: none;"></i> @facets.GetString("Facet.Name")
</div>
<ul class="filter-group-list">
@foreach (LoopItem option in facets.GetLoop("FacetOptions"))
{
<li class="filter-group-item">
<div class="checkbox">
<label>
<input type="checkbox"
id="@facets.GetString("Facet.QueryParameter")@option.GetString("FacetOptions.LoopCounter")"
name="@facets.GetString("Facet.QueryParameter")"
value="@option.GetString("FacetOption.Value")"
@(option.GetBoolean("FacetOption.Selected") ? " checked=\"checked\" " : "") />
@option.GetString("FacetOption.Label") (@option.GetString("FacetOption.Count"))
</label>
</div>
</li>
}
</ul>
</div>
}
}
}
}
</form>
<script append="true">
require(['jquery', 'shared/norriq.searchfilter/norriq.searchfilter'], function ($, Filter) {
var filter = new Filter();
filter.init({
$filterForm: $('#filter-form'),
$filterGroups: $('.filter-group, .js-select-filter'),
$filterSlider: $('.filter-slider'),
$selectedFilters: $('.filter-active-option')
});
});
</script>*@
</div>
</div>
}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-9">
@using NORRIQ.Common8.Razor
@using NORRIQ.Universal.Extensions
@inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
@{
var PageID = (String.IsNullOrEmpty(GetString("Ecom:ProductList:Page.ID")) ? "" : "/Default.aspx?ID=" + GetString("Ecom:ProductList:Page.ID"));
var GroupID = (String.IsNullOrEmpty(GetString("Ecom:ProductList:Page.GroupID")) ? "" : "&GroupID=" + GetString("Ecom:ProductList:Page.GroupID"));
var pdfgroupid = System.Web.HttpContext.Current.Request.QueryString["groupid"];
var pdfgroupname = GetString("Ecom:Group.Name");
var pdfLink = "";
var pageURL = System.Web.HttpContext.Current.Request.Url.PathAndQuery.ToString().Split('&').Last();
var navigationTag = GetGlobalValue("Global:Page.NavigationTag");
var pageQuery = System.Web.HttpContext.Current.Request.Url.Query.ToString();
var originalPageQuery = pageQuery.ToString();
if (pageQuery.IndexOf("&") > -1)
{
pageQuery = "?" + pageQuery.Substring(pageQuery.IndexOf("&") + 1, pageQuery.Length - pageQuery.IndexOf("&") - 1);
}
else
{
pageQuery = "?";
}
}
@if (!String.IsNullOrEmpty(pdfgroupid))
{
pdfLink = Navigation.GetUrlByNavigationTag("productlistsheet") + "?GroupID=" + pdfgroupid + "&PDF=true&Filename=" + pdfgroupid + ".pdf";
}
else if (String.IsNullOrEmpty(pdfgroupid) && isFavoriteList && pageQuery.Contains("favoritelistid"))
{
pdfLink = Navigation.GetUrlByNavigationTag("favoritelist-customerprintlist") + pageQuery + "&PDF=true&Filename=" + Translate("Favoritliste", "Favoritliste") + ".pdf";
}
else if (String.IsNullOrEmpty(pdfgroupid) && isFavoriteList && pageQuery.Contains("orderinglistid"))
{
pdfLink = Navigation.GetUrlByNavigationTag("orderinglist-customerprintlist") + pageQuery + "&PDF=true&Filename=" + Translate("Favoritliste", "Favoritliste") + ".pdf";
}
else if (String.IsNullOrEmpty(pdfgroupid) && isFavoriteList)
{
pdfLink = Navigation.GetUrlByNavigationTag("sortiment-customerprintlist") + pageQuery + (pageQuery.IndexOf("?") > -1 ? "&" : "") + "PDF=true&Filename=" + Translate("Favoritliste", "Favoritliste") + ".pdf";
}
else if (String.IsNullOrEmpty(pdfgroupid) && pageURL.Contains("reorder"))
{
pdfLink = Navigation.GetUrlByNavigationTag("customerprintlist") + "?" + "&PDF=true&Filename=" + Translate("Genbestillingsliste", "Genbestillingsliste") + ".pdf";
}
<header class="productlist-header clearfix">
<div class="row">
<div class="@(isFavoriteList ? "col-sm-8" : "col-sm-10")">
@if (!isFavoriteList)
{
<h1 class="title-styled">
@if (!String.IsNullOrEmpty(GetString("Ecom:Group.Name")))
{
@GetString("Ecom:Group.Name")
}
else
{
@GetGlobalValue("Global:Page.Name")
}
@if (!String.IsNullOrEmpty(GetString("Ecom:ProductList:Search.Query")))
{
<small>
(@GetString("Ecom:ProductList:Search.Query"))
</small>
}
</h1>
}
</div>
<div class="@(isFavoriteList ? "col-sm-4" : "col-sm-2") text-right print-links">
@if (!String.IsNullOrEmpty(pdfgroupid) || !String.IsNullOrEmpty(pageURL))
{
if (isFavoriteList)
{
<div class="reinvoice-wrap">
@*@using NORRIQ.Common8.Factory
@using StandardWebshop.CustomCode.Basket.Services
@inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
@{
//bool reinvoiceExceptions = false;
//bool reInvoiceStatus = false;
//try
//{
// reInvoiceStatus = ObjectFactory.GetInstance<BasketService>().GetReInvoiceStatus();
//}
//catch (Exception e)
//{
// // ignored
// reinvoiceExceptions = true;
//}
}
<div id="re-invoice-container">
<div class="form-group">
<div class="checkbox">
<span style="display: none" class="js-re-invoice-loading spinner-sm-default"></span>
<label for="re-invoice-enabled">
<input id="re-invoice-checkbox" type="checkbox" data-target="reinvoice-form-field" /> @Translate("Enable_reinvoicing", "Viderefakturering")
<i class="pe-is-i-info-circle-f pe-lg text-primary" aria-hidden="true" title="@Translate("reinvoicing_explained", "Her har du mulighed for at vælge, at din ordre skal viderefaktureres.")"></i>
</label>
</div>
<div style="display: none;" class="js-re-invoice-error">
<div class="alert alert-warning-light text-center" role="alert">
<span class="error">
@Translate("reinvoice_error-info", "Status på viderefakturering kan ikke vises.")<br />
<small>@Translate("reinvoice_error-hint", "Prøv evt. at genindlæse siden.")</small>
</span>
</div>
</div>
</div>
</div>
*@
</div>
<a rel="nofollow" class="hidden-print pull-right" href="@pdfLink">
@Translate("DownloadFavlist", "Download favoritliste") <img src="/Files/Templates/Designs/StandardWebshop/css/file-pdf-solid.svg" style="width: 23px; padding-left: 3px;" />
</a>
}
else
{
<a rel="nofollow" class="hidden-print pull-right hidden-xs" href="javascript:window.print();">
<i class="fas fa-file-pdf"></i>
@Translate("Print", "Print")
</a>
}
}
</div>
</div>
@if (!String.IsNullOrWhiteSpace(GetString("Ecom:Group.LargeImage")))
{
<div class="productlist-header-image hidden-xs">
<img src="/Admin/Public/GetImage.ashx?Width=1140&Height=480&Compression=80&[email protected](GetString("Ecom:Group.LargeImage"))" />
</div>
}
@if (!String.IsNullOrEmpty(GetString("Ecom:Group.Description")))
{
<div class="productlist-description hidden-xs">
@GetString("Ecom:Group.Description")
</div>
}
@if (isFavoriteList)
{
<div class="mBot"></div>
}
@*
If active shows featured products before produclist
@RenderSnippet("FeaturedProduct")
*@
@if (GetLoop("Products").Any())
{
<text>@foreach (LoopItem groups in GetLoop("FacetGroups"))
{
if (groups.GetLoop("Facets").Any())
{
if (groups.GetLoop("Facets").Where(fo => fo.GetLoop("FacetOptions").Where(op => op.GetBoolean("FacetOption.Selected")).Any()).Any())
{
<div class="facets-selected">
<div class="facets-col-center">
<span>@Translate("selected_filters", "Valgte filtre:") </span>
@foreach (LoopItem selected in groups.GetLoop("Facets"))
{
foreach (LoopItem active in selected.GetLoop("FacetOptions"))
{
if (active.GetBoolean("FacetOption.Selected"))
{
<a href="javascript:void(0)" class="filter-active-option" data-filter-name="@selected.GetString("Facet.Name")" data-filter-type="option" data-filter-option="@selected.GetString("Facet.QueryParameter")@active.GetString("FacetOptions.LoopCounter")">
<span class="option-label">@selected.GetString("Facet.Name"):</span>
@if (active.GetString("FacetOption.Label").EndsWith(".jpg"))
{
var maerkeUrl = "/Files/Images/Symbol/" + active.GetString("FacetOption.Label");
var maerkeAlt = active.GetString("FacetOption.Label");
maerkeAlt = maerkeAlt.Substring(0, maerkeAlt.LastIndexOf(".jpg"));
@*<img src="@maerkeUrl" alt="@maerkeAlt" class="img-responsive" />*@
<span>@maerkeAlt</span>
}
else
{
<span class="option-title">@active.GetString("FacetOption.Label")</span>
}
<i class="pe-is-i-close-circle-f pe-va" aria-hidden="true"></i>@*was icon-close*@
</a>
}
}
}
@if (groups.GetLoop("Facets").Where(fo => fo.GetLoop("FacetOptions").Where(op => op.GetBoolean("FacetOption.Selected")).Any()).Any())
{
<a class="filter-active-option filter-reset" role="button" href="javascript:void(0)" data-filter-type="reset">
<span>@Translate("Clear filter", "Nulstil filtre")</span>
<i class="pe-is-bt-backspace-f pe-va pe-lg" aria-hidden="true"></i>@*was icon-close*@
</a>
}
</div>
</div>
}
}
}</text>
<text>@using System.Web
@using NORRIQ.Universal.Extensions
@using NORRIQ.Common8.Context
@using System.Web.Mvc.Html
@using Dynamicweb.NewsLetterV3
@using Newtonsoft.Json
@using NORRIQ.Common8.Ecom
@using NORRIQ.Common8.Factory
@using StandardWebshop.CustomCode.Razor
@using NORRIQ.Common8.Razor;
@using Dynamicweb.eCommerce.Common;
@using StandardWebshop.CustomCode.ColorLookup
@inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
@{
bool facetsAnySelected = false;
}
@if (GetLoop("FacetGroups").Any())
{
var colorLookupService = ObjectFactory.GetInstance<ColorLookupService>();
<div id="filter-container" class="productlist-filter">
<form id="filter-form" method="get" action="/Default.aspx">
<input type='hidden' name='ID' value='@Pageview.Page.ID' />
@if (!String.IsNullOrEmpty(GetString("Ecom:ProductList:Page.GroupID")))
{
<input type='hidden' name='GroupID' value='@GetString("Ecom:ProductList:Page.GroupID")' />
}
@if (HttpContext.Current.Request["ecomquery"] != null)
{
<input type="hidden" name="ecomquery" value="@HttpContext.Current.Request["ecomquery"]" />
}
@foreach (LoopItem groups in GetLoop("FacetGroups"))
{
if (groups.GetLoop("Facets").Any())
{
if (!facetsAnySelected)
{
facetsAnySelected = groups.GetLoop("Facets").Where(fo => fo.GetLoop("FacetOptions").Where(op => op.GetBoolean("FacetOption.Selected")).Any()).Any();
}
<ul class="nav nav-pills nav-filter">
@foreach (LoopItem facets in groups.GetLoop("Facets"))
{
if (facets.GetLoop("FacetOptions").Any())
{
var anySelected = facets.GetLoop("FacetOptions").Any(options => options.GetBoolean("FacetOption.Selected"));
//DON't make this general - use brackets only if needed for each node instead.
//var useBrackets = facets.GetLoop("FacetOptions").Where(o => o.GetString("FacetOption.Value").IndexOf(',') > -1).Any();
<li class="dropdown @(anySelected ? "active" : string.Empty)" id="@facets.GetString("Facet.QueryParameter")" role="presentation">
<a role="button" href="javascript:void()" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="icon-spinner icon-pulse" aria-hidden="true" style="display: none;"></i> @facets.GetString("Facet.Name") <i class="icon-angle-down" aria-hidden="true"></i>
</a>
<div class="dropdown-menu dropdown-keep-open filla" aria-labelledby="@facets.GetString("Facet.QueryParameter")">
<nav id="" class="filter-collapse collapse mobile-only" role="tabpanel">
<h2>@facets.GetString("Facet.Name")</h2>
<div class="btn-close-filla">
<button type="button" class="btn-close" data-toggle="collapse">
<i class="pe-is-i-angle-left pe-3x" aria-hidden="true"></i>
</button>
</div>
</nav>
<div class="dropdown-inner">
@foreach (LoopItem option in facets.GetLoop("FacetOptions"))
{
string facetLabel = option.GetString("FacetOption.Label");
bool useBrackets = (option.GetString("FacetOption.Value").IndexOf(',') > -1);
if (facets.GetString("Facet.QueryParameter") == "Farve")
{
string colorKey = colorLookupService.GetColorKey(option.GetString("FacetOption.Value"));
<div class="checkbox-color">
<input type="checkbox"
id="@facets.GetString("Facet.QueryParameter")@option.GetString("FacetOptions.LoopCounter")"
name="@facets.GetString("Facet.QueryParameter")"
value="@(useBrackets ? "[" + option.GetString("FacetOption.Value") + "]" : option.GetString("FacetOption.Value"))"
@(option.GetBoolean("FacetOption.Selected") ? " checked=\"checked\" " : "") />
<label for="@facets.GetString("Facet.QueryParameter")@option.GetString("FacetOptions.LoopCounter")">
<span class="checkbox-color-parameter checkbox-color-@(useBrackets ? "[" + colorKey + "]" : colorKey)"></span>
<span class="checkbox-color-name">@option.GetString("FacetOption.Label")</span> <span class="cnt">(@option.GetString("FacetOption.Count"))</span>
</label>
</div>
}
else
{
<div class="checkbox">
<label for="@facets.GetString("Facet.QueryParameter")@option.GetString("FacetOptions.LoopCounter")">
<input type="checkbox"
id="@facets.GetString("Facet.QueryParameter")@option.GetString("FacetOptions.LoopCounter")"
name="@facets.GetString("Facet.QueryParameter")"
value="@(useBrackets ? "[" + option.GetString("FacetOption.Value") + "]" : option.GetString("FacetOption.Value"))"
@(option.GetBoolean("FacetOption.Selected") ? " checked=\"checked\" " : "") />
@{
bool isImage = SpecificationHelper.IsImageFile(facetLabel);
string facetLabelImageTxt = facetLabel.Split('.').FirstOrDefault();
//TODO: mso BAD implementation - should be removed later
Guid tmpGuid;
bool isGUID = !string.IsNullOrEmpty("facetLabelImageTxt") && Guid.TryParse(facetLabelImageTxt, out tmpGuid);
}
@if (isImage && isGUID)
{
//TODO: mso - after PIM data is structured
<img src="/Admin/Public/GetImage.ashx?Width=60&Height=60&Compression=80&Crop=5&Image=/Files/Images/XPI/@facetLabel" alt="@facetLabel" class="img-responsive" />
}
else if (!isGUID && isImage)
{
//TODO: mso BAD implementation.
//This should be cleaned up in the future
var maerkeUrl = "/Files/Images/Symbol/" + option.GetString("FacetOption.Label");
string maerkeAlt = facetLabel.Substring(0, facetLabel.LastIndexOf(".jpg"));
<text>
<img src="/Admin/Public/GetImage.ashx?Width=125&Height=125&Compression=80&Image=@maerkeUrl" alt="@maerkeAlt" class="img-responsive miniThumb" />
@Translate("specs_" + maerkeAlt, maerkeAlt) <span class="cnt">(@option.GetString("FacetOption.Count"))</span>
</text>
}
else
{
<text>
@facetLabel <span class="cnt">(@option.GetString("FacetOption.Count"))</span>
</text>
}
</label>
</div>
}
}
</div>
<div class="btn-wrap">
<button class="btn btn-action btn-block btn-raised">
@Translate("Anvend", "Anvend")
</button>
</div>
</div>
</li>
}
}
@*@if (groups.GetLoop("Facets").Where(fo => fo.GetLoop("FacetOptions").Where(op => op.GetBoolean("FacetOption.Selected")).Any()).Any())
{
<li class="dropdown show-mobile" role="presentation">
<a class="dropdown-toggle filter-active-option filter-reset" role="button" href="javascript:void(0)" data-filter-type="reset">
@Translate("Clear filter", "Nulstil filtre") <i class="pe-is-bt-backspace-f pe-va pe-lg" aria-hidden="true"></i>
</a>
</li>
}*@
</ul>
}
}
<div class="clearfix"></div>
<br/>
<br/>
<div class="btn-wrap mobile-only">
<button class="btn btn-action btn-block btn-raised" type="submit">
@Translate("Anvend", "Anvend")
</button>
</div>
@if (facetsAnySelected)
{
<br/>
<div class="btn-wrap mobile-only">
<button class="btn btn-default btn-block filter-active-option-reset" role="button" data-filter-type="reset">
@Translate("Clear filter", "Nulstil filtre")
</button>
</div>
}
</form>
</div>
<script append="true">
require(['jquery', 'shared/norriq.searchfilter/norriq.searchfilter'], function ($, Filter) {
var filter = new Filter();
filter.init({
$filterForm: $('#filter-form'),
$filterGroups: $('.filter-group, .js-select-filter'),
$filterSlider: $('.filter-slider'),
$selectedFilters: $('.filter-active-option, .filter-active-option-reset')
});
});
</script>
}</text>
<div class="row">
<div class="col-xs-12">
<div class="stroked"></div>
</div>
<div class="col-xs-12 col-sm-6 col-sm-offset-3 text-center">
<div class="productlist-header-info">
<span class="productlist-header-quantity">
@GetString("Ecom:ProductList.PageProdCnt") @Translate("Products", "Products")
</span>
<span class="productlist-header-vat">
@Translate("Prices without VAT", "Prices without VAT")
</span>
</div>
</div>
<div class="col-xs-12 col-sm-3" data-align="right">
@if (isFavoriteList)
{
<div class="form-inline form-sort" data-float="right">
@*<label for="sortProducts">
@Translate("label_sort_products", "Sorter")
</label>*@
<select class="form-control form-control-sort" id="sortProducts">
<option value="@(HttpContext.Current.Request.Url.SetQuery("SortBy", "ProductNameSort").SetQuery("SortOrder", "ASC").PathAndQuery)"
@((SortOrder == "ASC" && SortBy == "productnamesort") ? "selected" : "")>
@Translate("Name ascending", "Name A to Z")
</option>
<option value="@(HttpContext.Current.Request.Url.SetQuery("SortBy", "ProductNameSort").SetQuery("SortOrder", "DESC").PathAndQuery)"
@(SortOrder == "DESC" && SortBy == "productnamesort" ? "selected" : "")>
@Translate("Name descending", "Name Z to A")
</option>
<option value="@(HttpContext.Current.Request.Url.SetQuery("SortBy", "Varegruppe").SetQuery("SortOrder", "ASC").PathAndQuery)"
@(SortOrder == "ASC" && SortBy == "varegruppe" ? "selected" : "")>
@Translate("Varegruppe ascending", "Varegruppe A to Z")
</option>
<option value="@(HttpContext.Current.Request.Url.SetQuery("SortBy", "Varegruppe").SetQuery("SortOrder", "DESC").PathAndQuery)"
@(SortOrder == "DESC" && SortBy == "varegruppe" ? "selected" : "")>
@Translate("Varegruppe descending", "Varegruppe Z to A")
</option>
<option value="@(HttpContext.Current.Request.Url.SetQuery("SortBy", "Price").SetQuery("SortOrder", "ASC").PathAndQuery)"
@(SortOrder == "ASC" && SortBy == "price" ? "selected" : "")>
@Translate("Vejl. Pris ascending", "Vejl. Pris Stigende")
</option>
<option value="@(HttpContext.Current.Request.Url.SetQuery("SortBy", "Price").SetQuery("SortOrder", "DESC").PathAndQuery)"
@(SortOrder == "DESC" && SortBy == "price" ? "selected" : "")>
@Translate("Vejl. Pris descending", "Vejl. Pris Faldende")
</option>
</select>
</div>
}
else
{
<div class="btn-group views" role="group" aria-label="Toggle view">
<a class="btn @(mode == "table" ? "btn-grid active" : "btn-grid")"
href="@(HttpContext.Current.Request.Url.SetQuery("listmode", "table").PathAndQuery)">
<i class="icon-list" aria-hidden="true"></i> <span class="sr-only">@Translate("Table", "Tabel")</span>
</a>
<a class="btn @(mode == "grid" ? "btn-grid active" : "btn-grid")"
href="@(HttpContext.Current.Request.Url.SetQuery("listmode", "grid").PathAndQuery)">
<i class="icon-grid" aria-hidden="true"></i> <span class="sr-only">@Translate("Grid", "Grid")</span>
</a>
</div>
}
</div>
</div>
}
</header>
@if (GetLoop("Subgroups").Any())
{
<div class="grouplist-grid-flex">
@foreach (var group in GetLoop("Subgroups"))
{
<div class="@Columns" data-group-display="flex">
<div class="grouplist-grid-group" data-products="@group.GetString("Ecom:Group.ProductCount")">
<a href="@group.GetString("Ecom:Group.Link.Clean")" class="grouplist-grid-image">
<img src="/Admin/Public/[email protected]("Ecom:Group.LargeImage")&Width=262&Height=253&Crop=0&Compression=85" class="img-responsive" />
</a>
<h3 class="grouplist-grid-caption">
<a href="@group.GetString("Ecom:Group.Link.Clean")">
@group.GetString("Ecom:Group.Name")
</a>
</h3>
</div>
</div>
}
</div>
}
else if (GetLoop("ProductGroups").Any())
{
<div class="grouplist-grid-flex">
@foreach (var group in GetLoop("ProductGroups"))
{
<div class="@Columns" data-group-display="flex">
<div class="grouplist-grid-group" data-products="@group.GetString("Ecom:Group.ProductCount")">
<a href="@group.GetString("Ecom:Group.Link.Clean")" class="grouplist-grid-image">
<img src="/Admin/Public/[email protected]("Ecom:Group.LargeImage")&Width=262&Height=253&Crop=0&Compression=85" class="img-responsive" />
</a>
<h3 class="grouplist-grid-caption">
<a href="@group.GetString("Ecom:Group.Link.Clean")">
@group.GetString("Ecom:Group.Name")
</a>
</h3>
</div>
</div>
}
</div>
}
else
{
<p role="alert">
<strong>@Translate("No products", "No products")</strong> - @Translate("the selected group is empty", "the selected group is empty!")
</p>
@RenderSnippet("FeaturedProduct")
}
</div>
@if (!string.IsNullOrEmpty(query))
{
<script type="text/javascript" v-pre>
var results = @GetLoop("Products").Count;
var postfix = results > 0 ? "ProductsFound" : "Empty";
var category = "EcomSearch - " + postfix;
// Datalayer originates from GTM
if (typeof variable !== 'undefined')
dataLayer.push({
'event': 'EcomSearch',
'eventCategory': category,
'eventAction': '@query',
'eventLabel': results
});
</script>
}