- Produkter
- Slibe- & Polérudstyr
- Fræsning / Boring / Gravering
- Fræsning
- Ultrafine carbide milling cutter, cylinder – end mill, shank Ø 6 mm
PROD2783
Ultrafine carbide milling cutter, cylinder – end mill, shank Ø 6 mm
Product information "Ultrafine carbide milling cutter, cylinder – end mill, shank Ø 6 mm"
Ultrafine carbide milling cutters
Ultrafine tungsten carbide milling cutters are designed for very fine finishing. They are characterised by efficient stock removal with simultaneously good surface quality. Almost all materials up to a hardness of 65 HRC can be machined. These milling cutters are also optimally suited to applications in which normal grinding points would be suitable, but greater stock removal is required. This product series is frequently used for punching and cutting tools in toolmaking and mould building.
Ultrafine tungsten carbide milling cutters are designed for very fine finishing. They are characterised by efficient stock removal with simultaneously good surface quality. Almost all materials up to a hardness of 65 HRC can be machined. These milling cutters are also optimally suited to applications in which normal grinding points would be suitable, but greater stock removal is required. This product series is frequently used for punching and cutting tools in toolmaking and mould building.
Error executing template "Designs/Swift/eCom/ProductCatalog/RelatedProductsList.cshtml" System.NullReferenceException: Object reference not set to an instance of an object. at CompiledRazorTemplates.Dynamic.RazorEngine_d4c1786b4a6a40ecbea44829f3a57962.Execute() in D:\dynamicweb.net\Solutions\Dynamicweb\HCTswift.staging.dynamicweb-cms.com\files\Templates\Designs\Swift\eCom\ProductCatalog\RelatedProductsList.cshtml:line 187 at 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.<RunCompile>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits ViewModelTemplate<ProductListViewModel> 2 @using Dynamicweb 3 @using Dynamicweb.Rendering 4 @using Dynamicweb.Ecommerce.ProductCatalog 5 @using Dynamicweb.Core.Encoders 6 @using System.Globalization 7 @using Dynamicweb.Ecommerce.Stocks 8 @using System 9 @functions{ 10 string DoubleToString(double? value) 11 { 12 if (value.HasValue) 13 { 14 return value.Value.ToString(CultureInfo.InvariantCulture); 15 } 16 return null; 17 } 18 19 Dictionary<string, object> favoriteParameters { get; set; } 20 } 21 22 @{ 23 var productList = Model.Products; 24 25 26 27 string anonymousUsersLimitations = Pageview.AreaSettings.GetRawValueString("AnonymousUsers", string.Empty); 28 bool anonymousUser = Pageview.User == null; 29 bool isErpConnectionDown = !Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current.Items["IsWebServiceConnectionAvailable"]); 30 bool hideAddToCart = anonymousUsersLimitations.Contains("cart") && anonymousUser || Pageview.AreaSettings.GetBoolean("ErpDownHideAddToCart") && isErpConnectionDown; 31 bool hidePrice = anonymousUsersLimitations.Contains("price") && anonymousUser || Pageview.AreaSettings.GetBoolean("ErpDownHidePrices") && isErpConnectionDown; 32 33 string url = "/Default.aspx?ID=" + (GetPageIdByNavigationTag("CartService")); 34 if (!url.Contains("LayoutTemplate")) 35 { 36 url += url.Contains("?") ? "&LayoutTemplate=Swift_MiniCart.cshtml" : "?LayoutTemplate=Swift_MiniCart.cshtml"; 37 } 38 39 string iconPath = "/Files/icons/"; 40 41 string showPricesWithVat = Pageview.Area.EcomPricesWithVat.ToLower(); 42 bool neverShowVat = string.IsNullOrEmpty(showPricesWithVat); 43 44 if (Dynamicweb.Frontend.PageView.Current().Area.ReverseChargeForVat || Dynamicweb.Security.UserManagement.User.GetCurrentExtranetUser()?.ReverseChargeForVat == true){ 45 if (showPricesWithVat == "false"){ 46 showPricesWithVat = ""; 47 neverShowVat = true; 48 } 49 } 50 51 string selectedDisplayGroups = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["SelectedDisplayGroups"]) ? Dynamicweb.Context.Current.Request.Form["SelectedDisplayGroups"].ToString() : string.Empty; 52 List<string> selectedDisplayGroupsList = selectedDisplayGroups != null ? selectedDisplayGroups.Split(',').ToList() : new List<string>(); 53 54 bool userHasPendingQuote = Dynamicweb.Ecommerce.Common.Context.Cart != null && Dynamicweb.Ecommerce.Common.Context.Cart.IsQuote; 55 56 //Collect the titles for all available fields 57 List<string> fieldsHeaders = new List<string>(); 58 foreach (var product in productList) 59 { 60 foreach (var selection in selectedDisplayGroupsList) 61 { 62 foreach (CategoryFieldViewModel group in product.FieldDisplayGroups.Values) 63 { 64 if (selection.ToString() == group.Id) 65 { 66 foreach (var field in group.Fields) 67 { 68 if (!fieldsHeaders.Contains(field.Value.Name)) 69 { 70 bool noValues = false; 71 if (field.Value.Value.GetType() == typeof(System.Collections.Generic.List<FieldOptionValueViewModel>)) 72 { 73 System.Collections.Generic.List<FieldOptionValueViewModel> values = field.Value.Value as System.Collections.Generic.List<FieldOptionValueViewModel>; 74 noValues = values.Count > 0 ? false : true; 75 } 76 else if (string.IsNullOrEmpty(field.Value.Value.ToString())) 77 { 78 noValues = true; 79 } 80 81 if (!noValues) 82 { 83 fieldsHeaders.Add(field.Value.Name); 84 } 85 } 86 } 87 } 88 } 89 } 90 } 91 92 //Check if there are any facet and count the amount of selected facets 93 bool facetsFound = false; 94 int selectedFacetsCount = 0; 95 if (Model.FacetGroups != null) 96 { 97 foreach (FacetGroupViewModel facetGroup in Model.FacetGroups) 98 { 99 foreach (FacetViewModel facet in facetGroup.Facets) 100 { 101 if (facet.Options.Count() > 0) 102 { 103 facetsFound = true; 104 105 foreach (FacetOptionViewModel option in facet.Options) 106 { 107 if (option.Selected) 108 { 109 selectedFacetsCount++; 110 } 111 } 112 } 113 } 114 } 115 } 116 117 //Map the data 118 string selectedFacetsLabel = selectedFacetsCount > 0 ? "(" + selectedFacetsCount + ")" : string.Empty; 119 int totalGroups = Model.FacetGroups != null ? Model.FacetGroups.Count() : 0; 120 121 int pageSizeSetting = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["PageSizeSetting"]) ? Convert.ToInt32(Dynamicweb.Context.Current.Request.Form["PageSizeSetting"].ToString()) : 10; 122 string sourceType = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["SourceType"]) ? Dynamicweb.Context.Current.Request.Form["SourceType"].ToString() : "variants"; 123 string requestType = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["RequestType"]) ? Dynamicweb.Context.Current.Request.Form["RequestType"].ToString() : string.Empty; 124 string title = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["Title"]) ? Dynamicweb.Context.Current.Request.Form["Title"].ToString() : string.Empty; 125 string mainProductId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["MainProductID"]) ? Dynamicweb.Context.Current.Request.Form["MainProductID"].ToString() : string.Empty; 126 string paragraphID = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["ParagraphID"]) ? Dynamicweb.Context.Current.Request.Form["ParagraphID"].ToString() : string.Empty; 127 string servicePageId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["ID"]) ? Dynamicweb.Context.Current.Request.Form["ID"].ToString() : string.Empty; 128 bool hideTitle = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["HideTitle"]) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.Form["HideTitle"].ToString()) : false; 129 bool hideImage = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["HideImage"]) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.Form["HideImage"].ToString()) : false; 130 bool hideProductNumber = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["HideProductNumber"]) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.Form["HideProductNumber"].ToString()) : false; 131 bool hideProductName = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["HideProductName"]) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.Form["HideProductName"].ToString()) : false; 132 bool hideStock = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["HideStock"]) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.Form["HideStock"].ToString()) : false; 133 bool quantitySelector = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["QuantitySelector"]) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.Form["QuantitySelector"].ToString()) : false; 134 string addToCartColWidth = quantitySelector ? "calc(var(--swift-button-primary-padding-x) * 2 + 1rem + 7rem)" : "calc(var(--swift-button-primary-padding-x) * 2 + 1rem)"; @* Set the width of the column to: button-primary-padding-x × 2 + 1rem for the icon + 7rem for the quantity input *@ 135 bool hideFilters = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["HideFilters"]) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.Form["HideFilters"].ToString()) : false; 136 137 bool hideVatPrice = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["HideVatPrice"]) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.Form["HideVatPrice"].ToString()) : false; 138 bool showCustomBeforePrice = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["ShowCustomBeforePrice"]) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.Form["ShowCustomBeforePrice"].ToString()) : false; 139 140 bool showAddToFavouriteList = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["ShowAddToFavouriteList"]) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.Form["ShowAddToFavouriteList"].ToString()) : false; 141 142 string saleBadgeType = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("SaleBadgeType")) ? Dynamicweb.Context.Current.Request.Form.Get("SaleBadgeType") : string.Empty; 143 string saleBadgeCssClassName = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("SaleBadgeCssClassName")) ? Dynamicweb.Context.Current.Request.Form.Get("SaleBadgeCssClassName") : string.Empty; 144 string newBadgeCssClassName = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("NewBadgeCssClassName")) ? Dynamicweb.Context.Current.Request.Form.Get("NewBadgeCssClassName") : string.Empty; 145 int newPublicationDays = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("NewPublicationDays")) ? Convert.ToInt32(Dynamicweb.Context.Current.Request.Form.Get("NewPublicationDays")) : 0; 146 string campaignBadgesValues = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("CampaignBadgesValues")) ? Dynamicweb.Context.Current.Request.Form.Get("CampaignBadgesValues") : string.Empty; 147 148 //Custom stock changes 149 var mainProduct = Dynamicweb.Ecommerce.Services.Products.GetProductById(mainProductId, string.Empty, Dynamicweb.Ecommerce.Common.Context.LanguageID); 150 bool showExtraStock = false; 151 bool showExtraStockIsValid = false; 152 if (mainProduct != null) 153 { 154 string showExtraStockFieldValue = mainProduct.ProductFieldValues.FirstOrDefault(f => f.ProductField.SystemName == "ShowExtraStock").Value.ToString(); 155 showExtraStockIsValid = bool.TryParse(showExtraStockFieldValue, out showExtraStock); 156 } 157 // 158 159 var badgeParms = new Dictionary<string, object>(); 160 badgeParms.Add("saleBadgeType", saleBadgeType); 161 badgeParms.Add("saleBadgeCssClassName", saleBadgeCssClassName); 162 badgeParms.Add("newBadgeCssClassName", newBadgeCssClassName); 163 badgeParms.Add("campaignBadgesValues", campaignBadgesValues); 164 badgeParms.Add("newPublicationDays", newPublicationDays); 165 166 bool saleBadgeEnabled = !string.IsNullOrWhiteSpace(saleBadgeCssClassName) && saleBadgeCssClassName != "none" ? true : false; 167 bool newBadgeEnabled = !string.IsNullOrWhiteSpace(newBadgeCssClassName) && newBadgeCssClassName != "none" ? true : false; 168 169 string theme = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["Theme"]) ? Dynamicweb.Context.Current.Request.Form["Theme"].ToString() : string.Empty; 170 string modalTheme = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["ModalTheme"]) ? Dynamicweb.Context.Current.Request.Form["ModalTheme"].ToString() : "theme light"; 171 string titleFontSize = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["TitleFontSize"]) ? Dynamicweb.Context.Current.Request.Form["TitleFontSize"].ToString() : string.Empty; 172 string contentPadding = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["ContentPadding"]) ? Dynamicweb.Context.Current.Request.Form["ContentPadding"].ToString() : string.Empty; 173 174 //Create group id collection and products id collection strings 175 string groupId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["GroupId"]) ? Dynamicweb.Context.Current.Request.Form["GroupId"].ToString() : string.Empty; 176 string productIds = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["MainProductID"]) ? Dynamicweb.Context.Current.Request.Form["MainProductID"].ToString() : string.Empty; 177 string productVariantIds = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["ProductvariantId"]) ? Dynamicweb.Context.Current.Request.Form["ProductvariantId"].ToString() : string.Empty; 178 string contextCart = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form["OrderContext"]) ? Dynamicweb.Context.Current.Request.Form["OrderContext"].ToString() : string.Empty; 179 180 bool isLazyLoadingForProductInfoEnabled = Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current.Items["IsLazyLoadingForProductInfoEnabled"]); 181 182 if (sourceType == "selected") 183 { 184 productList = productList.OrderBy(product => productIds.IndexOf(product.Id)).ToList(); 185 } 186 } 187 <h1>TEST @Dynamicweb.Context.Current.Request["ProductID"].ToString()</h1> 188 189 @if (productList.Count > 0 && requestType != "UpdateFacets") 190 { 191 192 //The form that defines what should be rendered 193 <form action="/Default.aspx?ID=@servicePageId" id="RelatedProductsListForm_@paragraphID" data-response-target-element="RelatedProductsListFacets_@paragraphID"> 194 <input type="hidden" name="SortOrder" value="DESC"> 195 <input type="hidden" name="ID" value="@servicePageId"> 196 <input type="hidden" name="SourceType" value="@sourceType"> 197 <input type="hidden" name="ParagraphID" value="@paragraphID"> 198 <input type="hidden" name="RequestType" value="UpdateFacets" id="RelatedProductsListRequestType_@paragraphID"> 199 <input type="hidden" name="PageSize" value="@pageSizeSetting" id="RelatedProductsListPageSize_@paragraphID"> 200 <input type="hidden" name="PageSizeSetting" value="@pageSizeSetting"> 201 <input type="hidden" name="Title" value="@title"> 202 <input type="hidden" name="HideTitle" value="@hideTitle.ToString()"> 203 <input type="hidden" name="SelectedDisplayGroups" value="@selectedDisplayGroups"> 204 <input type="hidden" name="HideImage" value="@hideImage.ToString()"> 205 <input type="hidden" name="HideProductNumber" value="@hideProductNumber.ToString()"> 206 <input type="hidden" name="HideProductName" value="@hideProductName.ToString()"> 207 <input type="hidden" name="HideStock" value="@hideStock.ToString()"> 208 <input type="hidden" name="HideFilters" value="@hideFilters.ToString()"> 209 <input type="hidden" name="HideVatPrice" value="@hideVatPrice.ToString()"> 210 <input type="hidden" name="ShowCustomBeforePrice" value="@showCustomBeforePrice.ToString()"> 211 <input type="hidden" name="ShowAddToFavouriteList" value="@showAddToFavouriteList.ToString()"> 212 <input type="hidden" name="QuantitySelector" value="@quantitySelector.ToString()"> 213 <input type="hidden" name="Theme" value="@theme"> 214 <input type="hidden" name="TitleFontSize" value="@titleFontSize"> 215 <input type="hidden" name="ContentPadding" value="@contentPadding"> 216 217 @if (!string.IsNullOrEmpty(contextCart)) 218 { 219 <input type="hidden" name="OrderContext" value="@contextCart"> 220 <input type="hidden" name="minicartid" value="@contextCart"> 221 } 222 223 @if (isLazyLoadingForProductInfoEnabled) 224 { 225 <input type="hidden" name="getproductinfo" value="true"> 226 } 227 228 @*--- VARIANTS ---*@ 229 @if (sourceType == "variants") 230 { 231 <input type="hidden" name="MainProductID" value="@productIds"> 232 <input type="hidden" name="isVariant" value="true"> 233 } 234 235 @*--- MOST SOLD ---*@ 236 @if (sourceType == "most-sold") 237 { 238 <input type="hidden" name="SortBy" value="OrderCount"> 239 <input type="hidden" name="GroupId" value="@groupId"> 240 <input type="hidden" name="isVariant" value="false"> 241 } 242 243 @*--- TRENDING ---*@ 244 @if (sourceType == "trending") 245 { 246 <input type="hidden" name="SortBy" value="OrderCountGrowth"> 247 <input type="hidden" name="GroupId" value="@groupId"> 248 <input type="hidden" name="isVariant" value="false"> 249 } 250 251 @*--- LATEST ---*@ 252 @if (sourceType == "latest") 253 { 254 <input type="hidden" name="SortBy" value="Created"> 255 <input type="hidden" name="GroupId" value="@groupId"> 256 <input type="hidden" name="isVariant" value="false"> 257 } 258 259 @*--- FREQUENTLY BOUGHT ---*@ 260 @if (sourceType == "frequently") 261 { 262 <input type="hidden" name="BoughtWithProductIds" value="[@productIds]"> 263 <input type="hidden" name="isVariant" value="false"> 264 } 265 266 @*--- RELATED PRODUCTS ---*@ 267 @if (sourceType == "related-products") 268 { 269 <input type="hidden" name="ProductvariantId" value="@productVariantIds"> 270 } 271 272 <input type="hidden" name="SaleBadgeType" value="@saleBadgeType"> 273 <input type="hidden" name="SaleBadgeCssClassName" value="@saleBadgeCssClassName"> 274 <input type="hidden" name="NewBadgeCssClassName" value="@newBadgeCssClassName"> 275 <input type="hidden" name="NewPublicationDays" value="@newPublicationDays"> 276 277 @if (campaignBadgesValues != string.Empty) 278 { 279 <input type="hidden" name="CampaignBadgesValues" value="@campaignBadgesValues"> 280 } 281 282 @if (facetsFound && !hideFilters) 283 { 284 <div class="modal" id="FacetsModal_@paragraphID"> 285 <div class="modal-dialog modal-dialog-scrollable"> 286 <div class="modal-content @modalTheme"> 287 <div class="modal-header"> 288 <h5 class="modal-title">@Translate("Filters and sorting")</h5> 289 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="@Translate("Close")"></button> 290 </div> 291 <div class="modal-body" id="RelatedProductsListFacets_@paragraphID"> 292 @foreach (FacetGroupViewModel facetGroup in Model.FacetGroups) 293 { 294 foreach (FacetViewModel facet in facetGroup.Facets) 295 { 296 if (facet.Options.Count() > 0) 297 { 298 <div class="border-bottom"> 299 <div class="d-flex" data-bs-toggle="collapse" data-bs-target="#FacetGroup_@facet.Name.Replace(" ", string.Empty)" role="button" aria-expanded="true" aria-controls="FacetGroup_@facet.Name.Replace(" ", string.Empty)"> 300 <h2 class="my-3 opacity-85 m-0 flex-fill h6">@facet.Name</h2> 301 <div class="my-auto collapse-chevron-icon"></div> 302 </div> 303 <div class="collapse show" id="FacetGroup_@facet.Name.Replace(" ", string.Empty)"> 304 <div class="pb-3"> 305 @foreach (FacetOptionViewModel facetOption in facet.Options) 306 { 307 string renderType = facet.RenderType; 308 309 string disabled = facetOption.Count <= 0 ? "disabled" : string.Empty; 310 string selected = facetOption.Selected ? "checked" : string.Empty; 311 312 string facetLabel = HtmlEncoder.HtmlEncode(facetOption.Label); 313 facetLabel = facetLabel.ToLower() == "true" ? Translate("Yes") : facetLabel; 314 facetLabel = facetLabel.ToLower() == "false" ? Translate("No") : facetLabel; 315 316 var variantOption = Dynamicweb.Ecommerce.Services.VariantOptions.GetVariantOption(facetOption.Value.ToString()); 317 318 string image = facetOption.Value; 319 string colorCode = facetOption.Value; 320 321 if (variantOption != null) 322 { 323 image = variantOption.LargeImage; 324 colorCode = variantOption.Color; 325 } 326 327 if (renderType == "Colors") 328 { 329 <div class="colorbox"> 330 <input type="checkbox" onclick="swift.PageUpdater.Update(event)" class="@disabled @selected" name="@facet.QueryParameter" value="[@facetOption.Value]" data-filter-value="@facetLabel" @selected title="@facetOption.Label"> 331 @if (colorCode.Contains("#")) 332 { 333 <span class="colorbox-background" style="background-color: @colorCode"></span> 334 } 335 else 336 { 337 <img class="colorbox-background" src="/Admin/Public/GetImage.ashx?width=16&height=16&image=@image"> 338 } 339 </div> 340 } 341 else 342 { 343 var optionValue = facetOption.Value.Contains(",") ? $"[{facetOption.Value}]" : facetOption.Value; 344 345 <label class="form-check mb-1" @disabled> 346 <input type="checkbox" onclick="swift.PageUpdater.Update(event)" class="form-check-input" name="@facet.QueryParameter" value="@optionValue" data-filter-value="@facetLabel" @selected> 347 <span class="form-check-label d-flex align-items-center"> 348 <span class="flex-fill">@facetLabel </span> 349 <small class="opacity-85">@facetOption.Count</small> 350 </span> 351 </label> 352 } 353 } 354 </div> 355 </div> 356 </div> 357 } 358 } 359 } 360 </div> 361 <div class="modal-footer d-flex"> 362 @if (selectedFacetsCount != 0) 363 { 364 <button type="button" class="btn btn-secondary flex-fill" onclick="location.reload()">@Translate("Clear") (@selectedFacetsCount)</button> 365 } 366 <button type="button" class="btn btn-primary flex-fill" data-bs-dismiss="modal" onclick="UpdateRelatedProductsList(event, 'UpdateList', '@paragraphID')">@Translate("Update")</button> 367 </div> 368 </div> 369 </div> 370 </div> 371 } 372 </form> 373 374 //The products list table 375 <div class="grid h-100 @(contentPadding) @theme"> 376 @if (!string.IsNullOrEmpty(title) && !hideTitle) 377 { 378 <div class="g-col-12"> 379 <h2 class="@titleFontSize mb-4">@title</h2> 380 </div> 381 } 382 383 @if (facetsFound && !hideFilters) 384 { 385 <div class="g-col-12"> 386 <button type="button" class="btn btn-primary d-flex mb-3" data-bs-toggle="modal" data-bs-target="#FacetsModal_@paragraphID" onclick="UpdateRelatedProductsList(event, 'UpdateFacets', '@paragraphID')"> 387 <span class="flex-fill text-start pe-3"> 388 @Translate("Filter") @selectedFacetsLabel 389 </span> 390 <span class="icon-1 position-relative" style="top: 5px"> 391 @ReadFile(iconPath + "sliders.svg") 392 </span> 393 </button> 394 </div> 395 } 396 397 <div class="table-responsive w-100 g-col-12"> 398 <script> 399 gtag("event", "view_item_list", { 400 item_list_id: "related_product_list", 401 item_list_name: "Related products list", 402 items: [ 403 @foreach (var product in productList) 404 { 405 string itemVariant = string.Empty; 406 if (!string.IsNullOrEmpty(product.VariantName)) 407 { 408 itemVariant = $"item_variant:'{product.VariantName}',"; 409 } 410 <text>{ 411 item_id: '@product.Number', 412 item_name: '@Dynamicweb.Core.Encoders.HtmlEncoder.JavaScriptStringEncode(product.Name)', 413 @itemVariant 414 currency: '@product.Price.CurrencyCode', 415 price: @product.Price.ToStringInvariant(), 416 discount: @product.Discount.ToStringInvariant(); 417 },</text> 418 } 419 ] 420 }); 421 </script> 422 423 <table class="table table-sm table-striped align-middle text-nowrap"> 424 <thead> 425 <tr> 426 @if (!hideImage) 427 { 428 <th scope="col"> </th> 429 } 430 @if (!hideProductNumber) 431 { 432 <th scope="col"># test</th> 433 } 434 @if (!hideProductName) 435 { 436 <th scope="col">@Translate("Product")</th> 437 } 438 @foreach (var header in fieldsHeaders) 439 { 440 <th scope="col">@Translate("field-"+header, header)</th> 441 } 442 @if (!hideStock) 443 { 444 <th scope="col">@Translate("Stock")</th> 445 } 446 @if (showExtraStockIsValid && showExtraStock) 447 { 448 <th scope="col">@Translate("Extra stock")</th> 449 } 450 @if (!anonymousUser && showAddToFavouriteList){ 451 <th scope="col" class="text-end"></th> 452 } 453 @if (!hidePrice) 454 { 455 <th scope="col" class="text-end">@Translate("Price")</th> 456 } 457 @if (!hideAddToCart) 458 { 459 <th scope="col" style="width: @addToCartColWidth;">@Translate("Qty")</th> 460 } 461 </tr> 462 </thead> 463 464 <tbody> 465 @foreach (var product in productList) 466 { 467 468 //Custom stocks 469 var currentProduct = Dynamicweb.Ecommerce.Services.Products.GetProductById(product.Id, product.VariantId, product.LanguageId); 470 bool isCustomStock = false; 471 double customStockQuantity = 0; 472 473 double beforePrice = currentProduct.Price.PriceWithoutVAT; 474 string beforePriceFormatted = currentProduct.Price.PriceWithoutVATFormatted; 475 476 if (product.Prices.Count > 0){ 477 foreach (var price in product.Prices){ 478 beforePrice = price.Price.PriceWithoutVat; 479 beforePriceFormatted = price.Price.PriceWithoutVatFormatted; 480 } 481 } 482 483 484 string image = product.DefaultImage.Value; 485 image = $"/Admin/Public/GetImage.ashx?image={image}&width=30&format=webp"; 486 487 DateTime createdDate = product.Created.Value; 488 bool showBadges = saleBadgeEnabled && product.Discount.Price != 0 ? true : false; 489 showBadges = (newBadgeEnabled && newPublicationDays == 0) || (newBadgeEnabled && (createdDate.AddDays(newPublicationDays) > DateTime.Now)) ? true : showBadges; 490 showBadges = !string.IsNullOrEmpty(campaignBadgesValues) ? true : showBadges; 491 492 List<CategoryFieldViewModel> categories = new List<CategoryFieldViewModel>(); 493 494 495 496 497 FieldValueViewModel customIframe; 498 499 product.ProductFields.TryGetValue("CustomIframe", out customIframe); 500 501 string customIframeCode = ""; 502 503 if (customIframe != null) 504 { 505 506 customIframeCode = customIframe?.Value != null ? customIframe.Value.ToString() : ""; 507 508 } 509 510 511 512 foreach (var selection in selectedDisplayGroupsList) 513 { 514 foreach (CategoryFieldViewModel group in product.FieldDisplayGroups.Values) 515 { 516 if (selection.ToString() == group.Id) 517 { 518 categories.Add(group); 519 } 520 } 521 } 522 523 <tr> 524 @if (!hideImage) 525 { 526 <td width="30"> 527 <img src="@image"> 528 </td> 529 } 530 @if (!hideProductNumber) 531 { 532 <td>@product.Number</td> 533 } 534 @if (!hideProductName) 535 { 536 <td> 537 538 @if (!string.IsNullOrEmpty(product.VariantName)) 539 { 540 <div>@product.Name - @product.VariantName</div> 541 } 542 else 543 { 544 @product.Name 545 } 546 547 @if (showBadges) 548 { 549 <div class="fs-7"> 550 @{ 551 @RenderPartial("Components/EcommerceBadge.cshtml", product, badgeParms) 552 } 553 </div> 554 } 555 </td> 556 } 557 @foreach (string fieldCell in fieldsHeaders) 558 { 559 FieldValueViewModel field = new FieldValueViewModel(); 560 bool fieldFound = false; 561 562 foreach (CategoryFieldViewModel category in categories) 563 { 564 foreach (var categoryField in category.Fields) 565 { 566 bool noValues = false; 567 if (categoryField.Value.Value.GetType() == typeof(System.Collections.Generic.List<FieldOptionValueViewModel>)) 568 { 569 System.Collections.Generic.List<FieldOptionValueViewModel> values = categoryField.Value.Value as System.Collections.Generic.List<FieldOptionValueViewModel>; 570 noValues = values.Count > 0 ? false : true; 571 } 572 else if (string.IsNullOrEmpty(categoryField.Value.Value.ToString())) 573 { 574 noValues = true; 575 } 576 577 if (!noValues) 578 { 579 string fieldName = categoryField.Value.Name; 580 if (fieldName == fieldCell) 581 { 582 field = categoryField.Value; 583 fieldFound = true; 584 } 585 } 586 } 587 } 588 589 if (fieldFound) 590 { 591 string fieldValue = field?.Value != null ? field.Value.ToString() : string.Empty; 592 fieldValue = fieldValue == "False" ? Translate("No") : fieldValue; 593 fieldValue = fieldValue == "True" ? Translate("Yes") : fieldValue; 594 595 bool isColor = false; 596 597 <td> 598 @if (field.Value.GetType() == typeof(System.Collections.Generic.List<Dynamicweb.Ecommerce.ProductCatalog.FieldOptionValueViewModel>)) 599 { 600 System.Collections.Generic.List<FieldOptionValueViewModel> values = field.Value as System.Collections.Generic.List<FieldOptionValueViewModel>; 601 int valueCount = 0; 602 int totalValues = values.Count; 603 604 foreach (FieldOptionValueViewModel option in values) 605 { 606 if (!string.IsNullOrEmpty(option.Value)) 607 { 608 if (option.Value.StartsWith("#", StringComparison.OrdinalIgnoreCase) || option.Value.StartsWith("/Files/", StringComparison.OrdinalIgnoreCase)) 609 { 610 isColor = true; 611 } 612 } 613 614 if (!isColor) 615 { 616 @option.Name 617 } 618 else 619 { 620 if (option.Value.StartsWith("/Files/", StringComparison.OrdinalIgnoreCase)) 621 { 622 <img src="/Admin/Public/GetImage.ashx?width=16&height=16&image=@option.Value" title="@option.Name"> 623 } 624 else 625 { 626 <span class="colorbox-sm" style="background-color: @option.Value" title="@option.Name"></span> 627 } 628 } 629 630 if (valueCount != totalValues && valueCount < (totalValues - 1)) 631 { 632 if (isColor) 633 { 634 <text> </text> 635 } 636 else 637 { 638 <text>, </text> 639 } 640 } 641 valueCount++; 642 } 643 } 644 //Custom stocks 645 //UK => 2 646 //DAT => 3 647 //MPR => 4 648 else if (field.SystemName == "ProductStock") 649 { 650 651 var stockUnitsFiltered = new List<StockUnit>(); 652 if (currentProduct != null) 653 { 654 var displayStock = currentProduct.ProductFieldValues.FirstOrDefault(f => f.ProductField.SystemName == "DisplayStock"); 655 if (displayStock != null) 656 { 657 var stockUnits = Dynamicweb.Ecommerce.Services.StockService.GetStockUnits(currentProduct.Id, currentProduct.VariantId).ToList(); 658 if (stockUnits.Count > 0) 659 { 660 if (displayStock.Value.ToString() == "DAT") 661 { 662 stockUnitsFiltered = stockUnits.Where(su => su.StockLocationId == 3).ToList(); 663 } 664 else if (displayStock.Value.ToString() == "UK") 665 { 666 stockUnitsFiltered = stockUnits.Where(su => su.StockLocationId == 2).ToList(); 667 } 668 else if (displayStock.Value.ToString() == "MPR") 669 { 670 stockUnitsFiltered = stockUnits.Where(su => su.StockLocationId == 4).ToList(); 671 } 672 else if (displayStock.Value.ToString() == "DAT+UK") 673 { 674 stockUnitsFiltered = stockUnits.Where(su => su.StockLocationId == 2 || su.StockLocationId == 3).ToList(); 675 } 676 else if (displayStock.Value.ToString() == "DAT+MPR") 677 { 678 stockUnitsFiltered = stockUnits.Where(su => su.StockLocationId == 3 || su.StockLocationId == 4).ToList(); 679 } 680 } 681 } 682 } 683 if (stockUnitsFiltered.Count > 0) 684 { 685 customStockQuantity = stockUnitsFiltered.Sum(su => su.StockQuantity); 686 isCustomStock = true; 687 @customStockQuantity; 688 } 689 else 690 { 691 @product.StockLevel.ToString(); 692 } 693 }else if (field.SystemName == "StandardLeadTime") 694 { 695 <text>@fieldValue @Translate("(days)")</text> 696 } 697 698 else if (fieldValue != string.Empty) 699 { 700 if (fieldValue.Substring(0, 1) == "#") 701 { 702 isColor = true; 703 } 704 705 if (!isColor) 706 { 707 if (field.SystemName == "Cad_file"){ 708 <span> 709 <a href="@fieldValue" target="_blank"> 710 <span class="icon-4"> 711 @ReadFile(iconPath + "CAD_download.svg") 712 </span> 713 </a> 714 </span> 715 if (!string.IsNullOrEmpty(customIframeCode)){ 716 <span class="ps-2" style="cursor:pointer;" onclick="document.querySelector('#CustomIframeContent').innerHTML = this.getAttribute('data-customscript')" data-customscript="@(customIframeCode)" data-bs-toggle="modal" data-bs-target="#CustomIframe"> 717 <span class="ml-2 icon-4"> 718 @ReadFile(iconPath + "popup-temp.svg") 719 </span> 720 </span> 721 } 722 723 } 724 else { 725 @fieldValue 726 } 727 } 728 else 729 { 730 if (fieldValue.StartsWith("/Files/", StringComparison.OrdinalIgnoreCase)) 731 { 732 <img src="/Admin/Public/GetImage.ashx?width=16&height=16&image=@fieldValue"> 733 } 734 else 735 { 736 <span class="colorbox-sm" style="background-color: @fieldValue" title="@fieldValue"></span> 737 } 738 739 } 740 } 741 </td> 742 } 743 else 744 { 745 <td> </td> 746 } 747 } 748 @if (!hideStock) 749 { 750 if (isCustomStock) 751 { 752 <td> 753 @if (customStockQuantity <= 0) 754 { 755 <span class="text-danger">@Translate("Out of stock")</span> 756 } 757 else 758 { 759 <span class="text-success">@Translate("In stock")</span> 760 } 761 </td> 762 } 763 else 764 { 765 <td> 766 @if (product.ProductType == Dynamicweb.Ecommerce.Products.ProductType.Stock && product.StockLevel <= 0) 767 { 768 <span class="text-danger">@Translate("Out of stock")</span> 769 } 770 else 771 { 772 <span class="text-success">@Translate("In stock")</span> 773 } 774 </td> 775 } 776 } 777 @if (showExtraStockIsValid && showExtraStock) 778 { 779 if (currentProduct != null) 780 { 781 var extraStockQuantity = currentProduct.ProductFieldValues.FirstOrDefault(f => f.ProductField.SystemName == "ExtraStockQuantity"); 782 if (extraStockQuantity != null) 783 { 784 <td> 785 @extraStockQuantity.Value.ToString() 786 </td> 787 } 788 } 789 } 790 @if (!anonymousUser && showAddToFavouriteList) 791 { 792 <td align="right"> 793 @{@RenderPartial("Components/ToggleFavorite.cshtml", product, favoriteParameters)} 794 </td> 795 } 796 @if (!hidePrice) 797 { 798 <td align="right"> 799 <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> 800 <span itemprop="priceCurrency" content="@product.Price.CurrencyCode" class="d-none"></span> 801 802 803 @if ((showCustomBeforePrice && beforePrice > product.Price.Price) && product.Price.Price == product.PriceBeforeDiscount.Price){ 804 <span class="text-decoration-line-through opacity-75 me-1"> 805 @beforePriceFormatted 806 807 808 </span> 809 } 810 811 812 @if (showPricesWithVat == "false" && !neverShowVat) 813 { 814 <span itemprop="price" content="@product.Price.PriceWithoutVat" class="d-none"></span> 815 if (product.Price.Price != product.PriceBeforeDiscount.Price) 816 { 817 <span class="text-decoration-line-through opacity-75 me-3"> 818 @product.PriceBeforeDiscount.PriceWithoutVatFormatted 819 </span> 820 } 821 } 822 else 823 { 824 <span itemprop="price" content="@product.Price.Price" class="d-none"></span> 825 if (product.Price.Price != product.PriceBeforeDiscount.Price) 826 { 827 <span class="text-decoration-line-through opacity-75 me-3"> 828 @product.PriceBeforeDiscount.PriceFormatted 829 </span> 830 } 831 } 832 833 @if (showPricesWithVat == "false" && !neverShowVat) 834 { 835 <span class="text-price">@product.Price.PriceWithoutVatFormatted</span> 836 } 837 else 838 { 839 <span class="text-price">@product.Price.PriceFormatted</span> 840 } 841 </div> 842 @if (showPricesWithVat == "false" && !neverShowVat && !hideVatPrice) 843 { 844 <small class="opacity-85 fst-normal">@product.Price.PriceWithVatFormatted @Translate("Incl. VAT")</small> 845 } 846 </td> 847 } 848 @if (!hideAddToCart) 849 { 850 851 bool isStockType = product.ProductType == Dynamicweb.Ecommerce.Products.ProductType.Stock; 852 853 double? stepQty = product.PurchaseQuantityStep > 0 ? product.PurchaseQuantityStep : 1; 854 double? minQty = product.PurchaseMinimumQuantity > 0 ? product.PurchaseMinimumQuantity : 1; 855 double? valueQty = minQty > stepQty ? minQty : stepQty; 856 double? maxQty = null; 857 string disableAddToCart = null; 858 859 if (isStockType && !product.NeverOutOfstock) 860 { 861 disableAddToCart = product.StockLevel <= 0 || product.Discontinued || isLazyLoadingForProductInfoEnabled ? "disabled" : disableAddToCart; 862 maxQty = product.StockLevel; 863 } 864 865 <td align="right"> 866 <form method="post" action="@url"> 867 @if (!string.IsNullOrEmpty(contextCart)) 868 { 869 <input type="hidden" name="OrderContext" value="@contextCart"> 870 <input type="hidden" name="minicartid" value="@contextCart"> 871 } 872 <input type="hidden" name="redirect" value="false"> 873 <input type="hidden" name="ProductId" value="@product.Id"> 874 <input type="hidden" name="ProductName" value="@product.Name"> 875 <input type="hidden" name="ProductVariantName" value="@product.VariantName"> 876 <input type="hidden" name="ProductCurrency" value="@Dynamicweb.Ecommerce.Common.Context.Currency.Code"> 877 <input type="hidden" name="ProductPrice" value="@product.Price.ToStringInvariant()"> 878 <input type="hidden" name="ProductDiscount" value="@product.Discount.ToStringInvariant()"> 879 <input type="hidden" name="ProductReferer" value="product_list_related"> 880 <input type="hidden" name="cartcmd" value="add"> 881 882 @if (!string.IsNullOrEmpty(product.VariantId)) 883 { 884 <input type="hidden" name="VariantId" value="@product.VariantId"> 885 } 886 887 @if (quantitySelector) 888 { 889 <div class="input-group input-primary-button-group flex-nowrap"> 890 <input id="Quantity_@(product.Id)_@product.VariantId.Replace(".", "_")" aria-label="@Translate("Quantity")" name="Quantity" value="@valueQty" step="@DoubleToString(stepQty)" min="@DoubleToString(minQty)" max="@DoubleToString(maxQty)" class="form-control swift_quantity-field" type="number" onchange="swift.Cart.UpdateOnEnterKey(event)" onkeyup="swift.Cart.UpdateOnEnterKey(event)" @disableAddToCart> 891 <button type="button" onclick="swift.Cart.Update(event)" class="btn btn-primary js-add-to-cart-button @(disableAddToCart)" @disableAddToCart title="@Translate("Add to cart")" id="AddToCartButton@(product.Id)@(product.VariantId.Replace(".", "_"))"> 892 <span class="icon-2"> 893 @ReadFile(iconPath + "shopping-cart.svg") 894 </span> 895 </button> 896 </div> 897 898 <div class="invalid-feedback d-none"> 899 @Translate("Please select a quantity that is dividable by") @stepQty 900 </div> 901 902 } 903 else 904 { 905 <input id="Quantity_@(product.Id)_@product.VariantId.Replace(".", "_")" aria-label="@Translate("Quantity")" class="swift_quantity-field" name="Quantity" value="@DoubleToString(valueQty)" type="hidden" @disableAddToCart> 906 <button type="button" onclick="swift.Cart.Update(event)" class="btn btn-primary js-add-to-cart-button @(disableAddToCart)" @disableAddToCart title="@Translate("Add to cart")" id="AddToCartButton@(product.Id)@(product.VariantId.Replace(".", "_"))"> 907 <span class="icon-2"> 908 @ReadFile(iconPath + "shopping-cart.svg") 909 </span> 910 </button> 911 } 912 913 <template class="js-step-quantity-warning"> 914 <div class="modal-header"> 915 <h1 class="modal-title fs-5">@Translate("The quantity is not valid")</h1> 916 </div> 917 <div class="modal-body"> 918 @Translate("Please select a quantity that is dividable by") @stepQty 919 </div> 920 </template> 921 922 <template class="js-min-quantity-warning"> 923 <div class="modal-header"> 924 <h1 class="modal-title fs-5">@Translate("The product could not be added to the cart")</h1> 925 </div> 926 <div class="modal-body"> 927 @Translate("The quantity is not valid. You must buy at least") @product.PurchaseMinimumQuantity 928 </div> 929 </template> 930 931 <template class="js-value-missing-warning"> 932 <div class="modal-header"> 933 <h1 class="modal-title fs-5">@Translate("No amount specified")</h1> 934 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 935 </div> 936 <div class="modal-body"> 937 @Translate("Specify an amount to add to the cart") 938 </div> 939 </template> 940 941 @if (userHasPendingQuote) 942 { 943 <input type="hidden" name="PendingQuote" value="true"> 944 945 <template class="js-pending-quote-notice"> 946 <div class="modal-header"> 947 <h1 class="modal-title fs-5">@Translate("Pending Quote")</h1> 948 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="@Translate("Close")"></button> 949 </div> 950 <div class="modal-body"> 951 @Translate("You need to complete your current quote or empty the cart before adding this product to cart.") 952 </div> 953 </template> 954 } 955 </form> 956 <div> 957 <form method="post" action="@url" class="col-md-12"> 958 959 <input type="hidden" name="redirect" value="false"> 960 <input type="hidden" name="ProductId" value="@product.Id"> 961 <input type="hidden" name="ProductName" value="@product.Name"> 962 <input type="hidden" name="ProductVariantName" value="@product.VariantName"> 963 964 <input type="hidden" name="ProductDiscount" value="@product.Discount.ToStringInvariant()"> 965 <input type="hidden" name="ProductReferer" value="product_list_related"> 966 <input type="hidden" name="cartcmd" value="addwithpoints"> 967 <input id="Quantity_@(product.Id)_@product.VariantId.Replace(".", "_")" aria-label="@Translate("Quantity")" class="swift_quantity-field" name="Quantity" value="@DoubleToString(valueQty)" @disableAddToCart> 968 <button type="button" onclick="swift.Cart.Update(event)" class="btn btn-primary js-add-to-cart-button @(disableAddToCart)" @disableAddToCart title="@Translate("Buy with points")" id="AddToCartButton@(product.Id)@(product.VariantId.Replace(".", "_"))"> 969 <span class="icon-2"> 970 @ReadFile(iconPath + "shopping-cart.svg") 971 </span> 972 </button> 973 </form> 974 </div> 975 </td> 976 977 } 978 </tr> 979 } 980 </tbody> 981 </table> 982 </div> 983 984 @if (Model.PageCount > 1) 985 { 986 int totalProducts = Model.TotalProductsCount; 987 int pageSize = Model.PageSize; 988 pageSize += pageSizeSetting; 989 990 <div class="g-col-12 text-center"> 991 <div class="m-2">@Model.PageSize @Translate("out of") @totalProducts</div> 992 <button type="button" class="btn btn-primary" onclick="document.querySelector('#RelatedProductsListPageSize_@paragraphID').value = '@pageSize'; UpdateRelatedProductsList(event, 'UpdateList', '@paragraphID')">@Translate("Load more")</button> 993 </div> 994 } 995 </div> 996 } 997 998 999 @* Deliver only the facets update *@ 1000 @if (requestType == "UpdateFacets" && facetsFound) 1001 { 1002 foreach (FacetGroupViewModel facetGroup in Model.FacetGroups) 1003 { 1004 foreach (FacetViewModel facet in facetGroup.Facets) 1005 { 1006 if (facet.Options.Count() > 0) 1007 { 1008 <div class="border-bottom"> 1009 <div class="d-flex" data-bs-toggle="collapse" data-bs-target="#FacetGroup_@facet.Name.Replace(" ", string.Empty)" role="button" aria-expanded="true" aria-controls="FacetGroup_@facet.Name.Replace(" ", string.Empty)"> 1010 <h2 class="my-3 opacity-85 m-0 flex-fill h6">@facet.Name</h2> 1011 <div class="my-auto collapse-chevron-icon"></div> 1012 </div> 1013 <div class="collapse show" id="FacetGroup_@facet.Name.Replace(" ", string.Empty)"> 1014 <div class="pb-3"> 1015 @foreach (FacetOptionViewModel facetOption in facet.Options) 1016 { 1017 string renderType = facet.RenderType; 1018 1019 string disabled = facetOption.Count <= 0 ? "disabled" : string.Empty; 1020 string selected = facetOption.Selected ? "checked" : string.Empty; 1021 1022 string facetLabel = HtmlEncoder.HtmlEncode(facetOption.Label); 1023 facetLabel = facetLabel.ToLower() == "true" ? Translate("Yes") : facetLabel; 1024 facetLabel = facetLabel.ToLower() == "false" ? Translate("No") : facetLabel; 1025 1026 var variantOption = Dynamicweb.Ecommerce.Services.VariantOptions.GetVariantOption(facetOption.Value.ToString()); 1027 1028 string image = facetOption.Value; 1029 string colorCode = facetOption.Value; 1030 1031 if (variantOption != null) 1032 { 1033 image = variantOption.LargeImage; 1034 colorCode = variantOption.Color; 1035 } 1036 1037 if (renderType == "Colors") 1038 { 1039 <div class="colorbox"> 1040 <input type="checkbox" onclick="swift.PageUpdater.Update(event)" class="@disabled @selected" name="@facet.QueryParameter" value="[@facetOption.Value]" data-filter-value="@facetLabel" @selected title="@facetOption.Label"> 1041 @if (colorCode.Contains("#")) 1042 { 1043 <span class="colorbox-background" style="background-color: @colorCode"></span> 1044 } 1045 else 1046 { 1047 <img class="colorbox-background" src="/Admin/Public/GetImage.ashx?width=16&height=16&image=@image"> 1048 } 1049 </div> 1050 } 1051 else 1052 { 1053 var optionValue = facetOption.Value.Contains(",") ? $"[{facetOption.Value}]" : facetOption.Value; 1054 1055 <label class="form-check mb-1" @disabled> 1056 <input type="checkbox" onclick="swift.PageUpdater.Update(event)" class="form-check-input" name="@facet.QueryParameter" value="@optionValue" data-filter-value="@facetLabel" @selected> 1057 <span class="form-check-label d-flex align-items-center"> 1058 <span class="flex-fill">@facetLabel </span> 1059 <small class="opacity-85">@facetOption.Count</small> 1060 </span> 1061 </label> 1062 } 1063 } 1064 </div> 1065 </div> 1066 </div> 1067 } 1068 } 1069 } 1070 } 1071 1072 <div class="modal" id="CustomIframe" tabindex="-1" style="display: none;" aria-hidden="true"> 1073 <div class="modal-dialog modal-dialog-centered modal-xl"> 1074 <div class="modal-content"> 1075 <div class="modal-header"> 1076 <h5 class="modal-title"></h5> 1077 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 1078 </div> 1079 <div class="modal-body p-2 p-lg-3 h-100"> 1080 <div id="CustomIframeContent" class="custom-iframe custom-iframe-variants"></div> 1081 </div> 1082 </div> 1083 </div> 1084 </div> 1085 1086 1087
DETAIL9960
https://www.youtube.com/embed/Zzmnw7O49HU?origin=https://plyr.io&iv_load_policy=3&modestbranding=1&playsinline=1&showinfo=0&rel=0&enablejsapi=1
https://www.youtube.com/embed/Zzmnw7O49HU?origin=https://plyr.io&iv_load_policy=3&modestbranding=1&playsinline=1&showinfo=0&rel=0&enablejsapi=1
00:00
-01:36
DETAIL9960
https://www.youtube.com/embed/Zzmnw7O49HU?origin=https://plyr.io&iv_load_policy=3&modestbranding=1&playsinline=1&showinfo=0&rel=0&enablejsapi=1
https://www.youtube.com/embed/Zzmnw7O49HU?origin=https://plyr.io&iv_load_policy=3&modestbranding=1&playsinline=1&showinfo=0&rel=0&enablejsapi=1
00:00
-01:36
Ultrafine carbide milling cutter, cylinder – end mill, shank Ø 6 mm
DETAIL9960
https://www.youtube.com/embed/Zzmnw7O49HU?origin=https://plyr.io&iv_load_policy=3&modestbranding=1&playsinline=1&showinfo=0&rel=0&enablejsapi=1
https://www.youtube.com/embed/Zzmnw7O49HU?origin=https://plyr.io&iv_load_policy=3&modestbranding=1&playsinline=1&showinfo=0&rel=0&enablejsapi=1
00:00
01:36