Error executing template "Designs/innovationliving/eCom/Product/innovationliving.cshtml"System.NullReferenceException: Object reference not set to an instance of an object.at Dynamicweb.Ecommerce.Assortments.AssortmentService.GetAllCachedAssortments()at Dynamicweb.Ecommerce.Assortments.AssortmentService.HasActiveAssortments()at Dynamicweb.Ecommerce.Products.ProductService.GetProductById(String productId, String productVariantId, String productLanguageId)at Co3.Espresso.Website.Services.ProductService.GetName(String productId, String variantId, String languageId) in C:\git\Espresso\Co3.Espresso.Website\Services\ProductService.cs:line 109at CompiledRazorTemplates.Dynamic.RazorEngine_d6a338324d1e4ce1b9c124ac57e79fe0.Execute() in D:\Sites\innovationliving.com\files\Templates\Designs\innovationliving\eCom\Product\innovationliving.cshtml:line 2370at 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.Pages.PageBase 2 @using Dynamicweb.Ecommerce.Prices 3 @using Dynamicweb.Ecommerce.Common.eCom7 4 @using Dynamicweb.Rendering 5 @using System.Web 6 @using Dynamicweb.Frontend 7 @using Co3.Espresso.Base.Models 8 @using Co3.Espresso.Website.Services 9 @using Co3.IL.Dw.Models 10 @using Dynamicweb.Ecommerce.Products 11 @using Dynamicweb.Ecommerce.Products.Categories 12 @using ProductService = Co3.Espresso.Website.Services.ProductService 13 @using System.Collections.Generic; 14 @using Dynamicweb.Admin.dk.dynamicweb.templates 15 @using System.Text.RegularExpressions 16 @using Co3.Espresso.Base.Extensions 17 @using Co3.Espresso.Website.Models.FrontEnd.Elements 18 @using Dynamicweb.Admin 19 @using Dynamicweb.Ecommerce.Common 20 @using Co3.IL.Dw.Models.Frontend.User 21 22 @using System.Globalization 23 @using System.Security.Cryptography.X509Certificates 24 @using Co3.Espresso.Base.Extensions 25 @using Co3.Espresso.Website.Models.FrontEnd 26 @using Co3.Espresso.Website.Services 27 @using Dynamicweb.Content 28 @using Dynamicweb.Ecommerce.Products 29 @using Dynamicweb.Ecommerce.Products.Categories 30 @using Dynamicweb.Frontend 31 @using Dynamicweb.Rendering 32 @using EcomContext = Dynamicweb.Ecommerce.Common.Context 33 @using ProductService = Co3.Espresso.Website.Services.ProductService 34 @using Co3.IL.Dw.Models 35 @using System.Web 36 @using Co3.IL.Dw.Models.Frontend.User 37 @using Dynamicweb.Admin 38 @using Dynamicweb.Content.Items 39 @using Dynamicweb.Ecommerce.International 40 @using Dynamicweb.Indexing.Notifications 41 @using Dynamicweb.Rendering.Translation 42 @using dwPrices = Dynamicweb.Ecommerce.Prices 43 44 @{ 45 ProductCategoryService productCategory = new ProductCategoryService(); 46 } 47 48 49 @functions { 50 51 public string getCountryCodeFromArea(Area area) 52 { 53 RegionInfo regionInfo = new RegionInfo(area.CultureInfo.LCID); 54 return regionInfo.TwoLetterISORegionName; 55 } 56 57 public static string GetStandardCollapseToggleTextExpand() 58 { 59 return "Se mere"; 60 } 61 62 public static string GetStandardCollapseToggleTextCollapse() 63 { 64 return "Se mindre"; 65 } 66 67 public static string getAmountFormatted(double amount, Currency userCurrency, bool isUserAuthenticated) 68 { 69 string returnValue = Co3.Espresso.Website.Services.PriceService.Instance.FormatPrice( amount ); 70 if ( isUserAuthenticated && !UserContext.Current.ShowRetailPrice ) 71 { 72 returnValue = dwPrices.Price.GetDoublePriceInfo( amount, userCurrency ).PriceWithoutVATFormatted; 73 } 74 return returnValue; 75 } 76 } 77 78 @helper ProductDescription(string sectionClasses = "e-section", bool sectionCollapse = false, string contentClasses = null, string heading = null, string content = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null) 79 { 80 if ( string.IsNullOrEmpty(content) == false ) 81 { 82 ClassList headingClassList = new ClassList(); 83 headingClassList.AddClasses("col-12"); 84 ClassList contentClassList = new ClassList(); 85 contentClassList.AddClasses("col-12"); 86 87 @sectionStart(sectionClasses: sectionClasses, sectionCollapse: sectionCollapse, contentClasses: contentClasses, collapseToggleTextCollapse: collapseToggleTextCollapse, collapseToggleTextExpand: collapseToggleTextExpand) 88 89 if ( string.IsNullOrEmpty(heading) == false ) 90 { 91 <div class="@headingClassList"> 92 <h2>@heading</h2> 93 </div> 94 } 95 <div class="@contentClassList"> 96 @content 97 </div> 98 99 @sectionEnd()100 }101 }102103104 @helper ProductVideo(string sectionClasses = "e-section", string contentClasses = null, string heading = null, string videoURL = null)105 {106 if ( string.IsNullOrEmpty(videoURL) == false )107 {108 ClassList headingClassList = new ClassList();109 headingClassList.AddClasses("col-12");110 ClassList contentClassList = new ClassList();111 contentClassList.AddClasses("col-12");112113114 @sectionStart(sectionClasses: sectionClasses, contentClasses: contentClasses)115116 if ( string.IsNullOrEmpty(heading) == false )117 {118 <div class="@headingClassList">119 <h2>@heading</h2>120 </div>121 }122123 <div class="@contentClassList">124 <div class="embed-responsive embed-responsive-16by9 mb-2">125 <iframe class="embed-responsive-item" src="@videoURL" width="1080" height="608" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>126 </div>127 </div>128 @sectionEnd()129 }130 }131132 @helper ProductRelatedProducts(string sectionClasses = "e-section", string contentClasses = null, string heading = null,133 IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productLoop = null)134 {135 if ( productLoop != null && productLoop.Any() == true )136 {137 ClassList headingClassList = new ClassList();138 headingClassList.AddClasses("col-12");139 ClassList contentClassList = new ClassList();140 contentClassList.AddClasses("col-12");141142 @sectionStart(sectionClasses: sectionClasses, contentClasses: contentClasses)143144 if ( string.IsNullOrEmpty(heading) == false )145 {146 <div class="@headingClassList">147 <h2 class="text-center">@heading</h2>148 </div>149 }150 <div class="@contentClassList">151 <div class="e-products mb-2">152 <div class="row">153 @{154 string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth(null).ToResponsiveClasses();155 }156 @foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product in productLoop )157 {158 @ProductlistItem(product, productlistItemClassList)159 }160 </div>161 </div>162 </div>163164 @sectionEnd()165 }166 }167168 @helper ProductRelatedComfortProducts(string sectionClasses = "e-section", string contentClasses = null, string heading = null, string introduction = null,169 IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productLoop = null, Product mainProduct = null)170 {171 if ( productLoop != null && productLoop.Any() == true )172 {173 ClassList headingClassList = new ClassList();174 headingClassList.AddClasses("col-12");175 ClassList contentClassList = new ClassList();176 contentClassList.AddClasses("col-12");177178 @sectionStart(sectionClasses: sectionClasses, contentClasses: contentClasses)179180 if ( string.IsNullOrEmpty(heading) == false )181 {182 <div class="@headingClassList">183 <h2 class="mb-0 text-center">@heading</h2>184 @if ( string.IsNullOrEmpty(introduction) == false )185 {186 <h4 class="mb-1 mt-1 text-center">@introduction</h4>187 }188 </div>189 }190 <div class="@contentClassList">191 <div class="e-products mb-2">192 <div class="row">193 @{194 string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth(null).ToResponsiveClasses();195 }196 @if ( mainProduct != null )197 {198 var comfortName = mainProduct.GetCategoryValue("FinalProduct", "RelComfortName");199 var comfortFirmRate = mainProduct.GetCategoryValue("FinalProduct", "RelComfortFirmRate");200 var comfortDesc = mainProduct.GetCategoryValue("FinalProduct", "RelComfortDesc").ToString().StripHtml();201 string comfortImage = ImageService.Instance.GetImageURL("/Files/Images/" + mainProduct.GetCategoryValue("FinalProduct", "RelComfortImage"), 400, 400, 1);202203 <div class="@productlistItemClassList il-comfort-related-group-item">204 <div class="active bg-white e-products-item">205 <div class="e-products-item-container">206 <div class="e-products-item-text-container text-center">207 <h3>208 @comfortName209 </h3>210 <p class="il-comfort-related-group-item-firmness mb-0">211 <strong>@Translation.GetTranslation("eCom Product - Firmness rating - Text"):</strong> @comfortFirmRate</p>212 <p>@comfortDesc</p>213 </div>214 <div class="e-products-item-image-container">215 <div class="e-products-item-image-wrapper">216 <img src="@comfortImage" alt="" class="e-products-item-image">217 </div>218 </div>219220 </div>221 </div>222 </div>223 }224225226227 @foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product in productLoop )228 {229 @ProductlistRelatedComfortItem(product, productlistItemClassList)230 }231 </div>232 </div>233 </div>234235 @sectionEnd()236 }237 }238239 @helper ProductlistItem(RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product, string productlistItemClassList = null)240 {241 if ( product != null )242 {243 string currentDomain = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host;244 //ProductDeliveryInfo productDeliveryInfo = Co3.IL.Dw.Services.ProductService.Instance.GetProductDeliveryInfo(product.GetString("Ecom:Product:Field.BaseSKU.Value"));245246 Dynamicweb.Ecommerce.Products.ProductService dwProductService = new Dynamicweb.Ecommerce.Products.ProductService();247 Dynamicweb.Ecommerce.Products.Product productObject = dwProductService.GetProductById( product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ), Dynamicweb.Ecommerce.Common.Context.LanguageID, false );248249 bool isUserAuthenticated = PageView.Current().User != null;250 Dictionary<string, string> groups = new Dictionary< string, string >();251 List<string> userGroups = new List<string>();252 string textile = string.IsNullOrEmpty( product.GetString( "DefaultTextile" ) ) == false ? product.GetString( "DefaultTextile" ) : "521";253 ProductPrice prices = Co3.IL.Dw.Services.ProductService.Instance.GetProductPriceInfo(product.GetString( "Ecom:Product.Number" ), textile);254255 double resellerPrice;256 double.TryParse( prices.ResellerPrice.ToString(), out resellerPrice );257258 double retailPrice;259 double.TryParse( prices.RetailPrice.ToString(), out retailPrice );260261 bool isModeRetail = UserContext.Current.ShowRetailPrice;262 bool showPriceArea = isModeRetail;263264 if (isUserAuthenticated)265 {266 userGroups = PageView.Current().User.Groups.Select(g => g.Name).ToList();267268 foreach (Dynamicweb.Security.UserManagement.Group group in PageView.Current().User.Groups )269 {270 groups.Add(group.Name, group.ID.ToString());271 }272273 if ( groups.ContainsKey( "DM only" ) )274 {275 isUserAuthenticated = false;276 isModeRetail = false;277 }278 if ( groups.ContainsKey( "D" ) )279 {280 isUserAuthenticated = false;281 isModeRetail = false;282 }283 if ( groups.ContainsKey( "C" ) )284 {285 isUserAuthenticated = false;286 showPriceArea = true;287 }288 if ( groups.ContainsKey( "B" ) )289 {290 isUserAuthenticated = true;291 showPriceArea = true;292 }293 if ( groups.ContainsKey( "A" ) )294 {295 isUserAuthenticated = true;296 showPriceArea = true;297 }298 if ( groups.ContainsKey( "Agenter og importører" ) )299 {300 isUserAuthenticated = true;301 showPriceArea = true;302 }303 }304305 ProductDeliveryInfo productDeliveryInfo = null;306 if ( productObject != null )307 {308 productDeliveryInfo = Co3.IL.Dw.Services.ProductService.Instance.GetProductDeliveryInfo( productObject );309 }310 else311 {312 productDeliveryInfo = Co3.IL.Dw.Services.ProductService.Instance.GetProductDeliveryInfo(product.GetString("Ecom:Product:Field.BaseSKU.Value"));313 }314315316 List< Product > inStock = new List< Product >();317 List< dynamic > inStockTextiles = new List< dynamic >();318319 bool isBlackLabelProduct = false;320321 if ( productDeliveryInfo != null && productDeliveryInfo.InStock != null && productDeliveryInfo.InStock.Any() )322 {323 inStock = productDeliveryInfo.InStock;324 }325326 if ( productDeliveryInfo != null && productDeliveryInfo.BlackTextiles != null && productDeliveryInfo.BlackTextiles.Any() )327 {328 inStock = productDeliveryInfo.BlackTextiles;329 isBlackLabelProduct = true;330 }331332 if ( !isBlackLabelProduct )333 {334 isBlackLabelProduct = product.GetString( "Ecom:Product:Field.PIMGroup.Value" ) == "95B";335 }336337 if ( productDeliveryInfo != null && productDeliveryInfo.InStock != null)338 {339 inStock = productDeliveryInfo.InStock.Any() ? productDeliveryInfo.InStock : inStock;340 }341342 foreach ( Product productionProduct in inStock )343 {344 string textileImageClean = productionProduct.GetCategoryValue("Textile", "TextileColorImage")?.ToString();345 string textileImagePath = "/files/images/" + textileImageClean;346 inStockTextiles.Add(new347 {348 color = productionProduct.GetCategoryValue("Textile", "TextileColorHex")?.ToString()349 });350 }351352 string resellerPriceFormatted = Co3.Espresso.Website.Services.PriceService.Instance.FormatPrice( resellerPrice );353 if ( isUserAuthenticated )354 {355 Currency userCurrency = new CurrencyService().GetCurrenciesForCode( PageView.Current().User.Currency ).FirstOrDefault(c => c.Code == PageView.Current().User.Currency );356 if ( userCurrency != null )357 {358 resellerPriceFormatted = getAmountFormatted( resellerPrice, userCurrency, true );359 }360 }361362 string position = "1";363 string hoverPosition = String.Empty;364 if ( string.IsNullOrEmpty( product.GetString( "Ecom:Product:Field.Positions.Value" ) ) == false )365 {366 position = product.GetString( "Ecom:Product:Field.Positions.Value" ).Split( ',' )[ 0 ];367 if ( product.GetString( "Ecom:Product:Field.Positions.Value" ).Split( ',' ).Last() != position )368 {369 hoverPosition = product.GetString( "Ecom:Product:Field.Positions.Value" ).Split( ',' ).Last();370 }371 }372373 dynamic productData = new374 {375 isModeRetail = isModeRetail || userGroups.Contains("C"),376 showPriceArea = showPriceArea,377 isUserAuthenticated = isUserAuthenticated,378 resellerPrice = resellerPrice,379 resellerPriceFormatted = resellerPriceFormatted,380 hideResellerPrice = userGroups.Contains("C") == true,381 retailPrice = retailPrice,382 retailPriceFormatted = Co3.Espresso.Website.Services.PriceService.Instance.FormatPrice( retailPrice ),383 id = product.GetString("Ecom:Product.ID"),384 variantId = product.GetString("Ecom:Product.VariantID"),385 url = ProductService.Instance.GetProductLink(product.GetString("Ecom:Product.PrimaryOrFirstGroupID"), product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.VariantID")),386 number = product.GetString("Ecom:Product.Number"),387 name = ProductService.Instance.GetName(product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.VariantID")),388 imageDefault = ImageService.Instance.GetImageURL(product.GetString("Ecom:Product.ImageDefault.Clean"), 400, 400, 5),389 //Ecom:Product.ImageDefault.Clean390 price = "0",// ProductService.Instance.GetPrice(product.GetString("Ecom:Product.ID")),391 descriptionShortExtra01 = product.GetString("Ecom:Product:Field.DescriptionShortExtra01"),392 inStockTextiles = inStockTextiles,393 inStockTextilesTotal = inStockTextiles.Count,394 includePIMPacks = product.GetString("Ecom:Product.CategoryField.FinalProduct.IncludePIMPacks.Value.Clean") == "True",395 cylindo = new396 {397 sku = product.GetString("Ecom:Product:Field.BaseSKU.Value"),398 legFinish = product.GetString("Ecom:Product:Field.FeatureGroup1.Value"),399 fallbackImage = string.IsNullOrEmpty(product.GetString( "Ecom:Product.ImageDefault.Clean" )) == false ? string.Format( "{0}{1}", currentDomain, ImageService.Instance.GetImageURL( product.GetString( "Ecom:Product.ImageDefault.Clean" ), 400, 400, 5 ) ) : string.Empty,400 position = position,401 hoverPosition = hoverPosition,402 fabric = string.IsNullOrEmpty(product.GetString("DefaultTextile")) == false ? product.GetString("DefaultTextile") : "521"403 },404 stock = new405 {406 id = product.GetString("Ecom:Product:Stock.ID"),407 quantity = product.GetString("Ecom:Product.Stock"),408 text = product.GetString("Ecom:Product:Stock.Text"),409 delivery = product.GetString("Ecom:Product:Stock.DeliveryText")410 }411 };412413 string cssOpacity = string.Empty;414 if ( productData.inStockTextilesTotal == 0 )415 {416 cssOpacity = "opacity-zero";417 }418419 <div class="@productlistItemClassList">420 <div class="e-products-item js-e-products-item bg-white js-e-products-item-@productData.id js-e-block-link e-block-link" data-variant-id="@productData.variantId">421 <div class="e-products-item-container">422423 <div class="e-products-item-text-container text-center small">424 @*<h3 class="e-products-item-name mb-0"><a href="@productData.url">@productData.name</a></h3>425 <small class="il-colors-instock mt-1 mb-1 d-block @cssOpacity"><a href="@productData.url">@productData.inStockTextilesTotal colors in stock</a></small>426 <ul class="il-color-list @cssOpacity">427 @{428 int counter = 0;429 }430 @foreach ( var inStockTextile in productData.inStockTextiles )431 {432 if ( counter < 8) {433 <li style="background-color: #@inStockTextile.color;"></li>434 }435 counter++;436 }437 @if ( productData.inStockTextiles.Count > 8 )438 {439 <li class="morethanmax"></li>440 }441 </ul>*@442443 <div class="js-cylindo-viewer cylindo-viewer" id="@productData.id" data-use-pim-packs="@productData.includePIMPacks" data-sku="@productData.cylindo.sku" data-position="@productData.cylindo.position" data-hover-position="@productData.cylindo.hoverPosition" data-leg-finish="@productData.cylindo.legFinish" data-fabric="@productData.cylindo.fabric" data-fallback-image="@productData.cylindo.fallbackImage">444 <div class="hover"></div>445 </div>446447 @if ( isBlackLabelProduct )448 {449 <img src="/Files/Templates/Designs/innovationliving/_assets/img/black-label-logo.svg" class="il-black-label"/>450 }451452 <h3 class="e-products-item-name m-0"><a href="@productData.url">@productData.name</a></h3>453454 @*<p class="e-products-item-text mb-0 @cssOpacity">455 <a href="@productData.url">456 More colors available457 </a>458 </p>*@459 @if ( productData.showPriceArea )460 {461 if ( productData.isModeRetail )462 {463 <div class="e-product-price font-weight-bold h4 mb-0 mt-1">464 @productData.retailPriceFormatted465 </div>466 }467 else468 {469 if ( productData.isUserAuthenticated )470 {471 <div class="e-product-price font-weight-bold h4 mb-0 mt-1">472 @productData.retailPriceFormatted473 </div>474475 if ( !productData.hideResellerPrice )476 {477 @productData.resellerPriceFormatted478 }479 }480 }481 }482 </div>483 </div>484 </div>485 </div>486 }487 }488489490 @helper ProductlistRelatedComfortItem(RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product, string productlistItemClassList = null)491 {492 if ( product != null )493 {494 dynamic productData = new495 {496 id = product.GetString("Ecom:Product.ID"),497 variantId = product.GetString("Ecom:Product.VariantID"),498 url = ProductService.Instance.GetProductLink(product.GetString("Ecom:Product.PrimaryOrFirstGroupID"), product.GetString("Ecom:Product.ID")),499 name = product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortName.Value.Clean"),500 imageDefault = ImageService.Instance.GetImageURL(product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortImage.Value.Clean"), 400, 400, 1),501 description = product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortDesc.Value.Clean").StripHtml(),502 firmness = product.GetString("Ecom:Product.CategoryField.FinalProduct.RelComfortFirmRate.Value.Clean")503 };504505 <div class="@productlistItemClassList il-comfort-related-group-item">506 <div class="e-products-item js-e-products-item js-e-products-item-@productData.id js-e-block-link e-block-link bg-white" data-variant-id="@productData.variantId">507 <div class="e-products-item-container">508 <div class="e-products-item-text-container text-center">509 <h3>510 <a href="@productData.url">511 @productData.name512 </a>513 </h3>514 <p class="il-comfort-related-group-item-firmness mb-0">515 <strong>@Translation.GetTranslation("eCom Product - Firmness rating - Text"):</strong> @productData.firmness</p>516 <p>@productData.description</p>517 </div>518 <div class="e-products-item-image-container">519 <a class="e-products-item-image-wrapper" href="@productData.url">520 <img src="@productData.imageDefault" alt="" class="e-products-item-image">521 </a>522 </div>523524 </div>525 </div>526 </div>527 }528 }529530531 @helper sectionStart(string sectionClasses = "e-section", string contentClasses = null, bool sectionCollapse = false, string sectionId = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null)532 {533 sectionId = string.IsNullOrEmpty(sectionId) ? Guid.NewGuid().ToString("N") : sectionId;534 ClassList sectionClassList = new ClassList();535 sectionClassList.AddClasses(sectionClasses);536 ClassList contentClassList;537538 if ( contentClasses == null )539 {540 contentClassList = Co3.Espresso.Website.Services.PageService.Instance.GetResponsiveClassesFromPageItem(PageView.Current().Page.Item);541 }542 else543 {544 contentClassList = new ClassList();545 contentClassList.AddClasses(contentClasses);546 }547548 // TODO: Split collapse logic into separate helper function.549 string collapseId = Guid.NewGuid().ToString("N");550 ClassList collapseToggleClassList = new ClassList();551 if ( sectionCollapse )552 {553 sectionClassList.AddClasses("p-section-collapse js-p-section-collapse");554 collapseToggleClassList.AddClasses(contentClasses);555 collapseToggleClassList.AddClasses("p-section-collapse-toggle collapsed order-last text-center");556 contentClassList.AddClasses("p-section-collapse-content collapse is-md");557 }558559 @:<section class="@sectionClassList" id="@sectionId">560 @:<div class="container-fluid">561 @:<div class="row">562563 // TODO: Split collapse logic into separate helper function.564 if ( sectionCollapse )565 {566 <div class="@collapseToggleClassList" data-toggle="collapse" data-target="#@collapseId">567 <button class="btn btn-primary p-section-collapse-toggle-btn" type="button">568 <i class="material-icons p-section-collapse-toggle-icon">keyboard_arrow_down</i>569 </button>570 <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>571 </div>572 }573574 @:<div class="@contentClassList" id="@collapseId">575 @:<div class="row">576 }577578 @helper sectionEnd()579 {580 @:</div>581 @:</div>582 @:</div>583 @:</div>584 @:</section>585 }586587 @* Custom IL instock/production *@588 @helper getProductionStockAndProduction(List< Product > ProductList, ProductCategoryService productCategory, Dictionary<string,dynamic> jsonFabrics = null, IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > fieldLoop = null)589 {590 foreach ( Product productionProduct in ProductList )591 {592 string textileNumber = productionProduct.Number;593 string textileName = productionProduct.GetCategoryValue("Textile", "TextileName")?.ToString();594 string textileImageClean = productionProduct.GetCategoryValue("Textile", "TextileColorImage")?.ToString();595 string textileImagePath = "/files/images/" + textileImageClean;596 string textileImage = ImageService.Instance.GetImageURL(textileImagePath?.ToString(), 100, 100);597598 dynamic displayFields = new List< dynamic >();599600 foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem groupItem in fieldLoop )601 {602 if ( groupItem.GetLoop( "Fields" ).Count > 0 )603 {604 if ( groupItem.GetString( "Ecom:FieldDisplayGroup.ID" ) == "7" )605 {606 foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem fieldItem in groupItem.GetLoop( "Fields" ) )607 {608 if(!string.IsNullOrEmpty(productionProduct.GetCategoryValue("Textile", fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TemplateTag"))?.ToString()))609 {610 if(!string.IsNullOrEmpty(productionProduct.GetCategoryValue("Textile", fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TemplateTag"))?.ToString()))611 {612 //string value = productionProduct.GetCategoryValue( "Textile", fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) )?.ToString();613 string label = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );614 string value = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct(productionProduct, fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Id"));615616 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" )617 {618 value = ImageService.Instance.GetImageURL(string.Format("/files/images/{0}", value), 300, 300);619 label = string.Empty;620 }621 displayFields.Add( new622 {623 label = label,624 type = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TypeName"),625 value = value626 } );627 }628 }629 }630 }631 }632 }633634 if ( productionProduct.Number != null && !string.IsNullOrEmpty(textileName) )635 {636 if ( !jsonFabrics.ContainsKey( textileNumber ) )637 {638 jsonFabrics[ textileNumber ] = new List< dynamic >();639 jsonFabrics[ textileNumber ].Add( new640 {641 number = textileNumber,642 name = textileName,643 paramValue = textileName.Replace(' ', '-'),644 displayFields = displayFields645 });646 }647 }648649 int loopCounter = 0;650651 <label>652 <input name="variant-color" type="radio" data-title="@textileName" data-fabric="@textileNumber" class="js-variant-color" value="variant-@productionProduct.Id"><span class="border select-option" style="background-image: url(@textileImage)"></span>653 <div class="desc-wrapper">654 <div class="desc-content">655 <h4>@textileName</h4>656 <p>657 @foreach ( dynamic displayField in displayFields )658 {659 if ( displayField.type != "Filemanager" && displayField.type != "Link" )660 {661 if ( loopCounter > 0 )662 {663 <span> / </span>664 }665 @displayField.label<span>: </span> @displayField.value666 loopCounter++;667 }668 }669 </p>670 </div>671 </div>672 </label>673 }674 }675676677678 @{679 var currentUser = PageView.Current().User;680 bool isUserAuthenticated = currentUser != null;681 bool isIOSDevice = Dynamicweb.Frontend.Devices.DeviceInfo.ParseFromUserAgentString( HttpContext.Current.Request.UserAgent ).PlatformType.ToString().ToLower() == "ios";682 bool isModeRetail = UserContext.Current.ShowRetailPrice;683 bool showPriceArea = isModeRetail;684685 string tagline = Espresso.Area.Item.Tagline;686687 Dictionary< string, string > groups = new Dictionary< string, string >();688689 if ( isUserAuthenticated )690 {691 foreach ( Dynamicweb.Security.UserManagement.Group group in PageView.Current().User.Groups )692 {693 groups.Add( group.Name, group.ID.ToString() );694 }695696 if ( groups.ContainsKey( "DM only" ) )697 {698 isUserAuthenticated = false;699 }700 if ( groups.ContainsKey( "D" ) )701 {702 isUserAuthenticated = false;703 }704 if ( groups.ContainsKey( "C" ) )705 {706 isUserAuthenticated = false;707 showPriceArea = true;708 }709 if ( groups.ContainsKey( "B" ) )710 {711 isUserAuthenticated = true;712 showPriceArea = true;713 }714 if ( groups.ContainsKey( "A" ) )715 {716 isUserAuthenticated = true;717 showPriceArea = true;718 }719 if ( groups.ContainsKey( "Agenter og importører" ) )720 {721 isUserAuthenticated = true;722 showPriceArea = true;723 }724 }725726 // GroupID's excluded to be used in another template.727 List< string > specificationDisplayGroupIds = new List< string >();728 specificationDisplayGroupIds.Add( "12" ); // General products729 specificationDisplayGroupIds.Add( "5" ); // Specifications730 specificationDisplayGroupIds.Add( "14" ); // Measurements731 //specificationDisplayGroupIds.Add("6"); // Matress / Comfort732 specificationDisplayGroupIds.Add( "7" ); // Fabric733 specificationDisplayGroupIds.Add( "8" ); // The Designers734 specificationDisplayGroupIds.Add( "9" ); // Care guide735 specificationDisplayGroupIds.Add( "10" ); // Assembly guide736 specificationDisplayGroupIds.Add( "11" ); // Download737 List< LoopItem > specificationDisplayGroupList = new List< LoopItem >();738739 Dictionary< string, LoopItem > fieldDisplayGroups = new Dictionary< string, LoopItem >();740 foreach ( LoopItem fieldDisplayGroup in GetLoop( "FieldDisplayGroups" ) )741 {742 fieldDisplayGroups[ fieldDisplayGroup.GetString( "Ecom:FieldDisplayGroup.SystemName" ) ] = fieldDisplayGroup;743 if ( fieldDisplayGroup.GetLoop( "Fields" ).Count > 0 )744 {745 if ( specificationDisplayGroupIds.Contains( fieldDisplayGroup.GetString( "Ecom:FieldDisplayGroup.ID" ) ) )746 {747 specificationDisplayGroupList.Add( fieldDisplayGroup );748 }749 }750 }751 string saveValue = "";752 List< string > sliderImages = new List< string >();753 if (GetLoop( "FieldDisplayGroups" )?.FirstOrDefault( fdg => fdg.GetInteger( "Ecom:FieldDisplayGroup.ID" ) == 21 ) != null )754 {755 sliderImages = GetLoop( "FieldDisplayGroups" )?.FirstOrDefault( fdg => fdg.GetInteger( "Ecom:FieldDisplayGroup.ID" ) == 21 )?.GetLoop( "Fields" ).Where( f => !string.IsNullOrEmpty( f.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) ).Select( fv => string.Format( "/files/images/{0}", fv.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) ).ToList();756 }757 bool hasSliderImages = sliderImages.Any();758759 Dictionary< string, dynamic > jsonFabrics = new Dictionary< string, dynamic >();760761 dynamic JSON = new762 {763 productid = GetValue( "Ecom:Product.ID" ),764 variantoptions = new List< dynamic >(),765 variantcombinations = new List< dynamic >()766 };767768 @* Global Image modal variable used in part image carousel *@769 string carouselClassList = "";770 bool showImageCarouselNavigation = GetLoop( "Details" ).Any();771 {772 //carouselClassList = "d-none";773 }774775 string vimeoPrimary = GetString( "Ecom:Product:Field.Video.Value" );776 string vimeoImage = GetString( "Ecom:Product:Field.VideoImage.Value.Clean" );777778 @* Global Image modal variable used in image carousel horizontal and vertical *@779 string isActive = string.Empty;780 string baseSKU = GetString( "Ecom:Product:Field.BaseSKU.Value" );781 string id = GetString( "Ecom:Product.ID" );782 string legFinish = GetString( "Ecom:Product:Field.FeatureGroup1.Value" );783 string fallbackImage = string.IsNullOrEmpty( GetString( "Ecom:Product.ImageDefault.Clean" ) ) == false ? string.Format( "//{0}{1}", GetGlobalValue( "Global:Area.Primarydomain" ), ImageService.Instance.GetImageURL( GetString( "Ecom:Product.ImageDefault.Clean" ), 1800, 1800, 5 ) ) : string.Empty;784 string primaryImage = fallbackImage;785786787 string overviewIllustration = GetString( "Ecom:Product.CategoryField.FinalProduct.MeasurementIcon.Value.Clean" );788789 string positions = string.IsNullOrEmpty( GetString( "Ecom:Product:Field.Positions.Value" ) ) == false ? GetString( "Ecom:Product:Field.Positions.Value" ) : "1";790 string[] positionArray = positions.Split( ',' );791 string position = positionArray[ 0 ];792 string fabric = GetString( "DefaultTextile" );793 bool includePIMPacks = GetString( "Ecom:Product.CategoryField.FinalProduct.IncludePIMPacks.Value.Clean" ) == "True";794795 string fabricOverviewRed = Espresso.Area.Item.DetailedFabricOverview;796 string fabricOverviewBlack = Espresso.Area.Item.DetailedFabricOverviewBlack;797798 string ARfile = string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.AR.Value.Clean" ) ) ? string.Empty : GetString( "Ecom:Product.CategoryField.FinalProduct.AR.Value.Clean" );799800 string videoSrc = string.Empty;801 string videoThumb = string.Empty;802 string videoProvider = string.Empty;803 if ( !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideo.Value.Clean" ) ) )804 {805 videoSrc = GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideo.Value.Clean" );806 if ( !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideoStill.Value.Clean" ) ) )807 {808 videoThumb = string.Format( "//{0}{1}", GetGlobalValue( "Global:Area.Primarydomain" ), ImageService.Instance.GetImageURL( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideoStill.Value.Clean" ), 200, 200, 5 ) );809 }810811 videoProvider = "direct";812813 if ( videoSrc.IndexOf( "vimeo" ) > -1 )814 {815 videoProvider = "vimeo";816 }817818 if ( videoSrc.IndexOf( "youtube" ) > -1 )819 {820 videoProvider = "youtube";821 }822 }823824 string video2Src = string.Empty;825 string video2Thumb = string.Empty;826 string video2Provider = string.Empty;827 if ( !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideo2.Value.Clean" ) ) )828 {829 video2Src = GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideo2.Value.Clean" );830831 if ( !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideoStillImage2.Value.Clean" ) ) )832 {833 video2Thumb = string.Format( "//{0}{1}", GetGlobalValue( "Global:Area.Primarydomain" ), ImageService.Instance.GetImageURL( GetString( "Ecom:Product.CategoryField.FinalProduct.ThumbVideoStillImage2.Value.Clean" ), 200, 200, 5 ) );834 }835836 video2Provider = "direct";837838 if ( video2Src.IndexOf( "vimeo" ) > -1 )839 {840 video2Provider = "vimeo";841 }842843 if ( video2Src.IndexOf( "youtube" ) > -1 )844 {845 video2Provider = "youtube";846 }847 }848849 Dynamicweb.Ecommerce.Products.ProductService dwProductService = new Dynamicweb.Ecommerce.Products.ProductService();850 //Product product = dwProductService.GetProductById(GetString("Ecom:Product.ID"), GetString("Ecom:Product.VariantID"), true);851 Product product = dwProductService.GetProductById( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ), Dynamicweb.Ecommerce.Common.Context.LanguageID, false );852 ProductDeliveryInfo productDeliveryInfo = Co3.IL.Dw.Services.ProductService.Instance.GetProductDeliveryInfo( product );853854 List< Product > production = new List< Product >();855 List< Product > inStock = new List< Product >();856 List< Product > blackTextiles = new List< Product >();857 List< Product > redTextiles = new List< Product >();858859 if ( productDeliveryInfo != null )860 {861 production = productDeliveryInfo.Production.Any() ? productDeliveryInfo.Production : null;862 inStock = productDeliveryInfo.InStock.Any() ? productDeliveryInfo.InStock : null;863 blackTextiles = productDeliveryInfo.BlackTextiles.Any() ? productDeliveryInfo.BlackTextiles : null;864 redTextiles = productDeliveryInfo.RedTextiles.Any() ? productDeliveryInfo.RedTextiles : null;865866 if ( production != null )867 {868 production = production.Where( p => p.Active ).ToList();869 }870871 if ( inStock != null )872 {873 inStock = inStock.Where( p => p.Active ).ToList();874 }875876 if ( blackTextiles != null )877 {878 blackTextiles = blackTextiles.Where( p => p.Active ).ToList();879 }880881 if ( redTextiles != null )882 {883 redTextiles = redTextiles.Where( p => p.Active ).ToList();884 }885 }886887 bool isBlackTextile = false;888 if ( blackTextiles != null && blackTextiles.Any() )889 {890 isBlackTextile = true;891 }892 else893 {894 isBlackTextile = GetString( "Ecom:Product:Field.PIMGroup.Value" ) == "95B";895 }896897 string fabricOverview = isBlackTextile ? fabricOverviewBlack : fabricOverviewRed;898 string bomProduct = string.Empty;899 string eComProductCanonical = string.Empty;900 string globalValueUrl = GetGlobalValue( "Global:Pageview.Url" );901 if ( GetGlobalValue( "Global:Pageview.Url" ).IndexOf( "?" ) > -1 )902 {903 globalValueUrl = GetGlobalValue( "Global:Pageview.Url" ).Substring( 0, GetGlobalValue( "Global:Pageview.Url" ).IndexOf( "?" ) );904 eComProductCanonical = String.Format( "{0}", globalValueUrl );905 Pageview.Meta.AddTag( "customCan", string.Format( "<link rel=\"canonical\" href=\"{0}\" />", eComProductCanonical ) );906 }907908 bool hasTopVideo = false;909 }910911 @sectionEnd()912913 @if ( hasSliderImages )914 {915 <section class="mb-3" style="margin-top: -1em;">916 <div data-test="01" class="carousel slide il-product-image-carousel-landscape" data-ride="carousel" data-interval="2500" id="js-e-product-sliderimage-carousel-landscape">917 <div class="border e-product-image-wrapper format-landscape">918 <div class="carousel-inner">919 @foreach ( ElementWithIndex< string > sliderImage in sliderImages.WithIndex() )920 {921 string imageContainerCssClass = sliderImage.Index == 0 ? "active" : string.Empty;922 <div style="background: url('/admin/public/getimage.ashx?Crop=0&Image=@sliderImage.Element&Format=webp&Width=2000&Height=&Quality=90'); background-size:cover; background-position: center;" class="carousel-item @imageContainerCssClass">923 </div>924 }925926 <a class="carousel-control-prev d-flex" data-slide="prev" data-target="#js-e-product-sliderimage-carousel-landscape"></a>927 <a class="carousel-control-next d-flex" data-slide="next" data-target="#js-e-product-sliderimage-carousel-landscape"></a>928929 </div>930 <ol class="carousel-indicators custom-thumbs-none d-flex">931 @foreach ( ElementWithIndex< string > sliderImage in sliderImages.WithIndex() )932 {933 string imageBullitCssClass = sliderImage.Index == 0 ? "active" : string.Empty;934 <li class="@imageBullitCssClass" data-target="#js-e-product-image-carousel-landscape" data-slide-to="@( sliderImage.Index )">935 <span style="background-image: url('/admin/public/getimage.ashx?Crop=0&Image=@sliderImage.Element&Format=jpg&Width=50&Height=&Quality=75')"></span>936 </li>937 }938 </ol>939 </div>940 </div>941 </section>942 }else if ( !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.Product_Sales_Video_Thumb.Value" ) ) )943 {944 hasTopVideo = true;945 string videoUrl = GetString( "Ecom:Product.CategoryField.FinalProduct.Product_Sales_Video_Thumb.Value" );946 string[] videoUrlParts = videoUrl.Split( new string[] { "com/" }, StringSplitOptions.None );947 <section class="mb-5" style="margin-top: -1em;">948 <div class="js-il-video-observer-element cookieconsent-optin-preferences cookieconsent-optin-statistics" style="position: relative; z-index: 1; width: 100%;">949 <div style="width: 100%; height: 56vw; position: relative; display: block; background: #fff;">950 <iframe data-cookieconsent="preferences,statistics" type="text/html" width="100%" height="100%" frameborder="0" allowfullscreen data-cookieblock-src="//player.vimeo.com/video/@videoUrlParts[ 1 ]?autoplay=1&loop=1&autopause=1&api=1&controls=1&muted=1&playsinline=1"></iframe>951952 </div>953 </div>954 <div class="cookieconsent-optout-preferences cookieconsent-optout-statistics">955 <div class="m-6 p-6 text-center h2">956 <a href="javascript:Cookiebot.renew()">@Translate( "eCom Product - Allow cookies - Video", "Please click here and 'Allow all cookies' in the pop-up box below to watch this video" )</a>957 </div>958 </div>959 </section>960 }961962 <div class="e-product js-e-product js-product-cylindo">963 @sectionStart( sectionClasses: "e-section pb-0" )964 <div class="col-12">965 <div class="row">966 <div class="col-12">967968 @if ( isBlackTextile )969 {970 <img src="/Files/Templates/Designs/innovationliving/_assets/img/black-label-logo.svg" class="mb-2" style="max-width: 22em;"/>971 }972973 <h4 class="mb-1 mt-0 text-muted">@GetString( "Ecom:Product.CategoryField.FinalProduct.ProductType.OptionLabel" )</h4>974 <h1 class="e-product-name mt-0 position-relative">975 @ProductService.Instance.GetName( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) )976 </h1>977 @if ( GetString( "Ecom:Product.CategoryField.FinalProduct.ProductName2.Value.Clean" ) != "" )978 {979 <h2 class="mt-0 mb-0">@GetString( "Ecom:Product.CategoryField.FinalProduct.ProductName2.Value.Clean" )</h2>980 }981 <p class="col-12 col-md-9 il-enlarged-text px-0">@GetString( "Ecom:Product.CategoryField.FinalProduct.TeaserDescription.Value" ).StripHtml().</p>982 <span class="text-muted">Design by @GetString( "DesignByInText.Clean" )</span>983 <p>984 <strong class="d-block mt-2 mb-0">985 <a class="arrow-right js-scroll-to-description" href="#attributes-group-5" data-target="#collapse-attributes-5">@Translate( "eCom Product - Description - Link", "View product description" )</a>986 </strong>987 </p>988 <hr class="my-4"/>989 </div>990 </div>991 </div>992 @sectionEnd()993994995 @sectionStart( sectionClasses: "e-section pb-0" )996 <div class="col-12">997 <h2>@Translate("eCom Product - Cylindo headline - Heading", "See the sofa from all angles in your favourite fabric")</h2>998 <div class="row">999 <div class="col-12 col-lg-6">10001001 @if ( ( inStock != null || production != null || blackTextiles != null || redTextiles != null ) && productDeliveryInfo != null )1002 {1003 <div>1004 <h4 class="mr-6 text-muted">1005 @Translate( "eCom Product - Choosefabric - Heading", "Choose fabric" )1006 <span class="disclaimer-button">1007 <a data-target="#disclaimerModal" data-toggle="modal" href="/">?</a>1008 </span>1009 <a href="#">1010 <span class="chosen-variant">&nbsp;</span>1011 </a>1012 </h4>1013 </div>10141015 <div id="multicollapse-textiles" class="mt-2 collapse multi-collapse il-custom-product-details-collapse show">1016 <div class="il-custom-fabric-selector variant-color">10171018 @if ( productDeliveryInfo != null )1019 {1020 if ( inStock != null )1021 {1022 string deliveryTimeOnStock = GetString( "Ecom:Product.CategoryField.FinalProduct.DeliveryTimeDaysOnStock.OptionLabel" );1023 string countryCode2 = Context.Language.Code2;1024 string[] useDeliveryTimeWeeksCountries = { "GB", "DK", "DE", "US" };1025 if ( useDeliveryTimeWeeksCountries.Any( countryCode2.Contains ) )1026 {1027 deliveryTimeOnStock = GetString( "Ecom:Product.CategoryField.FinalProduct.DeliveryTimeWeeksOnStock.OptionLabel" );1028 }10291030 <p class="mr-1 m-0 pb-0 text-muted mb-half">1031 <strong class="float-left">@Translate( "eCom Product - inStockText - Text", "In stock / short delivery time /" )</strong> &nbsp;@string.Format( "({0})", deliveryTimeOnStock )1032 <span class="delivery-button">1033 <a data-target="#deliveryStandardModal" data-toggle="modal" href="/">?</a>1034 </span>1035 </p>1036 <div class="il-custom-fabric-selector-wrap">1037 @getProductionStockAndProduction( inStock, productCategory, jsonFabrics, GetLoop( "FieldDisplayGroups" ) )1038 </div>1039 }10401041 if ( production != null )1042 {1043 <p class="mr-1 m-0 pb-0 pt-1 text-muted mb-half">1044 <strong class="float-left">@Translate( "eCom Product - outOfStockText - Text", "DIY / Longer delivery time /" )</strong> &nbsp;@string.Format( "({0})", GetString( "Ecom:Product.CategoryField.FinalProduct.DeliveryTimeWeeksNotOnStock.OptionLabel" ) )1045 <span class="delivery-button">1046 <a data-target="#deliveryMadeToOrderModal" data-toggle="modal" href="/">?</a>1047 </span>1048 </p>1049 <div class="il-custom-fabric-selector-wrap">1050 @getProductionStockAndProduction( production, productCategory, jsonFabrics, GetLoop( "FieldDisplayGroups" ) )1051 </div>1052 }10531054 if ( blackTextiles != null )1055 {1056 <p class="mr-1 m-0 pb-0 pt-1 text-muted mb-half">1057 <strong class="float-left">@Translate( "eCom Product - BLACK textiles - Text", "BLACK textiles" )</strong> &nbsp;@string.Format( "({0})", GetString( "Ecom:Product.CategoryField.FinalProduct.DeliveryTimeWeeksOnStock.OptionLabel" ) )1058 <span class="delivery-button">1059 <a data-target="#deliveryBlackModal" data-toggle="modal" href="/">?</a>1060 </span>1061 </p>1062 <div class="il-custom-fabric-selector-wrap">1063 @getProductionStockAndProduction( blackTextiles, productCategory, jsonFabrics, GetLoop( "FieldDisplayGroups" ) )1064 </div>1065 }10661067 if ( redTextiles != null )1068 {1069 <p class="mr-1 m-0 pb-0 pt-1 text-muted mb-half">1070 <strong class="float-left">@Translate( "eCom Product - RED textiles - Text", "RED textiles" )</strong> &nbsp;@string.Format( "({0})", GetString( "Ecom:Product.CategoryField.FinalProduct.DeliveryTimeWeeksNotOnStock.OptionLabel" ) )1071 <span class="delivery-button">1072 <a data-target="#deliveryRedModal" data-toggle="modal" href="/">?</a>1073 </span>1074 </p>1075 <div class="il-custom-fabric-selector-wrap">1076 @getProductionStockAndProduction( redTextiles, productCategory, jsonFabrics, GetLoop( "FieldDisplayGroups" ) )1077 </div>1078 }107910801081 <p>1082 <strong class="d-block mr-1 m-0 mt-2 mb-3">1083 <a href="@fabricOverview" class="arrow-right">@Translate( "eCom Product - DetailedOverview - Link", "Go to detailed fabric overview" )</a>1084 <span class="d-block font-weight-normal pt-1 px-0 text-muted">@Translate( "eCom Product - Color disclamer - Text", "We can't guarantee that the colour on your screen accurately portray the true fabric colour." )</span>1085 </strong>1086 </p>1087 }1088 <script data-cookieconsent="ignore">10891090 var jsonFabrics = @JsonService.Instance.ToJson( jsonFabrics );1091 </script>1092 </div>1093 </div>1094 }1095 <hr/>10961097 <div class="alert alert-dark js-il-no-buy-container d-none">1098 Det er desværre ikke muligt at købe dette produkt1099 </div>11001101 <div class="js-il-price-buy-container d-none">11021103 <div class="js-il-product-detail-delivery-price-container row">1104 <script id="js-e-handlebars-tmpl-il-product-detail-delivery-price-container" type="text/x-handlebars-template">1105 <div class="col-sm-6 order-2">1106 {{#if showPriceArea}}1107 {{#if isModeRetail}}1108 <div class="e-product-price h2 mb-1 mt-0">1109 {{{retailPriceFormatted}}}1110 </div>1111 {{else}}1112 {{#if isUserAuthenticated}}1113 <div class="e-product-price h2 mb-0 mt-0">1114 {{{retailPriceFormatted}}}1115 </div>1116 {{#unless hideResellerPrice}}1117 {{{resellerPriceFormatted}}}1118 {{/unless}}1119 {{/if}}1120 {{/if}}1121 </div>1122 <div class="col-sm-6 order-sm-3">1123 {{{stockDeliveryFormatted}}}1124 </div>1125 {{/if}}1126 </script>1127 </div>11281129 @if ( isUserAuthenticated )1130 {1131 <form action="/system/data/cart" class="e-product-form js-e-product-form js-e-product-form-addtocart py-1" method="post">1132 <input name="CartCmd" type="hidden" value="Add">1133 <input name="ProductID" type="hidden" value="@GetString( "Ecom:Product.ID" )">1134 <input name="VariantID" type="hidden" value="">1135 <input name="EcomOrderLineFieldInput_TextileID" type="hidden" value="">1136 <input name="EcomOrderLineFieldInput_DeliveryWeek" type="hidden" value="">1137 <input name="Quantity" type="hidden" value="1">1138 <input name="Redirect" type="hidden" value="">1139 <input name="OrderContext" type="hidden" value="Shopping">1140 <input name="Name" type="hidden" value="@ProductService.Instance.GetName( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) )">1141 <input name="Number" type="hidden" value="@GetString( "Ecom:Product.Number" )">1142 <input name="Price" type="hidden" value="@ProductService.Instance.GetPrice( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) ).Price.ToJavaScript()">1143 <input name="CurrencyCode" type="hidden" value="@Dynamicweb.Ecommerce.Common.Context.Currency.Code">1144 <button class="btn btn-success" type="submit">@Translate( "eCom Product - Add To Cart - Button", "Add to cart" )</button>1145 </form>11461147 }1148 </div>11491150 @if ( !isUserAuthenticated || true )1151 {1152 <div class="col-12 mb-1 pt-1">1153 <div class="row">115411551156 <div class="col-12 p-0 small">1157 @if ( string.IsNullOrEmpty(Espresso.Area.Item.ProductPageFormular) == false )1158 {1159 <a data-toggle="collapse" data-target="#multicollapse-email-form" aria-expanded="false" aria-controls="multicollapse-email-form" class="h4 p-0 d-inline float-right mb-0 mt-0" style="text-decoration: none"><i class="material-icons mr-1">email</i>@Translate( "eCom Product - Send as email - Text", "Send as e-mail" )</a>1160 // Input values used in the ProductPageFormular by JS, rendered from the chosen form in Website Settings1161 <input type="hidden" name="ProductName" value="@product.Name">1162 <input type="hidden" name="ProductNumber" value="@product.Number">11631164 }1165 @if ( string.IsNullOrEmpty( Espresso.Area.Item.DealersPage ) == false && currentUser == null && Co3.IL.Dw.Models.Frontend.User.UserContext.Current.ShowRetailPrice == false)1166 {1167 //do not display dealer link if user is logged in, or if "in store mode" is true1168 string dealerLink = Espresso.Area.Item.DealersPage;1169 if ( isBlackTextile )1170 {1171 dealerLink += "&type=Black";1172 }1173 <p><a class="h4 p-0 d-inline float-right mb-0 mt-0 mr-3" href="@dealerLink" style="text-decoration: none"><i class="material-icons mr-1">language</i>Find dealer</a></p>1174 }1175 </div>117611771178 </div>1179 </div>11801181 <div id="multicollapse-email-form" class="collapse multi-collapse bg-light border js-il-product-page-email-form">1182 <div class="p-2 p-lg-4">1183 @RenderParagraphContent(int.Parse(Espresso.Area.Item.ProductPageFormular))1184 </div>1185 </div>11861187 }1188 </div>11891190 <div class="col-12 col-lg-6 order-first">1191 @using Dynamicweb.Core11921193 @*data-video-src="@videoSrc" data-video-thumb="@videoThumb" data-video-provider="@videoProvider" data-video2-src="@video2Src" data-video2-thumb="@video2Thumb" data-video2-provider="@video2Provider"*@11941195 <div class="js-cylindo-viewer-container collapse-product-images">1196 <div class="js-cylindo-viewer cylindo-viewer border" id="cylindo_viewer_detail_@id" data-sku="@baseSKU" data-number="@GetString("Ecom:Product.Number")" data-use-pim-packs="@includePIMPacks" data-leg-finish="@legFinish" data-position="@position" data-fabric="@fabric" data-fallback-image="@fallbackImage" data-video-src="" data-video-thumb="" data-video-provider="" data-video2-src="" data-video2-thumb="" data-video2-provider=""></div>1197 @foreach ( var pos in positionArray )1198 {1199 <div class="js-cylindo-thumbs cylindo-thumbs border" data-position="@pos.ToString()"></div>1200 }1201 @*if ( !string.IsNullOrEmpty( videoProvider ) )1202 {1203 <div class="js-cylindo-thumbs js-cylindo-thumb-video cylindo-thumbs cylindo-viewer-video border" style="background-image: url('@videoThumb');" data-position="video"></div>1204 }1205 @if ( !string.IsNullOrEmpty( video2Provider ) )1206 {1207 <div class="js-cylindo-thumbs js-cylindo-thumb-video cylindo-thumbs cylindo-viewer-video border" style="background-image: url('@video2Thumb');" data-position="video"></div>1208 }*@1209 @if ( !string.IsNullOrEmpty( ARfile ) && isIOSDevice )1210 {1211 <a href="" data-link="@ARfile" target="_blank" class="cylindo-thumbs innovation-ar-icon js-href-replace border" data-position="AR"></a>1212 }1213 </div>12141215 <div class="e-product-image-container js-e-product-image-container collapse-product-images">1216 <div class="carousel slide" data-interval="false" data-ride="carousel" id="js-e-product-image-carousel">1217 <div class="e-product-image-wrapper border">1218 <div class="carousel-inner">1219 @{1220 string carouselImage = string.IsNullOrEmpty( GetString( "Ecom:Product.ImageDefault.Default.Clean" ) ) == false ? string.Format( "//{0}{1}", GetGlobalValue( "Global:Area.Primarydomain" ), ImageService.Instance.GetImageURL( GetString( "Ecom:Product.ImageDefault.Default.Clean" ), 1800, 1800, 5 ) ) : string.Empty;1221 int currentIndex = 0;1222 }122312241225 <div class="carousel-item js-il-carousel-item active" data-image="@carouselImage" data-target="#js-e-product-image-modal" data-toggle="modal">1226 <img src="/admin/public/getimage.ashx?Crop=0&Image=@GetString( "Ecom:Product.ImageDefault.Default.Clean" )&Format=jpg&Width=600&Height=&Quality=90" alt="" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0">1227 </div>12281229 @foreach ( LoopItem imageCategory in GetLoop( "ImageCategories" ) )1230 {1231 if ( imageCategory.GetString( "Category.SystemName" ) == "PIMPackshots" )1232 {1233 foreach ( ElementWithIndex< LoopItem > image in imageCategory.GetLoop( "Category.Images" ).WithIndex() )1234 {1235 int imageIndex = image.Index + 1;1236 currentIndex = imageIndex;1237 string cssClassActive = imageIndex == 0 ? "active" : string.Empty;1238 carouselImage = string.IsNullOrEmpty( image.Element.GetString( "Ecom:Product:Detail.Image.Clean" ) ) == false ? string.Format( "//{0}{1}", GetGlobalValue( "Global:Area.Primarydomain" ), ImageService.Instance.GetImageURL( image.Element.GetString( "Ecom:Product:Detail.Image.Clean" ), 1800, 1800, 5 ) ) : string.Empty;12391240 <div class="carousel-item js-il-carousel-item @cssClassActive" data-image="@carouselImage" data-target="#js-e-product-image-modal" data-toggle="modal">1241 <img src="/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=600&Height=&Quality=90" alt="" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@imageIndex">1242 </div>1243 }1244 }1245 }12461247 @if ( videoProvider == "vimeo" )1248 {1249 string[] videoSrcArray = videoSrc.Split( '/' );1250 string vimeoVideoId = videoSrcArray[ (videoSrcArray.Length-1) ];1251 <div class="carousel-item" data-target="#js-e-product-image-modal" data-toggle="modal">1252 <iframe src="https://player.vimeo.com/video/@vimeoVideoId?api=1" id="carousel-vimeo-video" frameborder="0" class="il-custom-vimeo-iframe" allow="autoplay; fullscreen" allowfullscreen data-target="#js-e-product-image-modal-carousel" data-slide-to="@(currentIndex + 1)"></iframe>1253 </div>1254 }12551256 @if ( video2Provider == "vimeo" )1257 {1258 string[] video2SrcArray = video2Src.Split( '/' );1259 string vimeoVideo2Id = video2SrcArray[ (video2SrcArray.Length-1) ];1260 <div class="carousel-item" data-target="#js-e-product-image-modal" data-toggle="modal">1261 <iframe src="https://player.vimeo.com/video/@vimeoVideo2Id?api=1" id="carousel-vimeo-video2" frameborder="0" class="il-custom-vimeo-iframe" allow="autoplay; fullscreen" allowfullscreen data-target="#js-e-product-image-modal-carousel" data-slide-to="@(currentIndex + 1)"></iframe>1262 </div>1263 }12641265 <a class="carousel-control-prev @carouselClassList" data-slide="prev" data-target="#js-e-product-image-carousel"></a>1266 <a class="carousel-control-next @carouselClassList" data-slide="next" data-target="#js-e-product-image-carousel"></a>1267 </div>1268 </div>12691270 @{1271 currentIndex = 0;1272 }12731274 <ol class="carousel-indicators @carouselClassList">12751276 <li class="active" data-target="#js-e-product-image-carousel" data-slide-to="0">1277 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@GetString( "Ecom:Product.ImageDefault.Default.Clean" )&Format=jpg&Width=100&Height=&Quality=75)"></span>1278 </li>1279 @foreach ( LoopItem imageCategory in GetLoop( "ImageCategories" ) )1280 {1281 if ( imageCategory.GetString( "Category.SystemName" ) == "PIMPackshots" )1282 {1283 foreach ( ElementWithIndex< LoopItem > image in imageCategory.GetLoop( "Category.Images" ).WithIndex() )1284 {1285 int imageIndex = image.Index + 1;1286 currentIndex = imageIndex;1287 string cssClassActive = imageIndex == 0 ? "active" : string.Empty;1288 <li class="@cssClassActive" data-target="#js-e-product-image-carousel" data-slide-to="@imageIndex">1289 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=100&Height=&Quality=75)"></span>1290 </li>1291 }1292 }1293 }12941295 @if ( videoProvider == "vimeo" )1296 {1297 <li class="il-custom-vimeo-video-thumb" data-target="#js-e-product-image-carousel" data-slide-to="@(currentIndex+1)">1298 <span style="background-image: url(@videoThumb)"></span>1299 </li>1300 }1301 </ol>1302 </div>1303 </div>13041305 <div class="modal modal-fullscreen fade e-product-image-modal" id="js-e-product-image-modal" data-backdrop="false" data-keyboard="true">1306 <div class="modal-dialog">1307 <div class="modal-content">1308 <div class="modal-body">13091310 <button type="button" class="close" data-dismiss="modal">1311 <i class="material-icons">close</i>1312 </button>13131314 <div id="js-e-product-image-modal-carousel" class="carousel slide" data-keyboard="true" data-interval="false">1315 <div class="carousel-inner">1316 <div class="carousel-item active" style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@GetString( "Ecom:Product.ImageDefault.Default.Clean" )&Format=jpg&Width=&Height=1800&Quality=90)"></div>1317 @foreach ( LoopItem imageCategory in GetLoop( "ImageCategories" ) )1318 {1319 if ( imageCategory.GetString( "Category.SystemName" ) == "PIMPackshots" )1320 {1321 foreach ( ElementWithIndex< LoopItem > image in imageCategory.GetLoop( "Category.Images" ).WithIndex() )1322 {1323 int imageIndex = image.Index + 1;1324 string cssClassActive = imageIndex == 0 ? "active" : string.Empty;1325 <div class="carousel-item @cssClassActive" style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=&Height=1800&Quality=90)">1326 </div>1327 }1328 }1329 }1330 </div>13311332 <ol class="carousel-indicators @carouselClassList">1333 <li class="active" data-target="#js-e-product-image-modal-carousel" data-slide-to="0">1334 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@GetString( "Ecom:Product.ImageDefault.Default.Clean" )&Format=jpg&Width=100&Height=&Quality=75)"></span>1335 </li>1336 @foreach ( LoopItem imageCategory in GetLoop( "ImageCategories" ) )1337 {1338 if ( imageCategory.GetString( "Category.SystemName" ) == "PIMPackshots" )1339 {1340 foreach ( ElementWithIndex< LoopItem > image in imageCategory.GetLoop( "Category.Images" ).WithIndex() )1341 {1342 int imageIndex = image.Index + 1;1343 string cssClassActive = imageIndex == 0 ? "active" : string.Empty;1344 <li class="@cssClassActive" data-target="#js-e-product-image-modal-carousel" data-slide-to="@imageIndex">1345 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=100&Height=&Quality=75)"></span>1346 </li>1347 }1348 }1349 }1350 </ol>13511352 <a class="carousel-control-prev @carouselClassList" data-target="#js-e-product-image-modal-carousel" data-slide="prev"></a>1353 <a class="carousel-control-next @carouselClassList" data-target="#js-e-product-image-modal-carousel" data-slide="next"></a>13541355 </div>1356 </div>1357 </div>1358 </div>1359 </div>13601361 </div>13621363 </div>1364 </div>1365 @sectionEnd()1366136713681369 @sectionStart( sectionClasses: "e-section pb-0" )1370 <div class="col-12 pb-3">1371 <hr/>1372 @if ( !string.IsNullOrEmpty( videoProvider ) )1373 {1374 <h2>@Translate("eCom Product - How to operate - Heading", "How to operate")</h2>1375 }1376 <div class="row">13771378 @{1379 string keyFeaturesCssClasses = "col-12";1380 }13811382 @if ( !string.IsNullOrEmpty( videoProvider ) )1383 {1384 keyFeaturesCssClasses = "col-12 col-lg-6";1385 if ( videoProvider == "vimeo" )1386 {1387 <script src="https://player.vimeo.com/api/player.js"></script>1388 }13891390 if ( videoProvider == "youtube" )1391 {1392 <script src="https://www.youtube.com/iframe_api"></script>1393 }1394 <div class="col-12 col-lg-6 mb-3 mb-lg-0">1395 @if ( videoProvider == "vimeo" )1396 {1397 string vimeoVideoId = videoSrc.Split( '/' ).Last();1398 string vimeoPath = $"https://player.vimeo.com/video/{vimeoVideoId}";13991400 <div class="embed-responsive embed-responsive-16by9 js-il-video-observer-element">1401 <iframe class="js-innovation-video-iframe embed-responsive-item" src="@( vimeoPath )" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>1402 </div>1403 }14041405 @if ( videoProvider == "youtube" )1406 {1407 string youtubeVideoId = videoSrc.Split( '/' ).Last();1408 if ( youtubeVideoId.Contains( "?v=" ) )1409 {1410 youtubeVideoId = youtubeVideoId.Split( new string[] { "?v=" }, StringSplitOptions.None ).Last();1411 }1412 string youtubePath = $"https://www.youtube.com/embed/{youtubeVideoId}?rel=0&enablejsapi=1";1413 <div class="embed-responsive embed-responsive-16by9 js-il-video-observer-element">1414 <iframe class="js-innovation-video-iframe embed-responsive-item" src="@youtubePath" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>1415 </div>1416 }14171418 </div>1419 }1420 <div class="@keyFeaturesCssClasses">1421 @if ( fieldDisplayGroups.ContainsKey( "Key_Features" ) )1422 {14231424 <div class="row">1425 <div class="col-12">1426 <div class="il-custom-attributes-container il-full-width border-0 mt-1">1427 <div class="d-flex flex-column">1428 <h4 class="text-muted">1429 <img alt="" src="/Files/Templates/Designs/innovationliving/_assets/img/innovation_living_icon_keyfeatures.svg"/>@fieldDisplayGroups[ "Key_Features" ].GetString( "Ecom:FieldDisplayGroup.Name" )1430 </h4>1431 <table class="il-custom-attribute-data-table col-9">1432 @foreach ( LoopItem fieldItem in fieldDisplayGroups[ "Key_Features" ].GetLoop( "Fields" ) )1433 {1434 string optionLabel = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );1435 if ( !string.IsNullOrEmpty( optionLabel ) )1436 {1437 optionLabel = Regex.Replace( optionLabel, ",", ", " );1438 <tr>1439 <td class="subject">@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" )</td>1440 <td>@optionLabel</td>1441 </tr>1442 }1443 }1444 </table>1445 </div>1446 </div>1447 </div>1448 </div>1449 }1450 </div>1451 </div>1452 </div>1453 @sectionEnd()14541455 @sectionStart( sectionClasses: "e-section pb-0" )14561457 <div class="col-12">14581459 @{1460 string comfortDescription = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, "ProductCategory|Upholstery|UpholsteryFoamCharacteristics" );14611462 <hr/>1463 <h2>@Translate("eCom Product - Comfort - Heading", "Comfort")</h2>1464 <div class="row">1465 <div class="col-12 col-lg-5 mb-3 mb-lg-0">1466 @comfortDescription1467 </div>14681469 <div class="col-12 col-lg-7">1470 @if ( fieldDisplayGroups.ContainsKey( "Comfort__Mattress" ) )1471 {1472 string comfortImage = GetString( "Ecom:Product.CategoryField.FinalProduct.RelComfortImage.Value.Clean" );1473 bool hasComfortImage = !string.IsNullOrEmpty( comfortImage );1474 string cssContentRow = hasComfortImage ? "col-12 col-md-7" : "col-12";14751476 <div class="row">1477 <div class="@cssContentRow order-2 order-md-1">1478 <table class="il-custom-attribute-data-table mb-4 COMFORT">1479 @foreach ( LoopItem fieldItem in fieldDisplayGroups[ "Comfort__Mattress" ].GetLoop( "Fields" ) )1480 {1481 string fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.OptionLabel" );1482 if ( string.IsNullOrEmpty( fieldDisplayGroupOptionLabelRaw ) )1483 {1484 fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );1485 }1486 string fieldDisplayGroupOptionLabelTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupOptionLabelRaw + " - Heading", fieldDisplayGroupOptionLabelRaw ), fieldDisplayGroupOptionLabelRaw );1487 string fieldDisplayGroupFieldNameRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );1488 string fieldDisplayGroupFieldNameTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupFieldNameRaw + " - Heading", fieldDisplayGroupFieldNameRaw ), fieldDisplayGroupFieldNameRaw );14891490 string fieldValue = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );14911492 if ( !string.IsNullOrEmpty( fieldValue ) )1493 {1494 fieldValue = Regex.Replace( fieldValue, ",", ", " );1495 }14961497 if ( string.IsNullOrEmpty( fieldValue ) == false )1498 {1499 <tr>1500 <td class="subject">@fieldDisplayGroupFieldNameTranslated</td>1501 <td>1502 @if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Images" && fieldValue.Contains( ".jpg" ) || fieldValue.Contains( ".png" ) )1503 {1504 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldValue, 500, 0, 0 )"/>1505 }1506 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldValue.Contains( ".jpg" ) )1507 {1508 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldValue, 500, 0, 0 )"/>1509 }1510 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldValue.Contains( ".png" ) )1511 {1512 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldValue, 500, 0, 0 )"/>1513 }1514 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldValue.Contains( ".pdf" ) )1515 {1516 <a href="@fieldValue.Replace( "../", "/Files/" )">1517 @Translate( "eCom Product = Download PDF - Link", "Download pdf here" )1518 </a>1519 }1520 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Link" )1521 {1522 <a href="@fieldValue">1523 @Translate( "eCom Product - View more - Text", "View more" )1524 </a>1525 }1526 else1527 {1528 @fieldValue<br/>1529 }1530 </td>1531 </tr>1532 }1533 }1534 </table>1535 </div>1536 @if ( hasComfortImage )1537 {1538 <div class="col-8 col-md-5 mx-auto order-1 order-md-0" aidebug="true">1539 <img src="@ImageService.Instance.GetImageURL( comfortImage, 400, 400, 1 )" alt="" class="p-img mb-2"/>1540 </div>1541 }1542 </div>1543 }1544 </div>1545 </div>1546 }1547 </div>1548 @sectionEnd()1549155015511552 @*Include( "inc/il-part-attributes.cshtml", "helpers.espresso" )*@1553 @*@if (vimeoPrimary !="" && vimeoImage !=""){15541555 <section class="e-section pr-0 pl-0 pb-2">15561557 <div onclick="play();" id="vidwrap" style="position: relative; width: 100%; height: 0; padding-bottom: 56.25%; background: url('@vimeoImage') no-repeat center; cursor: pointer;">1558 <script type="text/javascript">1559 function play(){1560 document.getElementById('vidwrap').innerHTML = '<iframe id="ytplayer" type="text/html" width="1440" height="810" style="position: absolute; width: 100%; height: 100%; left: 0; top: 0; background: #222;" src="//player.vimeo.com/video/@vimeoPrimary?api=1" frameborder="0" allowfullscreen></iframe>';1561 }1562 </script>1563 </div>15641565 </section>15661567 }*@156815691570 @if (vimeoPrimary !="" && vimeoImage !=""){1571 <section class="e-section pr-0 pl-0 pb-2">1572 <div id="vidwrap" class="js-il-video-observer-element" style="position: relative; width: 100%; height: 0; padding-bottom: 56.25%;">1573 <iframe id="ytplayer" type="text/html" width="1440" height="810" style="position: absolute; width: 100%; height: 100%; left: 0; top: 0; background: #222;" src="//player.vimeo.com/video/@vimeoPrimary?api=1&muted=1" frameborder="0" allowfullscreen></iframe>1574 </div>1575 </section>1576 }15771578 @using Dynamicweb.SystemTools15791580 @foreach ( LoopItem group in GetLoop("ProductRelatedGroups") )1581 {1582 if ( group.GetString( "Ecom:Product:RelatedGroup.GroupID" ) == "RELGRP5" )1583 {15841585 @ProductRelatedComfortProducts(1586 sectionClasses: "e-section bg-light py-3",1587 heading: @Translate("eCom ProductRelatedgroups - Comfort - Heading", "Comfort"),1588 introduction: @Translate("eCom ProductRelatedgroups - Comfort - Text", "This is the group description"),1589 productLoop: group.GetLoop("RelatedProducts").Take(3),1590 mainProduct: product1591 )1592 }1593 }15941595 @if ( !string.IsNullOrEmpty( @GetString( "Ecom:Product.CategoryField.FinalProduct.LegOptionsParagraphID.Value.Clean" ) ) )1596 {1597 @RenderParagraphContent( int.Parse( @GetString( "Ecom:Product.CategoryField.FinalProduct.LegOptionsParagraphID.Value.Clean" ) ) )1598 }15991600 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase1601 @using Co3.Espresso.Base.Extensions1602 @using Co3.Espresso.Website.Services1603 @using Dynamicweb.Core1604 @sectionStart( sectionClasses: "e-section pb-3" )16051606 <div class="col-12">1607 <div class="row">1608 <div class="col-12">1609 <div class="accordion il-specification-accordion" id="accordionSpecifications">1610 @foreach ( LoopItem specificationGroupItem in specificationDisplayGroupList )1611 {1612 string groupName = specificationGroupItem.GetString( "Ecom:FieldDisplayGroup.Name" );1613 string groupID = specificationGroupItem.GetString( "Ecom:FieldDisplayGroup.ID" );1614 bool hasValues = false;16151616 foreach ( LoopItem fieldItem in specificationGroupItem.GetLoop( "Fields" ) )1617 {1618 if ( !string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) )1619 {1620 hasValues = true;1621 }1622 else1623 {1624 if ( !string.IsNullOrEmpty( Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) ) ) )1625 {1626 hasValues = true;1627 }1628 }1629 }1630 // specificationDisplayGroupList ID's is coming from the foreach in il-part-attributes.cshtml16311632 if ( groupID == "7" ) // Fabric1633 {1634 <div class="js-product-detail-fabric-container">1635 <script id="js-e-handlebars-tmpl-product-detail-fabric" type="text/x-handlebars-template">1636 {{#if displayFields}}1637 <div id="attributes-group-@groupID" style="margin-bottom: 1em;">1638 <button class="btn-block collapsed il-custom-accordion-button-stripped m-0 p-0 pb-3 pt-2 text-center togglebar" type="button" data-toggle="collapse" data-target="#collapse-attributes-@groupID" aria-expanded="false" aria-controls="collapse-attributes-@groupID">1639 <h4 class="mb-0">@groupName</h4>1640 </button>1641 </div>16421643 <div id="collapse-attributes-@groupID" class="collapse il-top-toggle" aria-labelledby="@groupName" data-parent="#accordionSpecifications">1644 <div class="row">1645 <div class="col-10">1646 <table class="il-custom-attribute-data-table mb-4">1647 {{#each displayFields}}1648 {{#compare type '!==' 'Filemanager'}}1649 <tr>1650 <td class="subject">{{label}}</td>1651 <td>1652 {{#compare type '===' 'Link'}}1653 <a href="{{value}}">Read More</a>1654 {{else}}1655 {{#compare type '===' 'Filemanager'}}1656 <img src="{{value}}" />1657 {{else}}1658 {{value}}1659 {{/compare}}1660 {{/compare}}1661 </td>1662 </tr>1663 {{/compare}}1664 {{/each}}1665 </table>1666 </div>1667 <div class="col-2">1668 <img class="w-100" src="{{{displayFields.[0].value}}}" />1669 </div>1670 </div>1671 </div>1672 {{/if}}1673 </script>1674 </div>1675 }167616771678 if ( hasValues == true || !string.IsNullOrEmpty( bomProduct ) )1679 {1680 if ( specificationGroupItem.GetLoop( "Fields" ).Count > 0 )1681 {1682 if ( groupID != "12" && groupID != "11" && groupID != "7" )1683 {1684 // General products & Downloads & fabrics16851686 <div id="attributes-group-@groupID" style="margin-bottom: 1em;">1687 <button class="btn-block collapsed il-custom-accordion-button-stripped m-0 p-0 pt-2 pb-3 text-center togglebar" type="button" data-toggle="collapse" data-target="#collapse-attributes-@groupID" aria-expanded="false" aria-controls="collapse-attributes-@groupID">1688 <h4 class="mb-0">@groupName</h4>1689 </button>1690 </div>16911692 <div id="collapse-attributes-@groupID" class="collapse il-top-toggle" aria-labelledby="@groupName" data-parent="#accordionSpecifications">16931694 @if ( groupID == "8" ) // The Designers1695 {1696 string designerImage = GetString( "DesignerImage" );1697 string designerImageURL = "/admin/public/getimage.ashx?Crop=0&Image=" + designerImage + "&Format=jpg&Quality=90&Width=400&Height=400";169816991700 <div class="container-fluid">1701 <div class="row">1702 <div class="col-8">1703 <h4 class="mb-0">1704 <strong>1705 <span class="text-muted">Design by @GetString( "DesignByInText.Clean" )</span>1706 </strong><br/><span class="small">@GetString( "DesignedIn.Clean" )</span>1707 </h4>1708 <p>@GetString( "DesignerDesc.Clean" )</p>1709 </div>1710 <div class="col-4">1711 <img class="p-img p-img-circle" src="@designerImageURL" alt="@GetString( "DesignByInText.Clean" )"/>1712 </div>1713 @if ( @GetString( "DesignerQuotes.Clean" ) != "" )1714 {1715 <div class="col-12 col-md-10 offset-md-1 d-block mt-3 mb-3 text-left">1716 <blockquote class="il-designer-quote text-muted">@GetString( "DesignerQuotes.Clean" )</blockquote>1717 </div>1718 }1719 else1720 {1721 <div class="mb-1">&nbsp;</div>1722 }1723 </div>1724 </div>1725 }17261727 else if ( groupID == "11" ) // Download1728 {1729 <table class="il-custom-attribute-data-table __3__">17301731 @foreach ( LoopItem fieldItem in specificationGroupItem.GetLoop( "Fields" ) )1732 {1733 if ( string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false )1734 {1735 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentName1" )1736 {1737 @:<tr>1738 <td>@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )</td>1739 }1740 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentFile1" )1741 {1742 <td>1743 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )" download>1744 @Translate( "eCom Product = Download General - Link", "Download" )1745 </a>1746 </td>1747 @:</tr>1748 }17491750 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentName2" )1751 {1752 @:<tr>1753 <td>@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )</td>1754 }1755 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentFile2" )1756 {1757 <td>1758 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )" download>1759 @Translate( "eCom Product = Download General - Link", "Download" )1760 </a>1761 </td>1762 @:</tr>1763 }17641765 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentName3" )1766 {1767 @:<tr>1768 <td>@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )</td>1769 }1770 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TemplateTag" ) == "DocumentFile3" )1771 {1772 <td>1773 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )" download>1774 @Translate( "eCom Product = Download General - Link", "Download" )1775 </a>1776 </td>1777 @:</tr>1778 }1779 }1780 }1781 </table>1782 }1783 else if ( groupID == "14" ) // Measurements1784 {1785 List< LoopItem > _displayGroups = GetLoop( "FieldDisplayGroups" );1786 LoopItem sofaDisplayGroup = _displayGroups.FirstOrDefault( dgl => dgl.GetString( "Ecom:FieldDisplayGroup.ID" ) == "3" );1787 LoopItem bedDisplayGroup = _displayGroups.FirstOrDefault( dgl => dgl.GetString( "Ecom:FieldDisplayGroup.ID" ) == "4" );17881789 <div class="row">1790 @if ( sofaDisplayGroup != null && sofaDisplayGroup.GetLoop( "Fields" ).Any() )1791 {1792 <div class="col-12 col-md-6 col-lg-3 mb-4 mb-md-0">1793 <h4 class="d-flex text-muted mb-2">1794 <img src="/Files/Templates/Designs/innovationliving/_assets/img/innovation_living_icon_sofa.svg" alt="" style="max-width: 4em; opacity: .5;">1795 <span class="align-self-center pl-1">@sofaDisplayGroup.GetString( "Ecom:FieldDisplayGroup.Name" )</span>1796 @RenderSnippet( "SofaDisclaimerButton" )1797 </h4>1798 <table class="il-custom-attribute-data-table">1799 @foreach ( LoopItem fieldItem in sofaDisplayGroup.GetLoop( "Fields" ) )1800 {1801 string optionLabel = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );18021803 if ( !string.IsNullOrEmpty( optionLabel ) )1804 {1805 optionLabel = Regex.Replace( optionLabel, ",", ", " );1806 <tr>1807 <td class="subject">@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" )</td>1808 <td>@optionLabel</td>1809 </tr>1810 }1811 }1812 </table>1813 </div>1814 }18151816 @if ( bedDisplayGroup != null && bedDisplayGroup.GetLoop( "Fields" ).Any() )1817 {1818 <div class="col-12 col-md-6 col-lg-3 mb-4 mb-md-0">1819 <h4 class="d-flex text-muted mb-2">1820 <img src="/Files/Templates/Designs/innovationliving/_assets/img/innovation_living_icon_bed.svg" alt="" style="max-width: 4em; opacity: .5;">1821 <span class="align-self-center pl-1">@bedDisplayGroup.GetString( "Ecom:FieldDisplayGroup.Name" )</span>1822 @RenderSnippet( "bedDisclaimerButton" )1823 </h4>18241825 <table class="il-custom-attribute-data-table">1826 @foreach ( LoopItem fieldItem in bedDisplayGroup.GetLoop( "Fields" ) )1827 {1828 string optionLabel = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );1829 if ( !string.IsNullOrEmpty( optionLabel ) )1830 {1831 optionLabel = Regex.Replace( optionLabel, ",", ", " );1832 <tr>1833 <td class="subject">@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" )</td>1834 <td>@optionLabel</td>1835 </tr>1836 }1837 }1838 </table>1839 </div>1840 }184118421843 <div class="col-12 col-lg-6 mt-4 mb-4 mt-lg-0 mb-lg-0">18441845 @if ( !string.IsNullOrEmpty( overviewIllustration ) )1846 {1847 <img src="@ImageService.Instance.GetImageURL( overviewIllustration, 1000, 0, 0 )" alt="" class="p-img w-100"/>1848 }1849 <div class="row"><div class="col-12 col-md-6">1850 <table class="il-custom-attribute-data-table mb-4">18511852 @*if ( !string.IsNullOrEmpty( overviewIllustration ) )1853 {1854 <tr>1855 <td colspan="2"><img src="@ImageService.Instance.GetImageURL( overviewIllustration, 500, 0, 0 )" alt="" class="p-img"/></td>1856 </tr>1857 }*@18581859 @foreach ( LoopItem fieldItem in specificationGroupItem.GetLoop( "Fields" ) )1860 {1861 string optionValue = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );1862 string fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.OptionLabel" );1863 if ( string.IsNullOrEmpty( fieldDisplayGroupOptionLabelRaw ) )1864 {1865 fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );1866 }1867 string fieldDisplayGroupOptionLabelTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupOptionLabelRaw + " - Heading", fieldDisplayGroupOptionLabelRaw ), fieldDisplayGroupOptionLabelRaw );1868 string fieldDisplayGroupFieldNameRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );1869 string fieldDisplayGroupFieldNameTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupFieldNameRaw + " - Heading", fieldDisplayGroupFieldNameRaw ), fieldDisplayGroupFieldNameRaw );18701871 if ( string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false )1872 {1873 <tr>1874 <td class="subject">@fieldDisplayGroupFieldNameTranslated</td>1875 <td>1876 @if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Images" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) || fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )1877 {1878 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1879 }1880 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) )1881 {1882 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1883 }1884 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )1885 {1886 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1887 }1888 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".pdf" ) )1889 {1890 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Replace( "../", "/Files/" )">1891 @Translate( "eCom Product = Download PDF - Link", "Download pdf here" )1892 </a>1893 }1894 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Link" )1895 {1896 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )">1897 @Translate( "eCom Product - View more - Text", "View more" )1898 </a>1899 }1900 else1901 {1902 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.IsList" ) == "True" )1903 {1904 @fieldDisplayGroupOptionLabelTranslated<br/>1905 }1906 else1907 {1908 @fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Replace( "<p>", string.Empty ).Replace( "</p>", string.Empty )1909 }1910 }1911 </td>1912 </tr>1913 }1914 else if ( !string.IsNullOrEmpty( optionValue ) )1915 {1916 <tr>1917 <td class="subject">@fieldDisplayGroupOptionLabelTranslated</td>1918 <td>@optionValue.Replace( "<p>", string.Empty ).Replace( "</p>", string.Empty )</td>1919 </tr>1920 }1921 }19221923 </table>1924 </div></div>19251926 </div>1927 </div>1928 }1929 @*else if ( groupID == "6" ) // Comfort / Mattress1930 {1931 string comfortImage = product.GetCategoryValue( "FinalProduct", "RelComfortImage" )?.ToString();1932 bool hasComfortImage = !string.IsNullOrEmpty( comfortImage );1933 string cssContentRow = hasComfortImage ? "col-8" : "col-12";19341935 <div class="row">1936 <div class="@cssContentRow">1937 <table class="il-custom-attribute-data-table mb-4 COMFORT">1938 @foreach ( LoopItem fieldItem in specificationGroupItem.GetLoop( "Fields" ) )1939 {1940 bomProduct = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );1941 string fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.OptionLabel" );1942 if ( string.IsNullOrEmpty( fieldDisplayGroupOptionLabelRaw ) )1943 {1944 fieldDisplayGroupOptionLabelRaw = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Name");1945 }1946 string fieldDisplayGroupOptionLabelTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupOptionLabelRaw + " - Heading", fieldDisplayGroupOptionLabelRaw ), fieldDisplayGroupOptionLabelRaw );1947 string fieldDisplayGroupFieldNameRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );1948 string fieldDisplayGroupFieldNameTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupFieldNameRaw + " - Heading", fieldDisplayGroupFieldNameRaw ), fieldDisplayGroupFieldNameRaw );19491950 if ( string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false )1951 {1952 <tr>1953 <td class="subject">@fieldDisplayGroupFieldNameTranslated</td>1954 <td>1955 @if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Images" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) || fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )1956 {1957 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1958 }1959 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) )1960 {1961 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1962 }1963 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )1964 {1965 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>1966 }1967 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".pdf" ) )1968 {1969 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Replace( "../", "/Files/" )">1970 @Translate( "eCom Product = Download PDF - Link", "Download pdf here" )1971 </a>1972 }1973 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Link" )1974 {1975 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )">1976 @Translate( "eCom Product - View more - Text", "View more" )1977 </a>1978 }1979 else1980 {1981 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.IsList" ) == "True" )1982 {1983 @fieldDisplayGroupOptionLabelTranslated<br/>1984 }1985 else1986 {1987 @fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )<br/>1988 }1989 }1990 </td>1991 </tr>1992 }1993 else if ( !string.IsNullOrEmpty( bomProduct ) )1994 {1995 <tr>1996 <td class="subject">@fieldDisplayGroupOptionLabelTranslated</td>1997 <td>@bomProduct</td>1998 </tr>1999 }2000 }2001 </table>2002 </div>2003 @if ( hasComfortImage )2004 {2005 <div class="col-4">2006 <img src="@ImageService.Instance.GetImageURL("/Files/Images/" + comfortImage, 400, 400, 1)" alt="" class="p-img mb-2"/>2007 </div>2008 }2009 </div>2010 }*@2011 else2012 {2013 <table class="il-custom-attribute-data-table mb-4 __5__">2014 @foreach ( LoopItem fieldItem in specificationGroupItem.GetLoop( "Fields" ) )2015 {2016 string optionValue = Co3.IL.Dw.Services.ProductService.Instance.GetCategoryValueByBOMProduct( product, fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) );2017 string fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.OptionLabel" );2018 if ( string.IsNullOrEmpty( fieldDisplayGroupOptionLabelRaw ) )2019 {2020 fieldDisplayGroupOptionLabelRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );2021 }2022 string fieldDisplayGroupOptionLabelTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupOptionLabelRaw + " - Heading", fieldDisplayGroupOptionLabelRaw ), fieldDisplayGroupOptionLabelRaw );2023 string fieldDisplayGroupFieldNameRaw = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" );2024 string fieldDisplayGroupFieldNameTranslated = Translate( String.Format( "ecom Product Specifications -" + fieldDisplayGroupFieldNameRaw + " - Heading", fieldDisplayGroupFieldNameRaw ), fieldDisplayGroupFieldNameRaw );20252026 if ( string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false )2027 {2028 <tr>2029 <td class="subject">@fieldDisplayGroupFieldNameTranslated</td>2030 <td>2031 @if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Images" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) || fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )2032 {2033 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>2034 }2035 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".jpg" ) )2036 {2037 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>2038 }2039 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".png" ) )2040 {2041 <img class="col-12 col-md-6" src="@ImageService.Instance.GetImageURL( "/Files/Images/" + fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 500, 0, 0 )"/>2042 }2043 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Filemanager" && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Contains( ".pdf" ) )2044 {2045 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ).Replace( "../", "/Files/" )">2046 @Translate( "eCom Product = Download PDF - Link", "Download pdf here" )2047 </a>2048 }2049 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.TypeName" ) == "Link" )2050 {2051 <a href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )">2052 @Translate( "eCom Product - View more - Text", "View more" )2053 </a>2054 }2055 else2056 {2057 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.IsList" ) == "True" )2058 {2059 @fieldDisplayGroupOptionLabelTranslated<br/>2060 }2061 else2062 {2063 @fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )<br/>2064 }2065 }2066 </td>2067 </tr>2068 }2069 else if ( !string.IsNullOrEmpty( optionValue ) )2070 {2071 <tr>2072 <td class="subject">@fieldDisplayGroupOptionLabelTranslated</td>2073 <td>@optionValue</td>2074 </tr>2075 }2076 }2077 </table>2078 }2079 </div>2080 }2081 }2082 }2083 }20842085 </div>20862087 </div>2088 </div>2089 </div>2090 @sectionEnd()209120922093 @if ( !hasTopVideo && !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.FinalProduct.Product_Sales_Video_Thumb.Value" ) ) )2094 {2095 string videoUrl = GetString( "Ecom:Product.CategoryField.FinalProduct.Product_Sales_Video_Thumb.Value" );2096 string[] videoUrlParts = videoUrl.Split( new string[] { "com/" }, StringSplitOptions.None );2097 //<section class="mb-5" style="margin-top: -1em;">2098 @sectionStart(2099 sectionClasses: "e-section bg-light py-2",2100 contentClasses: "col-12 mx-auto" )21012102 <div class="col-12">21032104 @*js-il-video-observer-element*@2105 <div class="embed-responsive js-il-video-observer-element embed-responsive-16by9 cookieconsent-optin-preferences cookieconsent-optin-statistics">2106 <iframe class="js-innovation-video-iframe" data-cookieconsent="preferences,statistics" type="text/html" width="100%" height="100%" data-cookieblock-src="//player.vimeo.com/video/@videoUrlParts[ 1 ]" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>2107 </div>210821092110 @*<div class="js-il-video-observer-element cookieconsent-optin-preferences cookieconsent-optin-statistics" style="position: relative; z-index: 1; width: 100%;">2111 <div style="width: 100%; height: 56vw; position: relative; display: block; background: #fff;">2112 <iframe data-cookieconsent="preferences,statistics" type="text/html" width="100%" height="100%" frameborder="0" allowfullscreen data-cookieblock-src="//player.vimeo.com/video/@videoUrlParts[ 1 ]?autoplay=1&loop=1&autopause=1&api=1&controls=1&muted=1&playsinline=1"></iframe>21132114 </div>2115 </div>*@2116 <div class="cookieconsent-optout-preferences cookieconsent-optout-statistics">2117 <div class="m-6 p-6 text-center h2">2118 <a href="javascript:Cookiebot.renew()">@Translate( "eCom Product - Allow cookies - Video", "Please click here and 'Allow all cookies' in the pop-up box below to watch this video" )</a>2119 </div>2120 </div>2121 </div>2122 @sectionEnd()2123 }else if ( hasSliderImages && hasTopVideo )2124 {2125 @sectionStart(2126 sectionClasses: "e-section pb-1",2127 contentClasses: "col-12 col-md-10 mx-auto" )2128 <div class="col-12 d-block">2129 <div class="row">2130 <div class="col-12">2131 <div class="e-product-image-container">2132 <div class="carousel slide il-product-image-carousel-landscape" data-ride="carousel" id="js-e-product-image-carousel-landscape">2133 <div class="border e-product-image-wrapper format-landscape">2134 <div class="carousel-inner">21352136 @foreach ( ElementWithIndex< string > sliderImage in sliderImages.WithIndex() )2137 {2138 string imageContainerCssClass = sliderImage.Index == 0 ? "active" : string.Empty;2139 <div style="background: url('/admin/public/getimage.ashx?Crop=0&Image=@( sliderImage.Element )&Format=jpg&Width=1500&Height=&Quality=90'); background-size:cover" class="carousel-item @imageContainerCssClass" data-toggle="modal">2140 </div>2141 }21422143 <a class="carousel-control-prev d-flex" data-slide="prev" data-target="#js-e-product-image-carousel-landscape"></a>2144 <a class="carousel-control-next d-flex" data-slide="next" data-target="#js-e-product-image-carousel-landscape"></a>21452146 </div>2147 </div>2148 <ol class="carousel-indicators custom-thumbs-none d-flex">2149 @foreach ( ElementWithIndex< string > sliderImage in sliderImages.WithIndex() )2150 {2151 string imageContainerCssClass = sliderImage.Index == 0 ? "active" : string.Empty;2152 <li class="@imageContainerCssClass" data-target="#js-e-product-image-carousel-landscape" data-slide-to="@( sliderImage.Index )">2153 <span style="background-image: url('/admin/public/getimage.ashx?Crop=0&Image=@( sliderImage.Element )&Format=jpg&Width=50&Height=&Quality=75')"></span>2154 </li>2155 }2156 </ol>2157 </div>2158 </div>2159 </div>2160 </div>2161 </div>2162 @sectionEnd()2163 }21642165 @*if NO sliderImages*@2166 @{2167 string portraitCarouselClassList = "d-none";2168 string carouselPortraitContainer = "d-none";21692170 bool showPortraitCarousel = GetLoop( "ImageCategories" ).Any( cp => cp.GetString( "Category.SystemName" ) == "BannerPortrait" );21712172 if ( showPortraitCarousel == true )2173 {2174 carouselPortraitContainer = "d-block";2175 }2176 }21772178 @if ( !hasSliderImages || (showPortraitCarousel && GetGlobalValue("Global:Area.Culture.CountryCode") == "US" ))2179 {2180 @sectionStart(2181 sectionClasses: "e-section pb-1",2182 contentClasses: "col-12 col-md-8 mx-auto" )2183 <div class="col-12 col-md-8 offset-md-2 @carouselPortraitContainer">2184 <div class="row">2185 <div class="col-12">2186 <div class="e-product-image-container">2187 <div class="carousel slide il-product-image-carousel-portrait" data-ride="carousel" id="js-e-product-image-carousel-portrait">2188 <div class="border e-product-image-wrapper format-portrait">2189 <div class="carousel-inner">21902191 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) )2192 {2193 if ( imageCategories.GetString( "Category.SystemName" ) == "BannerPortrait" )2194 {2195 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() )2196 {2197 if ( image.Element.Index == 1 )2198 {2199 isActive = "active";2200 }2201 else2202 {2203 isActive = "";2204 }2205 if ( image.Index != 0 )2206 {2207 portraitCarouselClassList = "d-flex";2208 }2209 <div style="background: url('/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=1500&Height=&Quality=90'); background-size:cover" class="carousel-item @isActive" data-toggle="modal">2210 @*<img src="/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString("Ecom:Product:Detail.Image.Clean")&Format=jpg&Width=1500&Height=&Quality=90" alt="" class="e-product-image" data-slide-to="@(image.Index)">*@2211 </div>2212 }2213 }2214 }22152216 <a class="carousel-control-prev @portraitCarouselClassList" data-slide="prev" data-target="#js-e-product-image-carousel-portrait"></a>2217 <a class="carousel-control-next @portraitCarouselClassList" data-slide="next" data-target="#js-e-product-image-carousel-portrait"></a>22182219 </div>2220 </div>2221 <ol class="carousel-indicators custom-thumbs-none @portraitCarouselClassList">2222 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) )2223 {2224 if ( imageCategories.GetString( "Category.SystemName" ) == "BannerPortrait" )2225 {2226 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() )2227 {2228 if ( image.Element.Index == 1 )2229 {2230 isActive = "active";2231 }2232 else2233 {2234 isActive = "";2235 }2236 <li class="@isActive" data-target="#js-e-product-image-carousel-portrait" data-slide-to="@( image.Index )">2237 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=50&Height=&Quality=75)"></span>2238 </li>2239 }2240 }2241 }2242 </ol>2243 </div>2244 </div>2245 </div>2246 </div>2247 </div>2248 @sectionEnd()2249 }22502251 @{2252 string landscapeCarouselClassList = "d-none";2253 string carouselLandscapeContainer = "d-none";22542255 bool showLandscapeCarousel = GetLoop( "ImageCategories" ).Any( cl => cl.GetString( "Category.SystemName" ) == "BannerLandscape" );22562257 if ( showLandscapeCarousel == true )2258 {2259 carouselLandscapeContainer = "d-block";2260 }2261 }22622263 @if ( !hasSliderImages || (showLandscapeCarousel && GetGlobalValue("Global:Area.Culture.CountryCode") == "US" ))2264 {2265 @sectionStart(2266 sectionClasses: "e-section pb-1",2267 contentClasses: "col-12 col-md-10 mx-auto" )2268 <div class="col-12 @carouselLandscapeContainer">2269 <div class="row">2270 <div class="col-12">2271 <div class="e-product-image-container">2272 <div class="carousel slide il-product-image-carousel-landscape" data-ride="carousel" id="js-e-product-image-carousel-landscape">2273 <div class="border e-product-image-wrapper format-landscape">2274 <div class="carousel-inner">22752276 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) )2277 {2278 if ( imageCategories.GetString( "Category.SystemName" ) == "BannerLandscape" )2279 {2280 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() )2281 {2282 if ( image.Element.Index == 1 )2283 {2284 isActive = "active";2285 }2286 else2287 {2288 isActive = "";2289 }2290 if ( image.Index != 0 )2291 {2292 landscapeCarouselClassList = "d-flex";2293 }2294 <div style="background: url('/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=1500&Height=&Quality=90'); background-size:cover" class="carousel-item @isActive" data-toggle="modal">2295 @*<img src="/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString("Ecom:Product:Detail.Image.Clean")&Format=jpg&Width=1500&Height=&Quality=90" alt="" class="e-product-image" data-slide-to="@(image.Index)">*@2296 </div>2297 }2298 }2299 }23002301 <a class="carousel-control-prev @landscapeCarouselClassList" data-slide="prev" data-target="#js-e-product-image-carousel-landscape"></a>2302 <a class="carousel-control-next @landscapeCarouselClassList" data-slide="next" data-target="#js-e-product-image-carousel-landscape"></a>23032304 </div>2305 </div>2306 <ol class="carousel-indicators custom-thumbs-none @landscapeCarouselClassList">2307 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) )2308 {2309 if ( imageCategories.GetString( "Category.SystemName" ) == "BannerLandscape" )2310 {2311 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() )2312 {2313 if ( image.Element.Index == 1 )2314 {2315 isActive = "active";2316 }2317 else2318 {2319 isActive = "";2320 }2321 <li class="@isActive" data-target="#js-e-product-image-carousel-landscape" data-slide-to="@( image.Index )">2322 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=50&Height=&Quality=75)"></span>2323 </li>2324 }2325 }2326 }2327 </ol>2328 </div>2329 </div>2330 </div>2331 </div>2332 </div>2333 @sectionEnd()2334 }23352336 @*if end*@2337 </div>233823392340 @foreach ( LoopItem group in GetLoop( "ProductRelatedGroups" ) )2341 {2342 if ( group.GetString( "Ecom:Product:RelatedGroup.GroupID" ) != "RELGRP5" )2343 {2344 @ProductRelatedProducts(2345 sectionClasses: "e-section py-3 js-productlist-cylindo",2346 heading: group.GetString( "Ecom:Product:RelatedGroup.Name" ),2347 productLoop: group.GetLoop( "RelatedProducts" ).Take( 4 )2348 )2349 }2350 }23512352 <script type="application/ld+json">2353 {2354 "@@context" : "http://schema.org",2355 "@@type" : "Product",2356 "description" : "@GetString( "Ecom:Product.CategoryField.FinalProduct.TeaserDescription.Value" ).StripHtml()",2357 "sku" : "@GetString("Ecom:Product.Number").StripHtml()",2358 "name" : "@ProductService.Instance.GetName( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) ).StripHtml()",2359 "image" : "@primaryImage",2360 "brand" : "Innovation Living",2361 "gtin" : "@GetString("Ecom:Product.Number").StripHtml()"2362 }2363 </script>23642365 <script>2366 dataLayer.push({2367 "ecommerce": {2368 "detail": {2369 "products": [{2370 "name": "@ProductService.Instance.GetName( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) )",2371 "id": "@GetString("Ecom:Product.Number")",2372 "price": "0"@*@ProductService.Instance.GetPrice( GetString("Ecom:Product.ID"), GetString("Ecom:Product.VariantID") ).Price.ToJavaScript()*@2373 }]2374 }2375 }2376 });2377 </script>2378237923802381 <code class="js-e-breadcrumb-item-append" data-text="@HttpUtility.HtmlAttributeEncode( GetString( "Ecom:Product.Name" ) )" data-link="@HttpUtility.HtmlAttributeEncode( ProductService.Instance.GetProductLink( GetString( "Ecom:Product.PrimaryOrFirstGroupID" ), GetString( "Ecom:Product.ID" ) ) )"></code>23822383 @sectionStart()23842385 @* MODALS *@2386 @{2387 int fabricDisclamerparagraphID = 0;2388 int madeToOrderDisclamerparagraphID = 0;2389 int blackLabelDisclaimerparagraphID = 0;2390 int redLabelDisclaimerparagraphID = 0;2391 int standardDisclamerparagraphID = 0;2392 int sofasDisclamerParagraphID = 0;2393 int bedsDisclamerParagraphID = 0;23942395 string standardDisclamerparagraph = Espresso.Area.Item.StandardDeliveryDisclamerParagraph;2396 string madeToOrderDeliveryDisclamerParagraph = Espresso.Area.Item.MadeToOrderDeliveryDisclamerParagraph;2397 string blackLabelDisclaimerparagraph = Espresso.Area.Item.BlackLabelDisclaimerParagraph;2398 string redLabelDisclaimerparagraph = Espresso.Area.Item.RedLabelDisclaimerParagraph;2399 string fabricDisclamerParagraph = Espresso.Area.Item.FabricDisclamerParagraph;2400 string sofasDisclamerParagraph = Espresso.Area.Item.SofasDisclaimerParagraph;2401 string bedsDisclamerParagraph = Espresso.Area.Item.BedsDisclaimerParagraph;2402 string productCategoryName = GetString( "Ecom:Product.CategoryField.FinalProduct.ProductType.OptionLabel" );2403 if ( !string.IsNullOrEmpty( standardDisclamerparagraph ) )2404 {2405 int.TryParse( standardDisclamerparagraph.Split( '#' )[ 1 ], out standardDisclamerparagraphID );2406 }2407 if ( !string.IsNullOrEmpty( madeToOrderDeliveryDisclamerParagraph ) )2408 {2409 int.TryParse( madeToOrderDeliveryDisclamerParagraph.Split( '#' )[ 1 ], out madeToOrderDisclamerparagraphID );2410 }2411 if ( !string.IsNullOrEmpty( blackLabelDisclaimerparagraph ) )2412 {2413 int.TryParse( blackLabelDisclaimerparagraph.Split( '#' )[ 1 ], out blackLabelDisclaimerparagraphID );2414 }2415 if ( !string.IsNullOrEmpty( redLabelDisclaimerparagraph ) )2416 {2417 int.TryParse( redLabelDisclaimerparagraph.Split( '#' )[ 1 ], out redLabelDisclaimerparagraphID );2418 }2419 if ( !string.IsNullOrEmpty( fabricDisclamerParagraph ) )2420 {2421 int.TryParse( fabricDisclamerParagraph.Split( '#' )[ 1 ], out fabricDisclamerparagraphID );2422 }2423 if ( !string.IsNullOrEmpty( sofasDisclamerParagraph ) )2424 {2425 int.TryParse( sofasDisclamerParagraph.Split( '#' )[ 1 ], out sofasDisclamerParagraphID );2426 }2427 if ( !string.IsNullOrEmpty( bedsDisclamerParagraph ) )2428 {2429 int.TryParse( bedsDisclamerParagraph.Split( '#' )[ 1 ], out bedsDisclamerParagraphID );2430 }2431 }2432 <div data-category="@productCategoryName" data-paragraph="@sofasDisclamerParagraph" aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="disclaimerModal" role="dialog" tabindex="-1">2433 <div class="modal-dialog modal-dialog-centered" role="document">2434 <div class="modal-content">2435 <div class="modal-header">2436 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - Disclaimer - Heading", "Fabric disclaimer" )</h4>2437 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2438 <span aria-hidden="true">&times;</span>2439 </button>2440 </div>2441 <div class="modal-body">2442 @if ( fabricDisclamerparagraphID > 0 )2443 {2444 @RenderParagraphContent( fabricDisclamerparagraphID )2445 }2446 </div>2447 </div>2448 </div>2449 </div>24502451 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="deliveryStandardModal" role="dialog" tabindex="-1">2452 <div class="modal-dialog modal-dialog-centered" role="document">2453 <div class="modal-content">2454 <div class="modal-header">2455 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - DeliveryInfo - Heading", "Delivery info" )</h4>2456 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2457 <span aria-hidden="true">&times;</span>2458 </button>2459 </div>2460 <div class="modal-body">2461 @if ( standardDisclamerparagraphID > 0 )2462 {2463 @RenderParagraphContent( standardDisclamerparagraphID )2464 }2465 </div>2466 </div>2467 </div>2468 </div>24692470 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="deliveryMadeToOrderModal" role="dialog" tabindex="-1">2471 <div class="modal-dialog modal-dialog-centered" role="document">2472 <div class="modal-content">2473 <div class="modal-header">2474 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - DeliveryInfo - Heading", "Delivery info" )</h4>2475 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2476 <span aria-hidden="true">&times;</span>2477 </button>2478 </div>2479 <div class="modal-body">2480 @if ( madeToOrderDisclamerparagraphID > 0 )2481 {2482 @RenderParagraphContent( madeToOrderDisclamerparagraphID )2483 }2484 </div>2485 </div>2486 </div>2487 </div>24882489 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="deliveryBlackModal" role="dialog" tabindex="-1">2490 <div class="modal-dialog modal-dialog-centered" role="document">2491 <div class="modal-content">2492 <div class="modal-header">2493 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - DeliveryInfo - Heading", "Delivery info" )</h4>2494 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2495 <span aria-hidden="true">&times;</span>2496 </button>2497 </div>2498 <div class="modal-body">2499 @if ( blackLabelDisclaimerparagraphID > 0 )2500 {2501 @RenderParagraphContent( blackLabelDisclaimerparagraphID )2502 }2503 </div>2504 </div>2505 </div>2506 </div>25072508 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="deliveryRedModal" role="dialog" tabindex="-1">2509 <div class="modal-dialog modal-dialog-centered" role="document">2510 <div class="modal-content">2511 <div class="modal-header">2512 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - DeliveryInfo - Heading", "Delivery info" )</h4>2513 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2514 <span aria-hidden="true">&times;</span>2515 </button>2516 </div>2517 <div class="modal-body">2518 @if ( redLabelDisclaimerparagraphID > 0 )2519 {2520 @RenderParagraphContent( redLabelDisclaimerparagraphID )2521 }2522 </div>2523 </div>2524 </div>2525 </div>25262527 @if ( !string.IsNullOrEmpty( overviewIllustration ) )2528 {2529 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="overviewIllustrationModal" role="dialog" tabindex="-1">2530 <div class="modal-dialog modal-dialog-centered" role="document">2531 <div class="modal-content">2532 <div class="modal-header">2533 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - Overview illustration - Heading", "Overview illustration" )</h4>2534 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2535 <span aria-hidden="true">&times;</span>2536 </button>2537 </div>2538 <div class="modal-body text-center">2539 <img src="@overviewIllustration" alt="" class="p-img"/>2540 </div>2541 </div>2542 </div>2543 </div>2544 }25452546 @if ( sofasDisclamerParagraphID > 0 )2547 {2548 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="disclaimerSofaBedsModal" role="dialog" tabindex="-1">2549 <div class="modal-dialog modal-dialog-centered" role="document">2550 <div class="modal-content">2551 <div class="modal-header">2552 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - Sofas Disclaimer - Heading", "Measurement disclaimer" )</h4>2553 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2554 <span aria-hidden="true">&times;</span>2555 </button>2556 </div>2557 <div class="modal-body">2558 @RenderParagraphContent( sofasDisclamerParagraphID )2559 </div>2560 </div>2561 </div>2562 </div>2563 @SnippetStart( "SofaDisclaimerButton" )2564 <span class="disclaimer-button">2565 <a data-target="#disclaimerSofaBedsModal" data-toggle="modal" href="/">?</a>2566 </span>2567 @SnippetEnd( "SofaDisclaimerButton" )2568 }25692570 @if ( bedsDisclamerParagraphID > 0 )2571 {2572 <div aria-hidden="true" aria-labelledby="exampleModalCenterTitle" class="fade modal" id="disclaimerBedsModal" role="dialog" tabindex="-1">2573 <div class="modal-dialog modal-dialog-centered" role="document">2574 <div class="modal-content">2575 <div class="modal-header">2576 <h4 class="modal-title" id="exampleModalLongTitle">@Translate( "eCom Product - Beds Disclaimer - Heading", "Measurement disclaimer" )</h4>2577 <button aria-label="Close" class="close" data-dismiss="modal" type="button">2578 <span aria-hidden="true">&times;</span>2579 </button>2580 </div>2581 <div class="modal-body">2582 @RenderParagraphContent( bedsDisclamerParagraphID )2583 </div>2584 </div>2585 </div>2586 </div>2587 @SnippetStart( "bedDisclaimerButton" )2588 <span class="disclaimer-button">2589 <a data-target="#disclaimerBedsModal" data-toggle="modal" href="/">?</a>2590 </span>2591 @SnippetEnd( "bedDisclaimerButton" )2592 }25932594 @{2595 string ogImageContent = string.Format( "{0}://{1}{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, GetString( "Ecom:Product.ImageDefault.Clean" ) );2596 string ogDescriptionContent = Regex.Replace( Regex.Replace( GetString( "Ecom:Product.CategoryField.FinalProduct.TeaserDescription.Value" ), "<.*?>", String.Empty ), "&nbsp;", string.Empty );2597 }25982599 @SnippetStart( "productSpecificData" )2600 <meta property="og:type" content="product">2601 <meta property="og:title" content="@ProductService.Instance.GetName( GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ) )">2602 <meta property="og:description" content="@ogDescriptionContent">2603 <meta property="og:image" content="@ogImageContent">2604 @SnippetEnd( "productSpecificData" )260526062607 @SnippetStart( "prodinnologos" )2608 <a class="e-logo-link" href="@( isBlackTextile ? "/black" : "/" )">2609 <img src="@( isBlackTextile ? Espresso.Area.Item.BlackLabelLogoPrimary : Espresso.Area.Item.LogoPrimary )" class="e-logo-img e-logo-img-primary" alt="@Espresso.Area.Item.CompanyName">2610 <img src="@( isBlackTextile ? Espresso.Area.Item.BlackLabelLogoSecondary : Espresso.Area.Item.LogoSecondary )" class="e-logo-img e-logo-img-secondary" alt="@Espresso.Area.Item.CompanyName">26112612 @if ( string.IsNullOrEmpty( tagline ) == false )2613 {2614 <p class="e-logo-tagline">@tagline</p>2615 }2616 </a>2617 @SnippetEnd( "prodinnologos" )2618
keyboard_arrow_up