LEGO® Wear CONTEMPORARY

Error executing template "Designs/legowear/eCom/Productlist/espresso-with-filters.cshtml"System.NullReferenceException: Object reference not set to an instance of an object.at Co3.Kabooki.Dw.Services.ProductService.GetProductPriceInfo(Product product) in C:\Data\Development\git\kabooki-solution-master\Co3.Kabooki.Dynamicweb\Services\ProductService.cs:line 79at CompiledRazorTemplates.Dynamic.RazorEngine_c30150ed49494100bfc582abb6582df5.<>c__DisplayClass9_0.b__0(TextWriter __razor_helper_writer) in E:\Dynamicweb.NET\Solutions\kabooki.espresso4.dk\files\Templates\Designs\legowear\eCom\Productlist\espresso-with-filters.cshtml:line 177at CompiledRazorTemplates.Dynamic.RazorEngine_c30150ed49494100bfc582abb6582df5.<>c__DisplayClass8_0.b__0(TextWriter __razor_helper_writer) in E:\Dynamicweb.NET\Solutions\kabooki.espresso4.dk\files\Templates\Designs\legowear\eCom\Productlist\espresso-with-filters.cshtml:line 161at CompiledRazorTemplates.Dynamic.RazorEngine_c30150ed49494100bfc582abb6582df5.Execute() in E:\Dynamicweb.NET\Solutions\kabooki.espresso4.dk\files\Templates\Designs\legowear\eCom\Productlist\espresso-with-filters.cshtml:line 703at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.b__0(TextWriter writer)at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Co3.Espresso.Website.TemplateBases.Paragraphs.Module 2 3 @using Co3.Espresso.Base.Extensions 4 @using Co3.Espresso.Website.Models.FrontEnd 5 @using Co3.Espresso.Website.Services 6 @using Dynamicweb.Content 7 @using Dynamicweb.Content.Items.Metadata 8 @using Dynamicweb.Content.Items 9 @using Dynamicweb.Frontend 10 @using System.Web 11 @using System.Web.Util 12 @using Co3.Espresso.Website.Services 13 @using Dynamicweb.Admin.dk.dynamicweb.templates 14 @using ParagraphService = Co3.Espresso.Website.Services.ParagraphService 15 16 @using System.Globalization 17 @using System.Security.Cryptography.X509Certificates 18 @using Co3.Espresso.Base.Extensions 19 @using Co3.Espresso.Website.Models.FrontEnd 20 @using Co3.Espresso.Website.Services 21 @using Dynamicweb.Content 22 @using Dynamicweb.Ecommerce.Stocks 23 @using Dynamicweb.Frontend 24 @using Dynamicweb.Rendering 25 @using EcomContext = Dynamicweb.Ecommerce.Common.Context 26 @using System.Web 27 @using EspressoProductService = Co3.Espresso.Website.Services.ProductService 28 @using Co3.Kabooki.Dw.Models 29 @using Co3.Espresso.Website.Models.FrontEnd.Elements 30 @using Dynamicweb.Rendering.Translation 31 32 @functions { 33 34 public string getCountryCodeFromArea( Area area ) 35 { 36 RegionInfo regionInfo = new RegionInfo( area.CultureInfo.LCID ); 37 return regionInfo.TwoLetterISORegionName; 38 } 39 40 public static string GetStandardCollapseToggleTextExpand() 41 { 42 return "Se mere"; 43 } 44 45 public static string GetStandardCollapseToggleTextCollapse() 46 { 47 return "Se mindre"; 48 } 49 50 public static string getOLDProductlistItemImageColorDot( string variantColorImageName = "" ) 51 { 52 string imagePath = string.Format( "/Files/Images/produkter/{0}_4.jpg", variantColorImageName ); 53 string image = ImageService.Instance.GetImageURL( imagePath, 40, 120, 1, 10, "png" ); 54 if ( !System.IO.File.Exists(HttpContext.Current.Server.MapPath(imagePath)) ) 55 { 56 imagePath = string.Format( "/Files/Images/produkter/{0}_3.jpg", variantColorImageName ); 57 image = ImageService.Instance.GetImageURL( imagePath, 80, 80, 5, 10, "png" ); 58 } 59 return image; 60 } 61 62 public static string getProductlistItemImageColorDot( string variantColorImageName = "" ) 63 { 64 string getImageSyntax = "/admin/public/getimage.ashx?Image={0}&Width=30&Height=140&Format=jpg&Quality=10&Crop=3&AlternativeImage={1}"; 65 string imagePath = string.Format( "/Files/Images/produkter/{0}_4.jpg", variantColorImageName ); 66 string altImagePath = string.Format( "/Files/Images/produkter/{0}_3.jpg", variantColorImageName ); 67 string image = string.Format( getImageSyntax, imagePath, altImagePath ); 68 return image; 69 } 70 71 public static string getProductImageColorDot(string productNumber = "", string variantImageNumber = "" ) 72 { 73 string getImageSyntax = "/admin/public/getimage.ashx?Image={0}&Width=80&Height=350&Format=jpg&Quality=10&Crop=3&AlternativeImage={1}"; 74 string imagePath = string.Format( "/Files/Images/produkter/{0}-{1}_4.jpg", productNumber, variantImageNumber ); 75 string altImagePath = string.Format( "/Files/Images/produkter/{0}-{1}_3.jpg", productNumber, variantImageNumber ); 76 string image = string.Format( getImageSyntax, imagePath, altImagePath ); 77 return image; 78 } 79 } 80 81 @helper ProductDescription( string sectionClasses = "e-section", bool sectionCollapse = false, string contentClasses = null, string heading = null, string content = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null ) 82 { 83 if ( string.IsNullOrEmpty( content ) == false ) 84 { 85 ClassList headingClassList = new ClassList(); 86 headingClassList.AddClasses( "col-12" ); 87 ClassList contentClassList = new ClassList(); 88 contentClassList.AddClasses( "col-12" ); 89 90 @sectionStart( sectionClasses: sectionClasses, sectionCollapse: sectionCollapse, contentClasses: contentClasses, collapseToggleTextCollapse: collapseToggleTextCollapse, collapseToggleTextExpand: collapseToggleTextExpand ) 91 92 if ( string.IsNullOrEmpty( heading ) == false ) 93 { 94 <div class="@headingClassList"> 95 <h2>@heading</h2> 96 </div> 97 } 98 <div class="@contentClassList"> 99 @content100 </div>101102 @sectionEnd()103 }104 }105106107 @helper ProductVideo( string sectionClasses = "e-section", string contentClasses = null, string heading = null, string videoURL = null )108 {109 if ( string.IsNullOrEmpty( videoURL ) == false )110 {111 ClassList headingClassList = new ClassList();112 headingClassList.AddClasses( "col-12" );113 ClassList contentClassList = new ClassList();114 contentClassList.AddClasses( "col-12" );115116117 @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses )118119 if ( string.IsNullOrEmpty( heading ) == false )120 {121 <div class="@headingClassList">122 <h2>@heading</h2>123 </div>124 }125126 <div class="@contentClassList">127 <div class="embed-responsive embed-responsive-16by9 mb-2">128 <iframe class="embed-responsive-item" src="@videoURL" width="1080" height="608" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>129 </div>130 </div>131 @sectionEnd()132 }133 }134135 @helper ProductRelatedProducts( string sectionClasses = "e-section", string contentClasses = null, string heading = null,136 IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productLoop = null )137 {138 if ( productLoop != null && productLoop.Any() == true )139 {140 ClassList headingClassList = new ClassList();141 headingClassList.AddClasses( "col-12" );142 ClassList contentClassList = new ClassList();143 contentClassList.AddClasses( "col-12" );144145 @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses )146147 if ( string.IsNullOrEmpty( heading ) == false )148 {149 <div class="@headingClassList">150 <h2 class="text-center">@heading</h2>151 </div>152 }153 <div class="@contentClassList">154 <div class="e-products mb-2">155 <div class="row">156 @{157 string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth( null ).ToResponsiveClasses();158 }159 @foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product in productLoop )160 {161 @ProductlistItem( product, productlistItemClassList )162 }163 </div>164 </div>165 </div>166167 @sectionEnd()168 }169 }170171 @helper ProductlistItem( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product, string productlistItemClassList = null )172 {173 if ( product != null )174 {175 Dynamicweb.Ecommerce.Products.Product dwProduct = Dynamicweb.Ecommerce.Services.Products.GetProductById( product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ), EcomContext.LanguageID, false );176177 ProductPriceInfo variantPriceInfo = Co3.Kabooki.Dw.Services.ProductService.Instance.GetProductPriceInfo( dwProduct );178 EspressoPrice espressoPrice = new EspressoPrice(variantPriceInfo.Price.PriceWithVAT);179 EspressoPrice espressoListPrice = new EspressoPrice(variantPriceInfo.ListPrice.PriceWithVAT);180 bool hasDiscount = variantPriceInfo.Price.PriceWithVAT < variantPriceInfo.ListPrice.PriceWithVAT;181182 dynamic colorVariantImages = new List< dynamic >();183 int colorVariantImagesCount = 0;184 foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem variantCombination in product.GetLoop( "VariantCombinations" ) )185 {186 string variantColorImageName = variantCombination.GetString( "Ecom:Product:Field.VariantImage.Value.Clean" );187 //string imagePath = ImageService.Instance.GetImageURL( string.Format( "/Files/Images/produkter/{0}_3.jpg", variantColorImageName ), 80, 80, 5, 10, "png" );188 string imagePath = getProductlistItemImageColorDot( variantColorImageName );189 if ( JsonService.Instance.ToJson( colorVariantImages ).ToString().Contains( imagePath ) == false )190 {191 colorVariantImages.Add( new192 {193 path = imagePath194 } );195 ++colorVariantImagesCount;196 }197 }198199 dynamic productData = new200 {201 id = product.GetString( "Ecom:Product.ID" ),202 variantId = product.GetString( "Ecom:Product.VariantID" ),203 url = ProductService.Instance.GetProductLink( product.GetString( "Ecom:Product.PrimaryOrFirstGroupID" ), product.GetString( "Ecom:Product.ID" ) ),204 number = product.GetString( "Ecom:Product.Number" ),205 name = ProductService.Instance.GetName( product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ) ),206 imageLarge = ImageService.Instance.GetImageURL( product.GetString("Ecom:Product.ImageDefault.Default.Clean"), 400, 400, 5, 10, "png" ),207 price = espressoPrice,208 beforePrice = espressoListPrice,209 descriptionShortExtra01 = product.GetString( "Ecom:Product:Field.DescriptionShortExtra01" ),210 hasDiscount = hasDiscount,211 stock = dwProduct.Stock,212 stockStatus = dwProduct.get_StockStatus(EcomContext.LanguageID),213 colorVariantImagesCount = colorVariantImagesCount,214 colorVariantImages = colorVariantImages215 };216217 string labelColor = Translation.GetTranslation( "eCom Product - Color - Text" );218 if ( productData.colorVariantImagesCount > 1 )219 {220 labelColor = Translation.GetTranslation( "eCom Product - Colors - Text" );221 }222223 @*,224 stock = new225 {226 id = product.GetString( "Ecom:Product:Stock.ID" ),227 quantity = product.GetString( "Ecom:Product.Stock" ),228 text = product.GetString( "Ecom:Product:Stock.Text" ),229 delivery = product.GetString( "Ecom:Product:Stock.DeliveryText" )230 }*@231232 <div class="@productlistItemClassList">233 <div class="e-products-item js-e-products-item js-e-products-item-@productData.id js-e-block-link e-block-link" data-variant-id="@productData.variantId">234 <div class="e-products-item-container">235 <div class="e-products-item-image-container">236 <a class="e-products-item-image-wrapper" href="@productData.url">237 <img src="@productData.imageLarge" alt="" class="e-products-item-image">238 @if ( productData.hasDiscount )239 {240 <img src="/Files/Images/kabooki/system/lego_wear_badge_percentage.svg" alt="" class="custom-products-item-badge">241 }242 </a>243 </div>244 <div class="e-products-item-text-container text-left small">245 <div class="custom-color-options-wrapper">246 <div class="custom-color-options-text">247 <p class="m-0 p-0">@productData.colorVariantImagesCount @labelColor</p>248 </div>249 <div class="custom-color-options-colors">250 @foreach ( dynamic colorVariantImage in colorVariantImages )251 {252 <span class="custom-color-dot" style="background-image: url('@colorVariantImage.path');"></span>253 }254255 @*<span class="custom-color-dot" style="background-color: #f75e50;"></span>256 <span class="custom-color-dot" style="background-color: #eac761;"></span>257 <span class="custom-color-dot" style="background-color: #e8df9c;"></span>258 <span class="custom-color-dot" style="background-color: #91c09e;"></span>259 <span class="custom-color-dot" style="background-color: #7d7769;"></span>*@260261 </div>262 </div>263264 <h3 class="e-products-item-name mb-0 mt-0">265 <a href="@productData.url">@productData.name</a>266 </h3>267 <p class="e-products-item-text mb-0">268 <span class="e-products-item-price">269 <a href="@productData.url">270 @productData.price271 @if ( productData.hasDiscount )272 {273 <span class="custom-products-item-beforeprice">@productData.beforePrice</span>274 }275 </a>276 </span>277 </p>278 </div>279 </div>280 </div>281 </div>282 }283 }284285286 @helper sectionStart( string sectionClasses = "e-section", string contentClasses = null, bool sectionCollapse = false, string sectionId = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null )287 {288 sectionId = string.IsNullOrEmpty( sectionId ) ? Guid.NewGuid().ToString( "N" ) : sectionId;289 ClassList sectionClassList = new ClassList();290 sectionClassList.AddClasses( sectionClasses );291 ClassList contentClassList;292293 if ( contentClasses == null )294 {295 contentClassList = Co3.Espresso.Website.Services.PageService.Instance.GetResponsiveClassesFromPageItem( PageView.Current().Page.Item );296 }297 else298 {299 contentClassList = new ClassList();300 contentClassList.AddClasses( contentClasses );301 }302303 // TODO: Split collapse logic into separate helper function.304 string collapseId = Guid.NewGuid().ToString( "N" );305 ClassList collapseToggleClassList = new ClassList();306 if ( sectionCollapse )307 {308 sectionClassList.AddClasses( "p-section-collapse js-p-section-collapse" );309 collapseToggleClassList.AddClasses( contentClasses );310 collapseToggleClassList.AddClasses( "p-section-collapse-toggle collapsed order-last text-center" );311 contentClassList.AddClasses( "p-section-collapse-content collapse is-md" );312 }313314 @:<section class="@sectionClassList" id="@sectionId">315 @:<div class="container-fluid">316 @:<div class="row">317318 // TODO: Split collapse logic into separate helper function.319 if ( sectionCollapse )320 {321 <div class="@collapseToggleClassList" data-toggle="collapse" data-target="#@collapseId">322 <button class="btn btn-primary p-section-collapse-toggle-btn" type="button">323 <i class="material-icons p-section-collapse-toggle-icon">keyboard_arrow_down</i>324 </button>325 <small class="h4 p-section-collapse-toggle-text" data-expand-text="@( string.IsNullOrEmpty( collapseToggleTextExpand ) ? GetStandardCollapseToggleTextExpand() : collapseToggleTextExpand )" data-collapse-text="@( string.IsNullOrEmpty( collapseToggleTextCollapse ) ? GetStandardCollapseToggleTextCollapse() : collapseToggleTextCollapse )"></small>326 </div>327 }328329 @:<div class="@contentClassList" id="@collapseId">330 @:<div class="row">331 }332333 @helper sectionEnd()334 {335 @:</div>336 @:</div>337 @:</div>338 @:</div>339 @:</section>340 }341342343344345 @{346 ClassList productlistMainClassList = new ClassList();347 productlistMainClassList.AddClasses( "col-12" );348 if ( Espresso.Item.FiltersShow == "True" )349 {350 productlistMainClassList.AddClasses( "col-lg-9 col-xl-9" );351 }352 ClassList productlistAsideClassList = new ClassList();353 productlistAsideClassList.AddClasses( "col-12 col-lg-3 col-xl-3 order-lg-first" );354355 ClassList productlistItemClassList = new ClassList();356 Dictionary< string, decimal > paragraphEcommerceGridItemWidth = ProductlistService.Instance.GetGridItemWidth( PageView.Current().CurrentParagraph.Item.GetValue< string >( "ItemWidth" ) );357 productlistItemClassList.AddClasses( paragraphEcommerceGridItemWidth.ToResponsiveClasses() );358359 List< string > productIds = new List< string >();360 List< LoopItem > mostPopularProducts = new List< LoopItem >();361 foreach ( LoopItem product in GetLoop( "eCom:Related.MostPopularProducts" ) )362 {363 if ( !productIds.Contains( product.GetString( "Ecom:Product.ID" ) ) )364 {365 mostPopularProducts.Add( product );366 productIds.Add(product.GetString( "Ecom:Product.ID" ));367 if ( mostPopularProducts.Count() == 4 )368 {369 break;370 }371 }372 }373 }374375 <div class="js-e-loading-wait js-e-productlist">376377 <div class="row">378 <div class="col-12">379 <div class="js-e-productslist-header">380 <div class="align-items-end row">381382 @if ( Espresso.Item.FiltersShow == "True" )383 {384 <div class="@productlistAsideClassList d-lg-block d-none">385 <div class="border-bottom e-productslist-header">386 <p class="m-0">387 @Translate( "eCom Productlist Filters - Customize Selection - Heading", "Filter products" )388 @*<span class="e-productlist-product-count font-weight-normal js-e-productlist-product-count pl-1 text-muted"></span>*@389 </p>390 </div>391 </div>392 }393394 @if ( Espresso.Item.SortShow == "True" || Espresso.Item.PagingShow == "True" || Espresso.Item.FiltersShow == "True" )395 {396 <div class="@productlistMainClassList small">397 <div class="align-items-end border-bottom d-lg-flex d-none e-productslist-header align-content-between flex-wrap">398 @*@if ( Espresso.Item.SortShow == "True" )399 {400 <div class="align-items-center d-flex js-e-productlist-sort">401 <script id="js-e-handlebars-tmpl-productlist-sort" type="text/x-handlebars-template">402 <fieldset class="form-inline">403 <label for="Sort" class="mr-1 d-none">404 @Translate( "eCom Productlist - Sorting - Label", "Sort: " )405 </label>406 <select name="Sort" class="js-e-productlist-sort-select custom-select" style="padding-bottom:0.25em;">407 <option value="SortName ASC" {{#compare sort.sort '===' 'SortName ASC'}}selected{{/compare}}>@Translate( "eCom Productlist - Sorting - Name ASC - Label", "Name ASC" )</option>408 <option value="Created ASC" {{#compare sort.sort '===' 'Created ASC'}}selected{{/compare}}>@Translate( "eCom Productlist - Sorting - Created ASC - Label", "Created ASC" )</option>409 <option value="SortPrice ASC" {{#compare sort.sort '===' 'SortPrice ASC'}}selected{{/compare}}>@Translate( "eCom Productlist - Sorting - Price ASC - Label", "Price ASC" )</option>410 <option value="SortPrice DESC" {{#compare sort.sort '===' 'SortPrice DESC'}}selected{{/compare}}>@Translate( "eCom Productlist - Sorting - Price DESC - Label", "Price DESC" )</option>411 </select>412 </fieldset>413 </script>414 </div>415416 }*@417 @if ( Espresso.Item.PagingShow == "True" )418 {419 <div class="align-items-center d-flex e-productlist-paging js-e-productlist-paging justify-content-between ml-auto">420 <script id="js-e-handlebars-tmpl-productlist-paging" type="text/x-handlebars-template">421 {{#if page.productCount}}422 <span class="text-nowrap {{#compare page.totalPages '>' 1 }}mr-4{{/compare}}">423 <strong>{{page.viewing.from}} - {{page.viewing.to}}</strong> @Translate( "eCom Productlist Paging - Product Count Of - Text", "of" )424 <span> {{page.productCount}}</span>425 </span>426427428 <span class="">429 {{#compare page.prevPage '!==' 0 }}430 <a href="{{page.pagingUrl}}={{page.prevPage}}" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pl-1 mr-1 js-e-productlist-set-pagenum" data-page-num="{{page.prevPage}}">431 <i class="material-icons">arrow_back</i>432 <span class="">@Translate( "eCom Productlist Paging - Previous - Text", "Previous" )</span>433 </a>434 {{/compare}}435436 {{#compare page.nextPage '!==' 0 }}437 <a href="{{page.pagingUrl}}={{page.nextPage}}" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pr-1 ml-1 js-e-productlist-set-pagenum" data-page-num="{{page.nextPage}}">438 <span class="">@Translate( "eCom Productlist Paging - Next - Text", "Next" )</span>439 <i class="material-icons">arrow_forward</i></a>440 {{/compare}}441442 {{#compare page.pageSize '!==' 999}}443 {{#compare page.totalPages '>' 1 }}444 <a href="{{page.pagingUrl}}=9999" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pl-1 js-e-productlist-set-pagesize" data-page-size="999">445 @Translate( "eCom Productlist Paging - Show All - Text", "Show all" )446 </a>447 {{/compare}}448 {{/compare}}449450 {{#compare page.pageSize '===' 999}}451 <a href="#" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pl-1 js-e-productlist-set-pagesize d-none" data-page-size="@Espresso.Item.Pagesize">452 @Translate( "eCom Productlist Paging - Reset - Link", "Reset" )453 </a>454 {{/compare}}455456 <span>457 {{/if}}458 </script>459 </div>460461462 }463 </div>464 <div class="align-items-stretch d-flex d-lg-none e-productslist-header flex-wrap justify-content-strech">465 <div class="align-items-center bg-info d-flex justify-content-between p-1 w-100">466 @if ( Espresso.Item.SortShow == "True" )467 {468 <div class="align-items-center d-flex js-e-productlist-sort">469 <script id="js-e-handlebars-tmpl-productlist-sort" type="text/x-handlebars-template">470 <fieldset class="form-inline">471 <label for="Sort" class="mr-1 d-none">472 @Translate( "eCom Productlist - Sorting - Label", "Sort: " )473 </label>474 <select name="Sort" class="js-e-productlist-sort-select custom-select" style="padding-bottom:0.25em;">475 <option value="SortName ASC" {{#compare sort.sort '===' 'SortName ASC'}}selected{{/compare}}>@Translate( "eCom Productlist - Sorting - Name ASC - Label", "Name ASC" )</option>476 <option value="Created ASC" {{#compare sort.sort '===' 'Created ASC'}}selected{{/compare}}>@Translate( "eCom Productlist - Sorting - Created ASC - Label", "Created ASC" )</option>477 <option value="SortPrice ASC" {{#compare sort.sort '===' 'SortPrice ASC'}}selected{{/compare}}>@Translate( "eCom Productlist - Sorting - Price ASC - Label", "Price ASC" )</option>478 <option value="SortPrice DESC" {{#compare sort.sort '===' 'SortPrice DESC'}}selected{{/compare}}>@Translate( "eCom Productlist - Sorting - Price DESC - Label", "Price DESC" )</option>479 </select>480 </fieldset>481 </script>482 </div>483484 }485 @if ( Espresso.Item.FiltersShow == "True" )486 {487 <button class="btn btn-primary js-e-productlist-filters-modal-toggle" data-target="#js-e-productlist-filters-modal" data-toggle="modal" type="button">488 <i class="material-icons material-icons-large">tune</i>489 @Translate( "eCom Productlist Filters - Customize Selection - Button", "Filters" )490 <span class="ml-2 badge badge-primary js-e-productlist-filters-applied-count"></span>491 </button>492 }493 </div>494 <div class="py-1 flex-grow-1">495 @if ( Espresso.Item.PagingShow == "True" )496 {497 <div class="align-items-center d-flex e-productlist-paging js-e-productlist-paging justify-content-between ml-auto">498 <script id="js-e-handlebars-tmpl-productlist-paging" type="text/x-handlebars-template">499 {{#if page.productCount}}500 <span class="text-nowrap {{#compare page.totalPages '>' 1 }}mr-4{{/compare}}">501 <strong>{{page.viewing.from}} - {{page.viewing.to}}</strong> @Translate( "eCom Productlist Paging - Product Count Of - Text", "of" )502 <span> {{page.productCount}}</span>503 </span>504505506 <span class="">507 {{#compare page.prevPage '!==' 0 }}508 <a href="{{page.pagingUrl}}={{page.prevPage}}" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pl-1 mr-1 js-e-productlist-set-pagenum" data-page-num="{{page.prevPage}}">509 <i class="material-icons">arrow_back</i>510 <span class="">@Translate( "eCom Productlist Paging - Previous - Text", "Previous" )</span>511 </a>512 {{/compare}}513514 {{#compare page.nextPage '!==' 0 }}515 <a href="{{page.pagingUrl}}={{page.nextPage}}" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pr-1 ml-1 js-e-productlist-set-pagenum" data-page-num="{{page.nextPage}}">516 <span class="">@Translate( "eCom Productlist Paging - Next - Text", "Next" )</span>517 <i class="material-icons">arrow_forward</i></a>518 {{/compare}}519520 {{#compare page.pageSize '!==' 999}}521 {{#compare page.totalPages '>' 1 }}522 <a href="{{page.pagingUrl}}=9999" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pl-1 js-e-productlist-set-pagesize" data-page-size="999">523 @Translate( "eCom Productlist Paging - Show All - Text", "Show all" )524 </a>525 {{/compare}}526 {{/compare}}527528 {{#compare page.pageSize '===' 999}}529 <a href="#" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pl-1 js-e-productlist-set-pagesize d-none" data-page-size="@Espresso.Item.Pagesize">530 @Translate( "eCom Productlist Paging - Reset - Link", "Reset" )531 </a>532 {{/compare}}533534 <span>535 {{/if}}536 </script>537 </div>538539540 }541 </div>542 </div>543 </div>544 }545546 </div>547 </div>548549 </div>550 </div>551 <div class="row">552 <div class="col-12">553554555556 <div class="e-productlist-body">557 <div class="row">558 <div class="@productlistMainClassList">559 <div id="js-e-productlist-products">560 <ul itemscope itemtype="http://schema.org/ItemList">561 @foreach ( LoopItem product in GetLoop( "Products" ) )562 {563 <li itemprop="itemListElement" itemscope itemtype="http://schema.org/Product">564 <a href="@ProductService.Instance.GetProductLink( product.GetString( "Ecom:Product.PrimaryOrFirstGroupID" ), product.GetString( "Ecom:Product.ID" ) )" title="@ProductService.Instance.GetName( product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ) )" itemprop="url">565 <h3 itemprop="name">@ProductService.Instance.GetName( product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ) )</h3>566 <p itemprop="description">@product.GetString( "Ecom:Product.ShortDescription" )</p>567 </a>568 </li>569 }570 </ul>571 @if ( GetLoop( "Ecom:ProductList.Pages" ).Count > 0 )572 {573 <ol>574 @foreach ( LoopItem page in GetLoop( "Ecom:ProductList.Pages" ) )575 {576 <li>577 <a href="@page.GetString( "Ecom:ProductList.Pages.Page.Url" )">@page.GetString( "Ecom:ProductList.Pages.Page.Number" )</a>578 </li>579 }580 </ol>581 }582583 <script id="js-e-handlebars-tmpl-productlist-products" type="text/x-handlebars-template">584 <div class="e-products">585 <div class="e-loading-overlay e-products-loading-overlay js-e-products-loading-overlay is-loading">586 <div class="e-loading-spinner"></div>587 </div>588 {{#if page.productCount}}589 <div class="row">590 {{#each products}}591 <div class="@productlistItemClassList">592 <div class="e-products-item js-e-products-item js-e-products-item-{{id}} js-e-block-link e-block-link" data-variant-id="{{variantId}}">593 <div class="e-products-item-container">594 <div class="e-products-item-image-container">595 <a class="e-products-item-image-wrapper" href="{{url}}">596 <img src="{{imageLarge}}" alt="" class="e-products-item-image">597 {{#if hasDiscount}}598 <img src="/Files/Images/kabooki/system/lego_wear_badge_percentage.svg" alt="" class="custom-products-item-badge">599 {{/if}}600 </a>601 </div>602603 <div class="e-products-item-text-container text-left small">604 <div class="custom-color-options-wrapper">605 <div class="custom-color-options-text"><p class="m-0 p-0">{{colorVariantImagesCount}} {{#compare colorVariantImagesCount '===' 1}}@Translate( "eCom Product - Color - Text", "Color" ){{else}}@Translate( "eCom Product - Colors - Text", "Colors" ){{/compare}}</p></div>606 <div class="custom-color-options-colors">607 {{#each colorVariantImages}}608 <span class="custom-color-dot" style="background-image: url('{{path}}');"></span>609 {{/each}}610 </div>611 </div>612613 <h3 class="e-products-item-name mb-0 mt-0"><a href="{{url}}">{{name}}</a></h3>614 <p class="e-products-item-text mb-0">615 <span class="e-products-item-price">616 <a href="{{url}}">617 {{{price}}}618 <span class="d-block{{#if priceBefore}} custom-products-item-beforeprice{{/if}}">{{{priceBefore}}} {{currency}}</span>619 </a>620 </span>621 </p>622 </div>623 </div>624 </div>625 </div>626627 {{/each}}628 </div>629 {{else}}630 <div class="alert alert-warning mt-2" role="alert">631 <strong><i class="material-icons material-icons-2x">sentiment_dissatisfied</i>&nbsp;@Translate( "eCom Productlist - Sorry - Text", "Sorry..")</strong>632 <br> @Translate( "eCom Productlist - No Products - Text", "No products match your choices.")633 </div>634 {{/if}}635 </div>636 </script>637638639 </div>640 @if ( Espresso.Item.FooterShow == "True" )641 {642 <div class="align-items-end d-flex justify-content-between pt-1 small">643 <div class="align-items-center d-flex e-products-price-info">644 @if ( PriceService.Instance.ShowPriceWithVat )645 {646 <span>@Translate( "eCom Productlist - Prices are incl. VAT - Text", "All prices are incl. VAT" )</span>647 }648 else649 {650 <span>@Translate( "eCom Productlist - Prices are excl. VAT - Text", "All prices are excl. VAT" )</span>651 }652 </div>653 @if ( Espresso.Item.PagingShow == "True" )654 {655 <div class="align-items-center d-flex e-productlist-paging js-e-productlist-paging justify-content-between ml-auto">656 <script id="js-e-handlebars-tmpl-productlist-paging" type="text/x-handlebars-template">657 {{#if page.productCount}}658 <span class="text-nowrap {{#compare page.totalPages '>' 1 }}mr-4{{/compare}}">659 <strong>{{page.viewing.from}} - {{page.viewing.to}}</strong> @Translate( "eCom Productlist Paging - Product Count Of - Text", "of" )660 <span> {{page.productCount}}</span>661 </span>662663664 <span class="">665 {{#compare page.prevPage '!==' 0 }}666 <a href="{{page.pagingUrl}}={{page.prevPage}}" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pl-1 mr-1 js-e-productlist-set-pagenum" data-page-num="{{page.prevPage}}">667 <i class="material-icons">arrow_back</i>668 <span class="">@Translate( "eCom Productlist Paging - Previous - Text", "Previous" )</span>669 </a>670 {{/compare}}671672 {{#compare page.nextPage '!==' 0 }}673 <a href="{{page.pagingUrl}}={{page.nextPage}}" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pr-1 ml-1 js-e-productlist-set-pagenum" data-page-num="{{page.nextPage}}">674 <span class="">@Translate( "eCom Productlist Paging - Next - Text", "Next" )</span>675 <i class="material-icons">arrow_forward</i></a>676 {{/compare}}677678 {{#compare page.pageSize '!==' 999}}679 {{#compare page.totalPages '>' 1 }}680 <a href="{{page.pagingUrl}}=9999" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pl-1 js-e-productlist-set-pagesize" data-page-size="999">681 @Translate( "eCom Productlist Paging - Show All - Text", "Show all" )682 </a>683 {{/compare}}684 {{/compare}}685686 {{#compare page.pageSize '===' 999}}687 <a href="#" class="text-auto text-uppercase text-nowrap text-decoration-none p-0 pl-1 js-e-productlist-set-pagesize d-none" data-page-size="@Espresso.Item.Pagesize">688 @Translate( "eCom Productlist Paging - Reset - Link", "Reset" )689 </a>690 {{/compare}}691692 <span>693 {{/if}}694 </script>695 </div>696697 }698 </div>699 }700701702703 @ProductRelatedProducts(704 heading: Translate( "eCom Product - Most popular items - Heading", "Most popular items" ),705 productLoop: mostPopularProducts,706 sectionClasses: "p-section border-top mt-5"707 )708709 </div>710 <div class="@productlistAsideClassList">711 <form class="js-e-productlist-form" data-action="@Espresso.Item.Url">712 @*@{713 string pageUrl = GetGlobalValue( "Global:Pageview.Url" );714 string sortBy = string.IsNullOrEmpty( HttpContext.Current.Request["SortBy"] ) ? GetString( "Ecom:ProductList.SortBy" ) : HttpContext.Current.Request["SortBy"];715 if ( sortBy == "Name" || sortBy == "Price" )716 {717 sortBy = "Sort" + sortBy;718 }719 else if ( sortBy == "UserDefined" )720 {721 sortBy = "PrimaryGroupSort";722 }723 else if ( sortBy == "UnitStock" )724 {725 sortBy = "Stock";726 }727 string sortOrder = string.IsNullOrEmpty( HttpContext.Current.Request["SortOrder"] ) ? GetString( "Ecom:ProductList.SortOrder" ) : HttpContext.Current.Request["SortOrder"];728 string pageSize = string.IsNullOrEmpty( HttpContext.Current.Request["PageSize"] ) ? GetString( "Ecom:ProductList.PageSize" ) : HttpContext.Current.Request["PageSize"];729 string pageNum = string.IsNullOrEmpty( HttpContext.Current.Request["PageNum"] ) ? GetString( "Ecom:ProductList.CurrentPage" ) : HttpContext.Current.Request["PageNum"];730 }731 <input type="hidden" name="ID" value="@Espresso.Page.ID">732 <input type="hidden" name="PageNum" value="@HttpUtility.HtmlAttributeEncode( pageNum )">733 <input type="hidden" name="PageUrl" value="@HttpUtility.HtmlAttributeEncode( pageUrl )">734 <input type="hidden" name="SortBy" value="@HttpUtility.HtmlAttributeEncode( sortBy )">735 <input type="hidden" name="SortOrder" value="@HttpUtility.HtmlAttributeEncode( sortOrder )">736 <input type="hidden" name="PageSize" value="@HttpUtility.HtmlAttributeEncode( pageSize )">737738 @if ( Espresso.Item.FiltersShow == "True" )739 {740 foreach ( LoopItem facetGroup in GetLoop( "FacetGroups" ) )741 {742 <input type="hidden" name="fg" value="@facetGroup.GetString( "FacetGroup.Name" )">743 }744 <input type="hidden" class="js-e-visible-options-count" value="@Espresso.Item.FiltersVisibleOptionCount">745 }746 @foreach ( LoopItem query in GetLoop( "Query.Parameters" ) )747 {748 if ( string.IsNullOrEmpty( query.GetString( "Parameter.Value" ) ) == false )749 {750 if ( query.GetBoolean( "Parameter.IsHandledAsFacet" ) == false && query.GetString( "Parameter.Name" ) != "q" )751 {752 <input type="hidden" name="@query.GetString( "Parameter.Name" )" value="@HttpUtility.HtmlAttributeEncode( query.GetString( "Parameter.Value" ) )">753 }754 }755 }*@756 @{757 string pageUrl = GetGlobalValue( "Global:Pageview.Url" );758 string sortBy = string.IsNullOrEmpty( HttpContext.Current.Request["SortBy"] ) ? GetString( "Ecom:ProductList.SortBy" ) : HttpContext.Current.Request["SortBy"];759 if ( sortBy == "Name" || sortBy == "Price" )760 {761 sortBy = "Sort" + sortBy;762 }763 else if ( sortBy == "UserDefined" )764 {765 sortBy = "PrimaryGroupSort";766 }767 else if ( sortBy == "UnitStock" )768 {769 sortBy = "Stock";770 }771 string sortOrder = string.IsNullOrEmpty( HttpContext.Current.Request["SortOrder"] ) ? GetString( "Ecom:ProductList.SortOrder" ) : HttpContext.Current.Request["SortOrder"];772 string pageSize = string.IsNullOrEmpty( HttpContext.Current.Request["PageSize"] ) ? GetString( "Ecom:ProductList.PageSize" ) : HttpContext.Current.Request["PageSize"];773 string pageNum = string.IsNullOrEmpty( HttpContext.Current.Request["PageNum"] ) ? GetString( "Ecom:ProductList.CurrentPage" ) : HttpContext.Current.Request["PageNum"];774 }775 <input type="hidden" name="ID" value="@Espresso.Page.ID">776 <input type="hidden" name="PageNum" value="@HttpUtility.HtmlAttributeEncode( pageNum )">777 <input type="hidden" name="PageUrl" value="@HttpUtility.HtmlAttributeEncode( pageUrl )">778 @*<input type="hidden" name="SortBy" value="@HttpUtility.HtmlAttributeEncode( sortBy )">779 <input type="hidden" name="SortOrder" value="@HttpUtility.HtmlAttributeEncode( sortOrder )">*@780 <input type="hidden" name="PageSize" value="@HttpUtility.HtmlAttributeEncode( pageSize )">781782 @if ( Espresso.Item.FiltersShow == "True" )783 {784 foreach ( LoopItem facetGroup in GetLoop( "FacetGroups" ) )785 {786 <input type="hidden" name="fg" value="@facetGroup.GetString( "FacetGroup.Name" )">787 }788 <input type="hidden" class="js-e-visible-options-count" value="@Espresso.Item.FiltersVisibleOptionCount">789 }790 @foreach ( LoopItem query in GetLoop( "Query.Parameters" ) )791 {792 if ( string.IsNullOrEmpty( query.GetString( "Parameter.Value" ) ) == false )793 {794 if ( query.GetBoolean( "Parameter.IsHandledAsFacet" ) == false && query.GetString( "Parameter.Name" ) != "q" )795 {796 <input type="hidden" name="@query.GetString( "Parameter.Name" )" value="@HttpUtility.HtmlAttributeEncode( query.GetString( "Parameter.Value" ) )">797 }798 }799 }800801 <div id="js-e-productlist-filters" class="d-lg-block d-none">802 <script id="js-e-handlebars-tmpl-productlist-filters" type="text/x-handlebars-template">803 @*804 {{#if page.filtersAppliedCount}}805 <div class="e-productlist-filters-group e-productlist-filters-group-summery">806 <p class="e-productlist-filters-group-header small mb-0">807 <span class="e-productlist-filters-group-name h4 m-0 pl-0">@Translate( "eCom Productlist Filters - Selected - Text", "Selected filters" )</span>808 <button type="button" class="btn btn-sm btn-link py-1 px-0 js-e-productlist-filters-clear-all">@Translate( "eCom Productlist Filter - Group Reset - Button", "Reset" )</button>809 </p>810 <div class="e-productlist-filters-group-options-selected small mb-2">811 {{#each facets}}812 {{#if selectedOptions.length}}813 {{#each selectedOptions}}814 <a class="e-productlist-filters-option-selected js-e-productlist-filters-remove d-flex align-items-center text-decoration-none mb-1" href="#" data-value="{{value}}">815 <i class="material-icons material-icons-fixed text-danger mr-1">add_circle</i>816 <span>{{../name}}: {{label}}</span>817 </a>818 {{/each}}819 {{/if}}820 {{/each}}821 {{#if page.q}}822 <a class="e-productlist-filters-option-selected d-flex align-items-center text-decoration-none mb-1 js-e-productlist-filters-search-clear" href="#">823 <i class="material-icons material-icons-fixed text-danger mr-1">add_circle</i>824 <span>@Translate( "eCom Productlist Filters - Search - Text", "Search" ): {{page.q}}</span>825 </a>826 {{/if}}827 {{#compare page.minPrice.clean '&&' page.maxPrice.clean}}828 <a class="e-productlist-filters-option-selected d-flex align-items-center text-decoration-none mb-1 js-e-productlist-filters-range-clear" href="#" data-group-id="js-e-productlist-filters-range-group-price">829 <i class="material-icons material-icons-fixed text-danger mr-1">add_circle</i>830 <span>@Translate( "eCom Productlist Filters - Price - Heading", "Price" ): {{{page.minPrice.formatted}}} - {{{page.maxPrice.formatted}}}</span>831 </a>832 {{/compare}}833 </div>834 </div>835 {{/if}}836 *@837838 <div class="e-productlist-filters-group-summery">839 <p class="e-productlist-filters-group-header small mb-0">840 {{#if page.filtersAppliedCount}}841 <button type="button" class="btn btn-sm btn-link js-e-productlist-filters-clear-all"><i class="material-icons">close</i> @Translate( "eCom Productlist Filter - Group Reset - Button", "Reset" )</button>842 {{/if}}843 @*<button type="button" class="btn js-copy-to-clipboard btn-sm btn-link"><i class="material-icons">link</i> Kopier link</button>*@844 </p>845 </div>846847848 {{#compare "@Espresso.Item.FiltersShow" "===" "True"}}849850 @if ( Espresso.Item.NavigationShow == "True" )851 {852 <div class="e-productlist-filters-group js-e-productlist-filters-group">853 <p class="e-productlist-filters-group-header small mb-0">854 <a class="e-productlist-filters-group-collapse-toggle text-black" data-toggle="collapse" data-target="#e-productlist-filters-group-navigation">855 <i class="material-icons material-icons-fixed">arrow_drop_down</i>856 <span class="e-productlist-filters-group-name h4 m-0">857 @Espresso.Item.NavigationHeading858 </span>859 </a>860 </p>861 <fieldset id="e-productlist-filters-group-navigation" class="e-productlist-filters-group-options mb-2 small collapse show">862 <div class="e-nav-local e-nav-local-vertical">863 <nav class="e-nav-local-container">864 <ul class="nav flex-column">865 @RenderNavigation( new866 {867 id = "dwnav-local-" + Espresso.Id,868 parentid = string.IsNullOrEmpty( Espresso.Item.NavigationParentPage ) == false ? Espresso.Item.NavigationParentPage : Espresso.Page.ID,869 template = "local-vertical.xslt",870 startlevel = Espresso.Item.NavigationLevelStart,871 endlevel = Espresso.Item.NavigationLevelEnd,872 expandmode = "path"873 } )874 </ul>875 </nav>876 </div>877 </fieldset>878 </div>879 }880 @if ( Espresso.Item.SearchShow == "True" )881 {882 <div class="e-productlist-filters-group js-e-productlist-filters-group">883 <p class="e-productlist-filters-group-header small mb-0">884 <a class="e-productlist-filters-group-collapse-toggle {{#unless page.q}}collapsed{{/unless}}" data-toggle="collapse" data-target="#e-productlist-filters-group-search">885 <i class="material-icons material-icons-fixed">arrow_drop_down</i>886 <span class="e-productlist-filters-group-name h4 m-0">@Translate( "eCom Productlist Filters - Search - Heading", "Search" )</span>887 </a>888 {{#if page.q}}889 <button type="button" class="btn btn-sm btn-link py-1 px-0 js-e-productlist-filters-search-clear">890 @Translate( "eCom Productlist Filter - Group Reset - Button", "Reset" )891 </button>892 {{/if}}893 </p>894 <fieldset id="e-productlist-filters-group-search" class="e-productlist-filters-group-options mb-2 small collapse {{#if page.q}}show{{/if}}">895 <div class="js-e-search-input-group e-search-input-group {{#unless page.q}}is-empty{{/unless}}">896 <label class="e-search-label" for="filter_search"><i class="material-icons">search</i></label>897 <input type="text" class="js-e-search-input e-search-input e-productlist-filters-search-input form-control-plaintext" name="q" id="filter_search" value="{{page.q}}">898 <span class="js-e-search-clear e-search-clear"><i class="material-icons">close</i></span>899 <button class="d-none e-search-submit btn btn-primary js-e-productlist-filters-search-submit" type="button"><i class="material-icons pa-0">search</i></button>900 </div>901 </fieldset>902 </div>903 }904905 {{#each facets}}906 {{#compare count '>' 0}}907 <div class="e-productlist-filters-group js-e-productlist-filters-group">908 <p class="e-productlist-filters-group-header small mb-0">909 <a class="e-productlist-filters-group-collapse-toggle " data-toggle="collapse" data-target="#e-productlist-filters-group-{{param}}">910911 <span class="e-productlist-filters-group-name h4 m-0">{{label}}</span>912 <i class="material-icons material-icons-fixed">expand_more</i>913 </a>914915 </p>916 <fieldset id="e-productlist-filters-group-{{param}}" class="e-productlist-filters-group-options js-e-productlist-filters-group-options mb-1 small collapse is-expanded">917 <div class="{{#compare count '>' @Espresso.Item.FiltersVisibleOptionCount }}js-e-productlist-filters-options-collapse-peek e-productlist-filters-options-collapse-peek is-peeking{{/compare}}">918 <div class="e-productlist-filters-option js-e-productlist-filters-option">919 <label for="reset-filter-{{param}}" class="custom-control custom-checkbox">920 <input class="js-e-productlist-filters-option-reset-group custom-control-input" name="reset-filter-{{param}}" id="reset-filter-{{param}}" type="checkbox" value="true" {{#compare isCleared '||' isEmpty}}checked{{/compare}}>921 <span class="custom-control-indicator"></span>922 <span class="custom-control-description">@Translate( "eCom Productlist Filter - Options View All - Label", "All" )</span>923 </label>924 </div>925 {{#each options}}926 <div class="e-productlist-filters-option js-e-productlist-filters-option {{#if isSelected}}is-selected{{/if}} {{#if isDisabled}}d-none is-disabled text-muted{{/if}}">927 <label for="{{id}}" class="custom-control custom-checkbox">928 <input id="{{id}}" name="{{param}}" class="js-e-productlist-filter custom-control-input" type="checkbox" value="{{value}}" {{#if isSelected}}checked{{/if}} {{#if isDisabled}}disabled{{/if}}>929 <span class="custom-control-indicator"></span>930 <span class="custom-control-description">{{label}} @*<span class="e-productlist-filters-option-count small text-muted">({{count}})</span></span>*@931 </label>932 </div>933 {{/each}}934 {{#compare count '>' @Espresso.Item.FiltersVisibleOptionCount }}935 <a href="#" class="js-e-productlist-filters-options-collapse-peek-toggle e-productlist-filters-options-collapse-peek-toggle" data-closed-text="@Translate( "eCom Productlist Filter - Options Show More - Link", "Show more" )" data-open-text="@Translate( "eCom Productlist Filter - Options Show Less - Link", "Show less" )"><i class="material-icons material-icons-fixed">keyboard_arrow_down</i></a>936 {{/compare}}937 </div>938 </fieldset>939 </div>940 {{/compare}}941 {{/each}}942 @if ( Espresso.Item.PriceRangeShow == "True" )943 {944 <div class="e-productlist-filters-group js-e-productlist-filters-group">945 <p class="e-productlist-filters-group-header small mb-0">946 <a class="e-productlist-filters-group-collapse-toggle {{#compare page.minPrice.clean '!!' page.maxPrice.clean}}collapsed{{/compare}}" data-toggle="collapse" data-target="#e-productlist-filters-group-pricerange">947 <i class="material-icons material-icons-fixed">arrow_drop_down</i>948 <span class="e-productlist-filters-group-name h4 m-0">@Translate( "eCom Productlist Filters - Price Range - Heading", "Price" )</span>949 </a>950 {{#compare page.minPrice.clean '||' page.maxPrice.clean}}951 <button type="button" class="btn btn-sm btn-link py-1 px-0 js-e-productlist-filters-range-clear">952 @Translate( "eCom Productlist Filter - Group Reset - Button", "Reset" )953 </button>954 {{/compare}}955 </p>956 <fieldset id="e-productlist-filters-group-pricerange" class="e-productlist-filters-group-options mb-2 small collapse {{#compare page.minPrice.clean '||' page.maxPrice.clean}}show{{/compare}}">957 <div id="js-e-productlist-filters-range-group-price" class="row align-items-center mt-1 e-productlist-filters-range-group js-e-productlist-filters-range-group">958 <div class="col-12 col-lg-4 mb-1 mb-lg-0">959 <input type="text" class="form-control js-e-productlist-filters-range js-e-productlist-filters-range-min" name="PriceRangeMin" id="PriceRangeMin" value="{{page.minPrice.clean}}" placeholder="@Translate( "eCom Productlist Filters - Price Min - Text", "From" )" min="0">960 </div>961 <div class="col-12 col-lg-4 mb-1 mb-lg-0">962 <input type="text" class="form-control js-e-productlist-filters-range js-e-productlist-filters-range-max" name="PriceRangeMax" id="PriceRangeMax" value="{{page.maxPrice.clean}}" placeholder="@Translate( "eCom Productlist Filters - Price Max - Text", "To" )" data-msg-rangeValid="@Translate( "eCom Productlist Filters - Price Error - Msg", "Prices entered incorrectly" )">963 </div>964 <div class="col-12 col-lg-3">965 <button type="button" class="btn btn-primary px-0 btn-sm btn-block e-productlist-filters-apply-range js-e-productlist-filters-apply-range"><i class="material-icons">sync</i></button>966 </div>967 </div>968 </fieldset>969 </div>970 }971 {{/compare}}972 </div>973 </script>974 </div>975976 <div class="e-productlist-filters-modal fade modal modal-fullscreen" data-backdrop="false" id="js-e-productlist-filters-modal">977 <div class="modal-dialog">978 <div class="modal-content">979 <div class="modal-header">980 <h3 class="modal-title">981 <i class="material-icons material-icons-large">tune</i>982 @Translate( "eCom Productlist Filters - Customize Selection - Heading", "Filter products" )983 </h3>984 <button class="close" data-dismiss="modal" type="button">985 <i class="material-icons">close</i>986 </button>987 </div>988 <div class="modal-body pt-0">989 <div id="js-e-productlist-filters-modal-body" class="d-flex flex-column">990991 </div>992 </div>993 <div class="modal-footer bg-info border-top-0">994 <button class="btn btn-primary btn-block" data-dismiss="modal" type="button">@Translate( "eCom Productlist Filters - Customize Selection Apply - Button", "Show results" )</button>995 </div>996 </div>997 </div>998 </div>99910001001 </form>1002 </div>1003 </div>1004 </div>10051006 </div>1007 </div>10081009 </div>1010

LEGO® Wear CONTEMPORARY

All unsere schöne Übergangs-Produkte haben wir in der Kollektion CONTEMPORARY gesammelt. Du wirst u.a. eine große Auswahl an Jacken in verschiedenen Looks finden, und gemeinsam für alle ist es, dass sie vom fantastischen LEGO® Universum inspiriert sind, das jedes Kind kennt und liebt. Das wiedererkennt man in coolen Reflektoren in LEGO Stein Form, großartigen NINJAGO Drucken und schicken Farben. Du wirst auch vielen Kinderjacken und -Mänteln in gedeckten Farben sehen, die zum trendy Nordischen Stil gut passen. Deswegen wirst du bestimmt auch die Übergangsjacke für eben dein Kind finden können. Wir bieten süße, hübsche und coole Kinderjacken, und alle sind in der bekannten hohen LEGO® Wear Qualität mit Fokussierung auf Bewegungsfreiheit gefertigt. In dieser Kollektion findest du auch Daunenwesten und Softshell-Handschuhe für die größeren Kinder samt Einteilern, Stiefelchen und Softshell-Fäustlingen für Kleinkinder. CONTEMPORARY bietet darüber hinaus Daunenjacken, Softshell-Jacken und Steppjacken für Kinder an. Die Auswahl ist groß, und du wirst bestimmt die Jacke finden können, die dein Kind warm in den Übergangsperioden halten wird.

Mehr über LEGO® Wear CONTEMPORARY lesen

Unsere Kinder-Übergangsjacken sind mit vielen technischen Details gefertigt und haben eine Menge an guten Eigenschaften. Zuerst sind sie wasserabweisend mit einer Wassersäule von 3.000 mm, und sie sind mit einer umweltfreundlichen und fluorfreien Bionic Finish ECO-Behandlung imprägniert, die die schmutz- und wasserabweisenden Eigenschaften des Stoffes verbessert. Demnächst sind alle Styles 100% atmungsaktiv, was essenziell ist, wenn Kinder aktiv spielen und warm werden – diese Warme soll nach außen geleitet werden, damit sie nicht verschwitzt und kalt werden. Aus Sicherheitsgründen sind alle Jacken mit einer abnehmbaren Kapuze versehen. Die Kapuze ist auf unserem einzigartigen Druckknopfband montiert, damit sie leicht von der Jacke gelöst wird, falls das Kind auf dem Spielplatz an etwas festhängt.

Die CONTEMPORARY Jacken bieten deswegen sowohl große Sicherheit als auch ein bequemes Tragegefühl, und darum sind sie die perfekte Wahl für die Übergangsperioden, wenn man noch nicht die wärmste Winter-Outdoor-Bekleidung tragen muss. Die wasserabweisenden Softshell-Handschuhe sind übrigens aus gutem Grund beliebt, denn sie sind super für die Radtour am Mist-Morgen, und im vergleich zu dickeren Handschuhen bieten sie eine gute Bewegungsfreiheit an. Du wirst bei LEGO Wear eine breite Auswahl an Jacken und Zubehör in hoher Qualität für die Übergangsperioden finden können, und in denen gekleidet wird dein Kind frei spielen können, wenn die Jahreszeiten wechseln.

keyboard_arrow_up