Error compiling template "Designs/sevenseas/eCom/Productlist/espresso-product-grid.cshtml"
Line 77: 'Dynamicweb.Ecommerce.International.Currency.Format(double, bool)' is obsolete: 'Use Ecommerce.Services.Currencies.Format instead'
Line 785: The name 'excludedOptions' does not exist in the current context

1 @inherits Co3.Espresso.Website.TemplateBases.Paragraphs.Module 2 @using Dynamicweb.Content.Items.Metadata 3 @using Dynamicweb.Content.Items 4 @using System.Linq 5 @using System.Web 6 7 @using System.Globalization; 8 @using System.Text.RegularExpressions; 9 @using Dynamicweb.Ecommerce.Common; 10 @using Co3.Espresso.Website.Services; 11 12 @functions { 13 CultureInfo AreaCultureInfo = Dynamicweb.Frontend.PageView.Current().Area.CultureInfo; 14 15 public string getProductLink( string groupID, string productID, string variantID = "" ) { 16 string result = string.Empty; 17 string displayPage = Co3.Espresso.Website.Services.ProductService.Instance.GetGroupDisplayPage( groupID ); 18 if( string.IsNullOrEmpty( displayPage ) == false ) { 19 if( string.IsNullOrEmpty( variantID ) == false ) { 20 result = "{0}&ProductID={1}&variantID={2}"; 21 result = string.Format( result, displayPage, productID, variantID ); 22 } 23 else { 24 result = "{0}&ProductID={1}"; 25 result = string.Format( result, displayPage, productID ); 26 } 27 } 28 return result; 29 } 30 31 public bool isProductGroupPublishedOnWebsite( string groupID ) { 32 bool result = false; 33 string displayPage = Co3.Espresso.Website.Services.ProductService.Instance.GetGroupDisplayPage( groupID ); 34 if( string.IsNullOrEmpty( displayPage ) == false ) { 35 result = true; 36 } 37 return result; 38 } 39 40 public string getNewsLink( string categoryName, string newsID ) { 41 string result = NewsService.Instance.GetNewsDisplayPage( categoryName, newsID ); 42 string displayPage = NewsService.Instance.GetNewsDisplayPage( categoryName, newsID ); 43 if( string.IsNullOrEmpty( displayPage ) == false ) { 44 result = "/" + displayPage.Replace( "Id", "ID" ).Replace( "#", "&PID=" ) + "&M=NewsV2&Action=1&NewsID=" + newsID; 45 //result = SearchEngineFriendlyURLs.GetFriendlyUrl( result ); 46 } 47 return result; 48 } 49 50 public string getImageURL( string url, int width = 2560, int height = 0, int crop = 0, int quality = 75, string format = "jpg" ) { 51 string result = string.Empty; 52 if( string.IsNullOrEmpty( url ) == false ) { 53 result = "/admin/public/getimage.ashx?Image={0}&Width={1}&Height={2}&Format={3}&Quality={4}&Crop={5}"; 54 result = string.Format( result, url, width, height, format, quality, crop ); 55 } 56 return result; 57 } 58 59 public string getPriceFormatted( string price ) { 60 string result = string.Empty; 61 if( string.IsNullOrEmpty( price ) == true ) { 62 price = Context.Currency.Format(0.00, false); 63 } 64 if ( Context.Currency.SymbolPlace == 0 ) { 65 result = string.Format( "<span class=\"e-product-price-symbol\">{1}</span>&nbsp;<strong>{0}</strong>", price, Context.Currency.Code ); 66 } 67 else{ 68 result = string.Format( "<strong>{0}</strong>&nbsp;<span class=\"e-product-price-symbol\">{1}</span>", price, Context.Currency.Code ); 69 } 70 return result; 71 } 72 73 public string getShortDate( DateTime date ) { 74 string result = string.Empty; 75 result = date.Date.ToString( AreaCultureInfo.DateTimeFormat.ShortDatePattern ).Replace( "-" , "." ); 76 return result; 77 } 78 79 public string getLongDate( DateTime date ) { 80 string result = string.Empty; 81 result = date.Date.ToString( AreaCultureInfo.DateTimeFormat.LongDatePattern ); 82 return result; 83 } 84 } 85 86 @{ 87 string productListClassList = "col-xs-12"; 88 string visibleFacetOptionCount = Espresso.Item.VisibleFacetsOptionsCount; 89 string productListLayout = Espresso.Item.Layout; 90 string sortBy = string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["SortBy"]) ? Espresso.Item.SortBy : System.Web.HttpContext.Current.Request["SortBy"]; 91 string sortOrder = string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["SortOrder"]) ? Espresso.Item.SortOrder : System.Web.HttpContext.Current.Request["SortOrder"]; 92 string pageSize = string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["PageSize"]) ? Espresso.Item.Pagesize : System.Web.HttpContext.Current.Request["PageSize"]; 93 string pageNum = string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["PageNum"]) ? GetString("Ecom:ProductList.CurrentPage") : System.Web.HttpContext.Current.Request["PageNum"]; 94 } 95 <div class="e-loading-overlay e-productlist-filters-preloader-overlay js-e-productlist-filters-preloader-overlay is-loading"> 96 <div class="e-loading-spinner"></div> 97 </div> 98 <div class="js-e-productlist"> 99 <div class="row"> 100 <div class="hidden-md-down col-md-4"> 101 @if(Espresso.Item.ShowNavigation == "True" && Espresso.Item.ShowFilters != "True"){ 102 if( string.IsNullOrEmpty(Espresso.Item.NavigationHeading) == false ){ 103 <h3>@Espresso.Item.NavigationHeading</h3> 104 } 105 <ul class="nav e-nav-local m-b-2"> 106 @RenderNavigation( new { 107 id = "dwnav-local-" + Espresso.Id, 108 parentid = Espresso.Page.ID, 109 template = "local-vertical.xslt", 110 startlevel = 1, 111 endlevel = 99, 112 expandmode = "path", 113 } ) 114 </ul> 115 } 116 <form class="js-e-productlist-form"> 117 <input type="hidden" name="ID" value="@Espresso.Page.ID"> 118 <input type="hidden" name="PageNum" value="@pageNum"> 119 <input type="hidden" name="Sort" value="@sortBy @sortOrder"> 120 <input type="hidden" name="SortBy" value="@sortBy"> 121 <input type="hidden" name="SortOrder" value="@sortOrder"> 122 <input type="hidden" name="PageSize" value="@pageSize"> 123 <input type="hidden" class="js-e-visible-options-count" value="@visibleFacetOptionCount"> 124 @foreach(LoopItem item in GetLoop("Query.Parameters")){ 125 if(string.IsNullOrEmpty(item.GetString("Parameter.Value")) == false){ 126 <input type="hidden" name="@item.GetString("Parameter.Name")" value="@item.GetString("Parameter.Value")"> 127 } 128 } 129 @foreach (LoopItem facetGroup in GetLoop("FacetGroups")) { 130 if(string.IsNullOrEmpty(facetGroup.GetString("FacetGroup.Name")) == false){ 131 <input type="hidden" name="SelectedFacetParams" value="@HttpContext.Current.Server.UrlEncode(facetGroup.GetString("FacetGroup.Name"))"> 132 } 133 } 134 @if(Espresso.Item.ShowFilters == "True"){ 135 productListClassList = "col-xs-12 col-lg-8"; 136 <div id="js-e-productlist-filters"> 137 <script id="js-e-productlist-filters-handlebars-template" type="text/x-handlebars-template"> 138 <h3>@Translate( "eCom_Productlist_FiltersHeaderText", "Tilpas udvalg")</h3> 139 <ul class="list-group m-t-1"> 140 <div class="list-group-item e-productlist-filter-selected small p-y-1"> 141 {{#if page.filtersAppliedCount}} 142 <div class="e-productlist-filter-selected-header"> 143 <h4>@Translate( "eCom_Productlist_FiltersSelectedText", "Valgte filtre")</h4> 144 <a href="#" class="small p-a-0 btn btn-link js-e-productlist-filter-clear-all">@Translate( "eCom_Productlist_FiltersResetFilterLinkText", "Nulstil alle")</a> 145 </div> 146 {{#each facets}} 147 {{#if selectedOptions.length}} 148 <ul class="e-productlist-filter-selected-items"> 149 {{#each selectedOptions}} 150 <li class="e-productlist-filter-selected-item small"><a class="e-productlist-filter-selected-item-remove js-e-productlist-filter-remove" href="#" data-value="{{value}}"><i class="material-icons">clear</i></a> {{../name}}: {{label}}</li> 151 {{/each}} 152 </ul> 153 {{/if}} 154 {{/each}} 155 {{#if page.q}} 156 <ul class="e-productlist-filter-selected-items"> 157 <li class="e-productlist-filter-selected-item small"><a class="e-productlist-filter-selected-item-remove js-e-productlist-filter-search-clear" href="#"><i class="material-icons">clear</i></a> @Translate( "eCom_Productlist_FiltersSearchHeader", "Søgning:") {{page.q}}</li> 158 </ul> 159 {{/if}} 160 {{#compare page.minPrice.clean '&&' page.maxPrice.clean}} 161 <ul class="e-productlist-filter-selected-items"> 162 <li class="e-productlist-filter-selected-item small"><a class="e-productlist-filter-selected-item-remove js-e-productlist-filter-range-clear" href="#" data-group-id="js-e-productlist-filters-range-group-price"><i class="material-icons">clear</i></a> @Translate( "eCom_Productlist_FiltersPriceHeader", "Pris:") {{{page.minPrice.formatted}}} - {{{page.maxPrice.formatted}}}</li> 163 </ul> 164 {{/compare}} 165 {{else}} 166 <p class="m-b-0 small text-muted">@Translate("eCom_Productlist_Filters_No_Filters_Applied_Text", "Ingen filtre valgt")</p> 167 {{/if}} 168 </div> 169 @if(Espresso.Item.ShowNavigation == "True"){ 170 <li class="list-group-item e-productlist-filters-items js-e-productlist-filters-items"> 171 <h4 class="m-b-0"> 172 <a id="filter-header-navigation" class="e-productlist-filters-header" href="#" data-toggle="collapse" data-target="#filter-panel-navigation" aria-expanded="false" aria-controls="filter-panel-navigation"> 173 @if( string.IsNullOrEmpty(Espresso.Item.NavigationHeading) == false ){ 174 @Espresso.Item.NavigationHeading 175 } else{ 176 @Translate( "eCom_Productlist_FiltersNavigationHeader", "Kategorier") 177 } 178 <i class="material-icons e-productlist-filters-collapse-icon">keyboard_arrow_right</i> 179 </a> 180 </h4> 181 <fieldset id="filter-panel-navigation" class="e-productlist-filters-collapse form-group collapse js-e-productlist-filters-collapse m-b-0" role="tabpanel" aria-labelledby="filter-header-navigation"> 182 <ul class="nav e-nav-local m-t-1"> 183 @RenderNavigation( new { 184 id = "dwnav-local-" + Espresso.Id, 185 parentid = Espresso.Page.ID, 186 template = "local-vertical.xslt", 187 startlevel = 1, 188 endlevel = 99, 189 expandmode = "path", 190 } ) 191 </ul> 192 </fieldset> 193 </li> 194 } 195 @if(Espresso.Item.ShowSearch == "True"){ 196 <li class="list-group-item e-productlist-filters-items js-e-productlist-filters-items"> 197 <h4 class="m-b-0"> 198 <a id="filter-header-search" class="e-productlist-filters-header" href="#" data-toggle="collapse" data-target="#filter-panel-search" data-testers="#filter-panel-search" aria-expanded="{{#if page.q }}true{{else}}false{{/if}}" aria-controls="filter-panel-search"> 199 @Translate( "eCom_Productlist_FiltersSearchHeader", "Søgning") 200 <i class="material-icons e-productlist-filters-collapse-icon">keyboard_arrow_right</i> 201 </a> 202 </h4> 203 <fieldset id="filter-panel-search" class="e-productlist-filters-collapse form-group collapse js-e-productlist-filters-collapse {{#if page.q}}in{{/if}} m-b-0" role="tabpanel" aria-labelledby="filter-header-search"> 204 <div class="js-e-search-input-group e-search-input-group {{#unless page.q}}is-empty{{/unless}} m-t-1"> 205 <label class="e-search-label" for="filter_search"><i class="material-icons">search</i></label> 206 <input type="text" class="js-e-search-input e-search-input e-productlist-filters-search-input form-control" name="q" id="filter_search" placeholder="Søgning" value="{{page.q}}"> 207 <span class="js-e-search-clear e-search-clear"><i class="material-icons">close</i></span> 208 <button class="e-search-submit btn btn-primary js-e-productlist-filters-search-submit" type="button"><i class="material-icons p-a-0">search</i></button> 209 </div> 210 </fieldset> 211 </li> 212 } 213 {{#each facets}} 214 {{#compare count '>' 0}} 215 <li class="list-group-item e-productlist-filters-items js-e-productlist-filters-items" role="tablist" aria-multiselectable="true"> 216 <h4 class="m-b-0"> 217 <a id="filter-header-{{param}}" class="e-productlist-filters-header" href="#" data-toggle="collapse" data-target="#filter-panel-{{param}}" aria-expanded="{{#if selectedOptions.length }}true{{else}}{{#compare @@first '&&' @@root.page.hasNoInteraction}}true{{/compare}}{{/if}}" aria-controls="filter-panel-{{param}}"> 218 {{label}} 219 {{#if selectedOptions.length}} 220 <span class="m-l-1">({{selectedOptions.length}})</span> 221 {{/if}} 222 <i class="material-icons e-productlist-filters-collapse-icon">keyboard_arrow_right</i> 223 </a> 224 </h4> 225 <fieldset id="filter-panel-{{param}}" class="e-productlist-filters-collapse form-group collapse js-e-productlist-filters-collapse {{#if selectedOptions.length }}in{{else}}{{#compare @@first '&&' @@root.page.hasNoInteraction}}in{{/compare}}{{/if}} {{#compare count '>' @visibleFacetOptionCount }}js-e-productlist-filters-collapse-peek e-productlist-filters-collapse-peek{{/compare}} m-b-0" role="tabpanel" aria-labelledby="filter-header-{{param}}"> 226 <div class="e-productlist-filters-item m-t-1"> 227 <input class="js-e-productlist-filter-reset-all" name="reset-filter-{{param}}" id="reset-filter-{{param}}" type="checkbox" value="true" {{#compare isCleared '||' isEmpty}}checked{{/compare}}> 228 <label for="reset-filter-{{param}}"> 229 @Translate( "eCom_Productlist_FiltersAllLabelText", "Alle ") 230 </label> 231 </div> 232 {{#each options}} 233 <div class="e-productlist-filters-item js-e-productlist-filters-item {{#if isSelected}}js-e-productlist-filters-item-checked{{/if}}"> 234 <input id="{{id}}" name="{{param}}" class="js-e-productlist-filter" type="checkbox" value="{{value}}" {{#if isSelected}}checked{{/if}} {{#if isDisabled}}disabled{{/if}}> 235 <label for="{{id}}"> 236 {{label}}<span class="m-l-1">({{count}})</span> 237 </label> 238 </div> 239 {{/each}} 240 {{#compare count '>' @visibleFacetOptionCount }} 241 <a href="#" class="js-e-productlist-filters-collapse-peek-toggle e-productlist-filters-collapse-peek-toggle m-t-1" data-closed-text="@Translate("eCom_Productlist_Filters_See_More ", "Vis flere")" data-open-text="@Translate("eCom_Productlist_Filters_See_Less ", "Vis færre")"><i class="material-icons e-productlist-filters-collapse-peek-toggle-icon">keyboard_arrow_down</i></a> 242 {{/compare}} 243 </fieldset> 244 </li> 245 {{/compare}} 246 {{/each}} 247 <li class="list-group-item e-productlist-filters-items js-e-productlist-filters-items"> 248 <h4 class="m-b-0"> 249 <a id="filter-header-pricerange" class="e-productlist-filters-header" href="#" data-toggle="collapse" data-target="#filter-panel-pricerange" aria-expanded="{{#compare page.minPrice.clean '||' page.maxPrice.clean}}true{{else}}false{{/compare}}" aria-controls="filter-panel-pricerange"> 250 @Translate( "eCom_Productlist_FiltersPriceRangeHeader", "Pris") 251 <i class="material-icons e-productlist-filters-collapse-icon">keyboard_arrow_right</i> 252 </a> 253 </h4> 254 <fieldset id="filter-panel-pricerange" class="e-productlist-filters-collapse form-group collapse js-e-productlist-filters-collapse {{#compare page.minPrice.clean '||' page.maxPrice.clean}}in{{/compare}} m-b-0" role="tabpanel" aria-labelledby="filter-header-pricerange"> 255 <div id="js-e-productlist-filters-range-group-price" class="row m-t-1 e-productlist-filters-range-group js-e-productlist-filters-range-group"> 256 <div class="col-xs-4"> 257 <input type="number" class="form-control js-e-productlist-filter-range js-e-productlist-filter-range-min" name="PriceRangeMin" id="PriceRangeMin" value="{{page.minPrice.clean}}" placeholder="@Translate("eCom_Productlist_Filters_Price_Min_Text", "Fra")" min="0"> 258 </div> 259 <div class="col-xs-4"> 260 <input type="number" class="form-control js-e-productlist-filter-range js-e-productlist-filter-range-max" name="PriceRangeMax" id="PriceRangeMax" value="{{page.maxPrice.clean}}" placeholder="@Translate("eCom_Productlist_Filters_Price_Max_Text", "Til")" data-msg-rangeValid="@Translate("eCom_Productlist_Filters_Price_Error_Msg", "Priser indtastet forkert")"> 261 </div> 262 <div class="col-xs-1"> 263 <button type="button" class="btn btn-link p-x-0 e-productlist-filter-clear-range js-e-productlist-filter-range-clear" data-group-id="js-e-productlist-filters-range-group-price"><i class="material-icons">clear</i></button> 264 </div> 265 <div class="col-xs-3"> 266 <button type="button" class="btn btn-primary p-x-0 btn-sm btn-block e-productlist-filter-apply-range js-e-productlist-filter-apply-range"><i class="material-icons">sync</i></button> 267 </div> 268 269 </div> 270 </fieldset> 271 </li> 272 </ul> 273 </script> 274 </div> 275 } 276 </form> 277 </div> 278 <div class="@productListClassList"> 279 <div id="js-e-productlist-products" > 280 <script type="application/ld+json"> 281 [ 282 @foreach ( LoopItem product in GetLoop("Products") ) { 283 if(product.GetInteger("Ecom:Product.LoopCounter") > 1){ 284 @Raw(",") 285 } 286 <text> 287 { 288 "@@context": "http://schema.org/", 289 "@@type": "Product", 290 "name": "@product.GetString("Ecom:Product.Name")", 291 "image": "@GetGlobalValue("Global:Request.Scheme")://@GetGlobalValue("Global:Request.Host")@getImageURL( product.GetString("Ecom:Product.ImageLarge.Clean"), 240, 240, 5)", 292 "description": "@product.GetString("Ecom:Product.ShortDescription")", 293 "productID": "@product.GetString("Ecom:Product.ID")", 294 "url": "@GetGlobalValue("Global:Request.Scheme")://@GetGlobalValue("Global:Request.Host")/@getProductLink( @product.GetString("Ecom:Product.PrimaryOrFirstGroupID"), @product.GetString("Ecom:Product.ID") )" 295 } 296 </text> 297 } 298 ] 299 </script> 300 <script id="js-e-productlist-products-handlebars-template" type="text/x-handlebars-template"> 301 <div class="e-products"> 302 <div class="row p-b-1 e-products-top"> 303 @if(Espresso.Item.Filters == "True"){ 304 <div class="col-xs-12 m-b-2 hidden-lg-up"> 305 <button class="btn btn-block btn-primary" type="button" data-toggle="modal" data-target="#js-e-productlist-filters-modal">@Translate( "eCom_Productlist_FiltersHeaderText", "Tilpas udvalg") ({{page.filtersAppliedCount}})</button> 306 </div> 307 } 308 309 string[] excludedOptions = {"Name DESC", "Created ASC", "Created DESC", "Rating ASC", "Number ASC", "Rating ASC", "Rating DESC", "Price ASC", "Price DESC"}; 310 311 312 <div class="col-xs-6 form-inline"> 313 <label for="Sort" class="m-b-0"> 314 <strong>@Translate( "eCom_Productlist_SortLabelText", "Sorter: ")</strong> 315 <select name="Sort" class="js-e-productlist-sort form-control"> 316 @foreach( FieldOptionMetadata sortByOption in ItemManager.Metadata.GetItemFields( "ParagraphModule_EcomProductList" ).FirstOrDefault( f => f.SystemName == "SortBy" ).Options.Values ){ 317 foreach( FieldOptionMetadata sortOrderOption in ItemManager.Metadata.GetItemFields( "ParagraphModule_EcomProductList" ).FirstOrDefault( f => f.SystemName == "SortOrder" ).Options.Values ){ 318 if(excludedOptions.Any(o => o.Contains(String.Format("{0} {1}", sortByOption.Value, sortOrderOption.Value ))) == false){ 319 <option value="@String.Format("{0} {1}", sortByOption.Value, sortOrderOption.Value)" {{#compare sort.sort '===' '@String.Format("{0} {1}", sortByOption.Value, sortOrderOption.Value)'}}selected{{/compare}}> 320 @Translate(String.Format("eCom_Productlist_SortOptionLabel_{0}_{1}", sortByOption.Value, sortOrderOption.Value ), String.Format("{0} {1}", sortByOption.Name, sortOrderOption.Name)) 321 </option> 322 } 323 } 324 } 325 </select> 326 </label> 327 </div> 328 329 <div class="e-products-paging col-xs-6 small"> 330 <small> 331 {{#if page.productCount}} 332 <strong>{{page.viewing.from}} - {{page.viewing.to}}</strong> @Translate( "eCom_Productlist_ProductcountOffText", "ud af ") 333 {{/if}} 334 <strong>{{page.productCount}}</strong> 335 </small> 336 {{#compare page.prevPage '!==' 0 }} 337 <a href="#" class="btn btn-link p-a-0 m-l-1 js-e-productlist-set-pagenum" data-page-num="{{page.prevPage}}"> 338 <i class="material-icons">keyboard_arrow_left</i> 339 <span class="hidden-lg-down"> 340 @Translate( "eCom_Productlist_Pages_Prev", "Forrige") 341 </span> 342 </a> 343 {{/compare}} 344 {{#compare page.nextPage '!==' 0 }} 345 <a href="#" class="btn btn-link p-a-0 m-x-1 js-e-productlist-set-pagenum" data-page-num="{{page.nextPage}}"> 346 <span class="hidden-lg-down"> 347 @Translate( "eCom_Productlist_Pages_Next", "Næste") 348 </span> 349 <i class="material-icons">keyboard_arrow_right</i></a> 350 {{/compare}} 351 {{#compare page.pageSize '!==' 999}} 352 {{#compare page.totalPages '>' 1 }} 353 <a href="#" class="btn btn-link p-a-0 m-l-1 js-e-productlist-set-pagesize hidden-md-down" data-page-size="999"> 354 @Translate( "eCom_Productlist_Pages_Show_All", "Vis alle") 355 </a> 356 {{/compare}} 357 {{/compare}} 358 {{#compare page.pageSize '===' 999}} 359 <a href="#" class="btn btn-link p-a-0 m-l-1 js-e-productlist-set-pagesize hidden-md-down" data-page-size="@Espresso.Item.Pagesize">@Translate( "eCom_Productlist_Pages_Show_Fewer", "Nulstil")</a> 360 {{/compare}} 361 </div> 362 363 364 365 366 </div> 367 <div class="e-loading-overlay e-product-grid-loading-overlay js-e-product-grid-loading-overlay is-loading"> 368 <div class="e-loading-spinner"></div> 369 </div> 370 {{#if page.productCount}} 371 <ul class="e-grid"> 372 {{#each products}} 373 <li class="@productListLayout js-e-grid-item"> 374 <div class="e-product-container" data-variant-id="{{variantId}}"> 375 <div class="e-product"> 376 <div class="e-product-image-container"> 377 <a class="e-product-image-wrapper" href="{{url}}"> 378 <img src="{{imageLarge}}" alt="" class="e-product-image"> 379 </a> 380 </div> 381 <div class="e-product-text-container"> 382 <h3 class="e-product-text m-b-0"> 383 {{number}} <small>{{color}}</small> 384 </h3> 385 <p class="e-product-name small m-b-0 m-t-0"><a href="{{url}}">{{name}}</a></p> 386 {{#if descriptionShortExtra01}} 387 <p class="e-product-text small"> 388 <a href="{{url}}"> 389 {{descriptionShortExtra01}} 390 </a> 391 </p> 392 {{/if}} 393 </div> 394 </div> 395 </div> 396 </li> 397 398 {{/each}} 399 </ul> 400 {{else}} 401 <div class="alert alert-warning m-t-2" role="alert"> 402 <strong><i class="material-icons material-icons-2x">sentiment_dissatisfied</i> @Translate( "eCom_Productlist_No_Products_Header", "Desværre..")</strong> 403 <br> @Translate( "eCom_Productlist_No_Products_Text", "Ingen produkter matcher dine valg.") 404 </div> 405 {{/if}} 406 <div class="row p-t-1 e-products-bottom"> 407 408 <div class="col-xs-6"> 409 <small>@Translate( "eCom_PriceInfoText_Public", "Alle priser er inkl. moms" )</small> 410 </div> 411 412 <div class="e-products-paging col-xs-6 small"> 413 <small> 414 {{#if page.productCount}} 415 <strong>{{page.viewing.from}} - {{page.viewing.to}}</strong> @Translate( "eCom_Productlist_ProductcountOffText", "ud af ") 416 {{/if}} 417 <strong>{{page.productCount}}</strong> 418 </small> 419 {{#compare page.prevPage '!==' 0 }} 420 <a href="#" class="btn btn-link p-a-0 m-l-1 js-e-productlist-set-pagenum" data-page-num="{{page.prevPage}}"> 421 <i class="material-icons">keyboard_arrow_left</i> 422 <span class="hidden-lg-down"> 423 @Translate( "eCom_Productlist_Pages_Prev", "Forrige") 424 </span> 425 </a> 426 {{/compare}} 427 {{#compare page.nextPage '!==' 0 }} 428 <a href="#" class="btn btn-link p-a-0 m-x-1 js-e-productlist-set-pagenum" data-page-num="{{page.nextPage}}"> 429 <span class="hidden-lg-down"> 430 @Translate( "eCom_Productlist_Pages_Next", "Næste") 431 </span> 432 <i class="material-icons">keyboard_arrow_right</i></a> 433 {{/compare}} 434 {{#compare page.pageSize '!==' 999}} 435 {{#compare page.totalPages '>' 1 }} 436 <a href="#" class="btn btn-link p-a-0 m-l-1 js-e-productlist-set-pagesize hidden-md-down" data-page-size="999"> 437 @Translate( "eCom_Productlist_Pages_Show_All", "Vis alle") 438 </a> 439 {{/compare}} 440 {{/compare}} 441 {{#compare page.pageSize '===' 999}} 442 <a href="#" class="btn btn-link p-a-0 m-l-1 js-e-productlist-set-pagesize hidden-md-down" data-page-size="@Espresso.Item.Pagesize">@Translate( "eCom_Productlist_Pages_Show_Fewer", "Nulstil")</a> 443 {{/compare}} 444 </div> 445 446 @if(Espresso.Item.Filters == "True"){ 447 448 <div class="col-xs-12 m-t-2 hidden-lg-up"> 449 <button class="btn btn-block btn-primary" type="button" data-toggle="modal" data-target="#js-e-productlist-filters-modal">@Translate( "eCom_Productlist_FiltersHeaderText", "Tilpas udvalg") ({{page.filtersAppliedCount}})</button> 450 </div> 451 452 } 453 </div> 454 </div> 455 </script> 456 </div> 457 </div> 458 </div> 459 </div> 460 461 @if(Espresso.Item.ShowFilters == "True"){ 462 <div id="js-e-productlist-filters-modal" class="modal fade e-productlist-filters-modal js-e-productlist-filters-modal modal-fullscreen hidden-lg-up" data-backdrop="false"> 463 <script id="js-e-productlist-filters-modal-template" type="text/x-handlebars-template"> 464 <div class="modal-dialog" role="document"> 465 <div class="modal-content"> 466 <button type="button" class="close" data-dismiss="modal"> 467 <i class="material-icons">close</i> 468 </button> 469 <legend class="modal-header"> 470 @Translate( "eCom_Productlist_FiltersHeaderText", "Tilpas udvalg") 471 </legend> 472 <div class="modal-body"> 473 <ul class="list-group"> 474 <strong>@Translate( "eCom_Productlist_FiltersHeaderText", "Tilpas udvalg")</strong> 475 {{#each facets}} 476 <li class="list-group-item e-productlist-filters-items" role="tablist" aria-multiselectable="true"> 477 <h4 class="m-b-0"> 478 <a id="filter-header-{{param}}" class="e-productlist-filters-header" data-toggle="collapse" href="#filter-modal-panel-{{param}}" aria-expanded="{{#if selectedOptions.length}}true{{else}}false{{/if}}" aria-controls="filter-modal-panel-{{param}}"> 479 {{label}} 480 {{#if selectedOptions.length}} 481 <span>({{selectedOptions.length}})</span> 482 {{/if}} 483 <i class="material-icons e-productlist-filters-collapse-icon">keyboard_arrow_right</i> 484 </a> 485 </h4> 486 <div id="filter-modal-panel-{{param}}" class="e-productlist-filters-collapse form-group collapse js-e-productlist-filters-collapse {{#if selectedOptions.length }}in{{/if}} m-b-0" role="tabpanel" aria-labelledby="filter-header-{{param}}"> 487 <div class="row m-t-2"> 488 <div class="col-xs-6 col-sm-4 col-md-3"> 489 <input class="js-e-productlist-filter-reset-all" name="reset-filter-{{param}}" id="reset-filter-{{param}}" type="checkbox" value="true" {{#compare isCleared '||' isEmpty}}checked{{/compare}}> 490 <label for="reset-filter-{{param}}"> 491 @Translate( "eCom_Productlist_FiltersAllLabelText", "Alle ") 492 </label> 493 </div> 494 {{#each options}} 495 <div class="col-xs-6 col-sm-4 col-md-3"> 496 <input type="checkbox" value="{{value}}" {{#if isSelected}}checked{{/if}} {{#if isDisabled}}disabled{{/if}}> 497 <label class="js-e-productlist-filter-label-mobile" for="{{id}}">{{label}} <span class="small">({{count}})</span></label> 498 </div> 499 {{/each}} 500 </div> 501 </div> 502 </li> 503 {{/each}} 504 <li class="list-group-item e-productlist-filters-items" role="tablist" aria-multiselectable="true"> 505 <h4 class="m-b-0"> 506 <a id="filter-header-price" class="e-productlist-filters-header" data-toggle="collapse" href="#filter-modal-panel-price" aria-expanded="{{#compare page.minPrice.clean '||' page.maxPrice.clean}}true{{else}}false{{/compare}}" aria-controls="filter-modal-panel-price"> 507 @Translate( "eCom_Productlist_FiltersPriceRangeHeader", "Pris") 508 {{#compare page.minPrice.clean '&&' page.maxPrice.clean}} 509 <span>(1)</span> 510 {{/compare}} 511 <i class="material-icons e-productlist-filters-collapse-icon">keyboard_arrow_right</i> 512 </a> 513 </h4> 514 <div id="filter-modal-panel-price" class="e-productlist-filters-collapse form-group collapse js-e-productlist-filters-collapse {{#compare page.minPrice.clean '||' page.maxPrice.clean}}in{{/compare}} m-b-0" role="tabpanel" aria-labelledby="filter-header-price"> 515 <div class="row m-t-1 e-productlist-filters-range-group js-e-productlist-filters-range-group"> 516 <div class="col-xs-4"> 517 <input type="number" class="form-control js-e-productlist-filter-range js-e-productlist-filter-range-min" name="PriceRangeMin" id="PriceRangeMinModal" value="{{page.minPrice.clean}}" placeholder="@Translate("eCom_Productlist_Filters_Price_Min_Text", "Fra")" min="0"> 518 </div> 519 <div class="col-xs-4"> 520 <input type="number" class="form-control js-e-productlist-filter-range js-e-productlist-filter-range-max" name="PriceRangeMax" id="PriceRangeMaxModal" value="{{page.maxPrice.clean}}" placeholder="@Translate("eCom_Productlist_Filters_Price_Max_Text", "Til")" data-msg-pricerange="@Translate("eCom_Productlist_Filters_Price_Error_Msg", "Priser indtastet forkert")"> 521 </div> 522 <div class="col-xs-1"> 523 <button type="button" class="btn btn-link p-x-0 e-productlist-filter-clear-range js-e-productlist-filter-range-clear" data-group-id="js-e-productlist-filters-range-group-price"><i class="material-icons">clear</i></button> 524 </div> 525 <div class="col-xs-3"> 526 <button type="button" class="btn btn-primary p-x-0 btn-sm btn-block e-productlist-filter-apply-range js-e-productlist-filter-apply-range"><i class="material-icons">sync</i></button> 527 </div> 528 529 </div> 530 </li> 531 </ul> 532 </div> 533 <div class="modal-footer"> 534 <a href="#" class="btn btn-secondary js-e-productlist-filter-clear-all">@Translate( "eCom_Productlist_FiltersResetFilterLinkText", "Nulstil alle filtre")</a> 535 <button type="button" class="btn btn-primary" data-dismiss="modal"> 536 @Translate( "eCom_Productlist_FiltersApplyTextModal", "Anvend") 537 </button> 538 </div> 539 </div> 540 </div> 541 </script> 542 </div> 543 544 545 }
keyboard_arrow_up