Component builder for: PDP Right

GRANBERG EX 3260

Cut, Impact, and Water-Resistant Gloves EX®

Goatskin palm, Spandex® back, TPR impact protection, waterproof PROTEX™ membrane, thin polyester mesh liner, hook and loop closure.

  • High protection against cuts in palm and fingers, approved according to EN 388:2016 cut level D.
  • Powerful but soft and flexible TPR impact protection design on the back of the hand.
  • Full goatskin palm provides durability and good grip in wet and dry conditions.
  • Thin and soft polyester mesh liner covers membrane and provides comfort.
  • Waterproof and breathable PROTEX™ membrane provides water resistance for activities in wet conditions.
  • Spandexmaterial on the back of the hand for good fitting, greater flexibility and breathability.
  • Elastic wrist with adjustable hook and loop closure provides a secure but comfortable fit around the wrist.

Suitable for:

Work involving risk of cut and impact injuries and performed in wet weather.

Article number

115.3260

Colour

Black, Green, White, Yellow

Glove Fit

Normal fit

Grip

Dry, Wet

Length

20,5-27,5 cm

Sizes

6 | 7 | 8 | 9 | 10 | 11 | 12 | 13

Thickness of leather

0,7-0,9 mm

Back of hand material

Polyester, Spandex

Cuff Type

Hook and loop closure

Liner material

Lining: Polyester liner/ProTex® membrane

Lining type

Thin polyester lining/ProTex® membrane: fully lined, Cut-resistant liner: palm and fingers lined

Palmside material

100% Goatskin

ANSI/ISEA 105-2016

ANSI/ISEA 138-2019

CE

EN 388:2016+A1:2018

2X32DP

EN ISO 21420:2020

UKCA

EN 374

CHEMICAL

CAS

CLASS

PERMEATION

Packaging Unit

Pair

Sales Units Per Bundle

6

Sales Units Per Outer Case

36

Error executing template "/Designs/Swift/Paragraph/GBG_ProductDownloadPublication.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_77459aaf26fb472ea5adcb9d6582d2c4.Execute() in D:\dynamicweb.net\Solutions\Degree\granberg.cloud.dynamicweb-cms.com\Files\Templates\Designs\Swift\Paragraph\GBG_ProductDownloadPublication.cshtml:line 28
   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 Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 @using Dynamicweb.Ecommerce.CustomerExperienceCenter.Favorites 4 5 @functions { 6 public ProductViewModel product { get; set; } = new ProductViewModel(); 7 8 } 9 10 11 @{ 12 /*ProductViewModel product = null;*/ 13 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 14 { 15 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"]; 16 } 17 else if (Pageview.Page.Item["DummyProduct"] != null) 18 { 19 var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page); 20 ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel(); 21 22 if (productList?.Products is object) 23 { 24 product = productList.Products[0]; 25 } 26 } 27 28 string uniqueId = $"{product.Id}_{product.VariantId.Replace(".", "_")}_{Pageview.CurrentParagraph.ID}"; 29 30 var selectedCatalogs = Model.Item.GetList("SelectedCatalogs")?.GetRawValue()?.OfType<string>(); 31 int catalogCount = 0; 32 33 string horizontalAlign = Model.Item.GetRawValueString("HorizontalAlignment", string.Empty); 34 horizontalAlign = horizontalAlign == "center" ? "justify-content-center" : horizontalAlign; 35 horizontalAlign = horizontalAlign == "end" ? "justify-content-end" : horizontalAlign; 36 horizontalAlign = horizontalAlign == "full" ? string.Empty : horizontalAlign; 37 38 string buttonSize = Model.Item.GetRawValueString("ButtonSize", "regular"); 39 40 switch (buttonSize) 41 { 42 case "small": 43 buttonSize = " btn-sm"; 44 break; 45 case "regular": 46 buttonSize = string.Empty; 47 break; 48 case "large": 49 buttonSize = " btn-lg"; 50 break; 51 } 52 53 string iconPath = "/Files/icons/"; 54 55 string flexFill = Model.Item.GetRawValueString("HorizontalAlignment", "") == "full" ? "flex-fill" : string.Empty; 56 string fullWidth = Model.Item.GetRawValueString("HorizontalAlignment", "") == "full" ? "w-100" : string.Empty; 57 string icon = Model.Item.GetRawValueString("Icon", iconPath + "printer.svg"); 58 string label = !icon.Contains("_none") ? $"<span class=\"icon-2\">{ReadFile(icon)}</span>" : string.Empty; 59 label += !icon.Contains("_none") && !Model.Item.GetBoolean("HideButtonText") ? " " : string.Empty; 60 label += !Model.Item.GetBoolean("HideButtonText") && !string.IsNullOrEmpty(Model.Item.GetString("Title")) ? Model.Item.GetString("Title") : string.Empty; 61 } 62 63 @if (product is object && selectedCatalogs != null && selectedCatalogs.Any()) 64 { 65 var ecomLanguages = Dynamicweb.Ecommerce.Services.Languages.GetLanguages(); 66 var currencies = Dynamicweb.Ecommerce.Services.Currencies.GetAllCurrencies(); 67 var languageId = Dynamicweb.Ecommerce.Common.Context.LanguageID; 68 var areaEcomLanguageId = Pageview.Area.EcomLanguageId; 69 var areaEcomCurrencyId = Pageview.Area.EcomCurrencyId; 70 @* <p>test</p> *@ 71 <div class="d-none @horizontalAlign @fullWidth item_@Model.Item.SystemName.ToLower()"> 72 <button type="button" class="download-publication-btn btn btn-primary @(buttonSize) @flexFill" data-bs-toggle="modal" data-bs-target="#DownloadPublicationModal@(uniqueId)" style="white-space: nowrap" title="@Model.Item.GetString("Title")" id="DownloadPublication@(uniqueId)"> 73 @if (!Model.Item.GetBoolean("HideButtonText")) 74 { 75 <span class="text-nowrap d-flex align-items-center justify-content-center gap-2"> 76 @label 77 </span> 78 } 79 else 80 { 81 @label 82 } 83 </button> 84 </div> 85 86 <div class="modal fade" id="DownloadPublicationModal@(uniqueId)" tabindex="-1" aria-labelledby="#DownloadPublicationModalLabel@(uniqueId)" aria-hidden="true"> 87 <div class="modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable"> 88 <form target="_blank" action="/Default.aspx?ID=@selectedCatalogs.FirstOrDefault()" method="post" class="modal-content" id="DownloadPublicationModalForm@(uniqueId)"> 89 <input type="hidden" name="mainproductid" value="@product.Id"> 90 <input type="hidden" name="print" value="true"> 91 92 @if (!string.IsNullOrEmpty(product.VariantId)) 93 { 94 <input type="hidden" name="VariantId" value="@product.VariantId"> 95 } 96 97 <div class="modal-header"> 98 <h1 class="modal-title fs-5" id="DownloadPublicationModalLabel@(uniqueId)">@Translate("Publication for print")</h1> 99 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 100 </div> 101 <div class="modal-body p-0"> 102 <div class="grid gap-0"> 103 <div class="g-col-12 g-col-lg-4 border-end p-3 p-lg-4"> 104 105 @if (Model.Item.GetBoolean("ShowLanguageSelector") && ecomLanguages.Count() > 1) 106 { 107 <div class="mb-4"> 108 <label class="form-label">@Translate("Language")</label> 109 <select name="RequestLanguageID" class="form-select" aria-label="@Translate("Language")"> 110 @foreach (var language in ecomLanguages) 111 { 112 var selected = string.Empty; 113 if (language.LanguageId.Equals(areaEcomLanguageId, StringComparison.OrdinalIgnoreCase)) 114 { 115 selected = "selected"; 116 } 117 <option @selected value="@language.LanguageId">@language.GetDisplayName()</option> 118 } 119 </select> 120 </div> 121 } 122 123 124 @if (Model.Item.GetBoolean("ShowCurrencySelector")) 125 { 126 <div class="mb-4" id="CurrencySelector@(uniqueId)"> 127 <label class="form-label">@Translate("Currency")</label> 128 <select name="RequestCurrencyCode" class="form-select" aria-label="@Translate("Currency")"> 129 @foreach (var currency in currencies) 130 { 131 var selected = string.Empty; 132 if (currency.Code.Equals(areaEcomCurrencyId, StringComparison.OrdinalIgnoreCase)) 133 { 134 selected = "selected"; 135 } 136 <option @selected value="@currency.Code">@currency.GetName(languageId)</option> 137 } 138 </select> 139 </div> 140 } 141 142 @if (Model.Item.GetBoolean("ShowPriceSelector")) 143 { 144 <div class="mb-4"> 145 <label class="form-label">@Translate("Show price")</label> 146 <div class="form-check"> 147 <input class="form-check-input" type="radio" name="hideprice" value="false" id="HidePriceFalse@(uniqueId)" checked onchange="document.querySelector('#CurrencySelector@(uniqueId)').classList.remove('d-none')"> 148 <label class="form-check-label" for="HidePriceFalse@(uniqueId)"> 149 @Translate("Yes") 150 </label> 151 </div> 152 <div class="form-check"> 153 <input class="form-check-input" type="radio" name="hideprice" value="true" id="HidePriceTrue@(uniqueId)" onchange="document.querySelector('#CurrencySelector@(uniqueId)').classList.add('d-none')"> 154 <label class="form-check-label" for="HidePriceTrue@(uniqueId)"> 155 @Translate("No") 156 </label> 157 </div> 158 </div> 159 } 160 161 @if (Model.Item.GetBoolean("ShowCommentField")) 162 { 163 <div class="mb-4"> 164 <label for="DealerComment@(uniqueId)">@Translate("Comment")</label> 165 <textarea name="DealerComment" class="form-control" rows="6" placeholder="@Translate("Leave a comment here")" id="DealerComment@(uniqueId)"></textarea> 166 </div> 167 } 168 </div> 169 <div class="g-col-12 g-col-lg-8 p-3 p-lg-4"> 170 <div class="grid grid-2 grid-lg-3 gap-lg-4"> 171 @foreach (var catalog in selectedCatalogs) 172 { 173 var pageObj = Dynamicweb.Content.Services.Pages.GetPage(Convert.ToInt32(catalog)); 174 175 var selected = catalogCount == 0 ? "checked" : string.Empty; 176 var radioId = $"CatalogCheck_{Model.ID}_{pageObj.ID}"; 177 string imagePath = pageObj.Item["Thumbnail"] != null ? $"/Admin/Public/GetImage.ashx?image={pageObj.Item["Thumbnail"].ToString()}&width=200&format=webp" : $"https://placehold.co/235x300?text={@Translate("Catalog+Image")}"; 178 179 <div class="form-thumb"> 180 <input class="form-thumb-input visually-hidden" type="radio" name="ID" value="@pageObj.ID" id="@radioId" onclick="document.querySelector('#DownloadPublicationModalForm@(uniqueId)').action='/Default.aspx?ID=@(pageObj.ID)'" @selected> 181 <label class="form-thumb-label d-flex flex-column" for="@radioId" role="button"> 182 <span class="d-block p-1"> 183 <img class="rounded-2 w-100" style="object-fit:cover" src="@imagePath" /> 184 </span> 185 <span class="d-grid p-3"> 186 <span class="d-block fw-bold">@pageObj.GetDisplayName()</span> 187 @*<span class="d-block opacity-75 fs-7 lh-sm">@catalog.Name</span> // Descriptive text goes here //*@ 188 </span> 189 </label> 190 </div> 191 192 catalogCount++; 193 } 194 </div> 195 </div> 196 </div> 197 </div> 198 <div class="modal-footer"> 199 <button type="button" onclick="GetPublication(event)" data-bs-dismiss="modal" class="btn btn-primary">@Translate("Print")</button> 200 </div> 201 </form> 202 </div> 203 </div> 204 205 <script> 206 const GetPublication = (e) => { 207 const clickedButton = e.currentTarget; 208 const form = clickedButton.closest('form'); 209 210 form.closest('form').submit(); 211 212 commentField = form.querySelector('textarea[name="DealerComment"]'); 213 commentField.value = ""; 214 }; 215 </script> 216 } 217 else if (Pageview.IsVisualEditorMode) 218 { 219 <div class="d-flex @horizontalAlign @fullWidth item_@Model.Item.SystemName.ToLower()"> 220 <button type="button" class="btn btn-primary @(buttonSize) @flexFill" data-bs-toggle="modal" data-bs-target="#DownloadPublicationModal@(uniqueId)" style="white-space: nowrap" title="@Model.Item.GetString("Title")" id="DownloadPublication@(uniqueId)"> 221 @if (!Model.Item.GetBoolean("HideButtonText")) 222 { 223 <span class="text-nowrap d-flex align-items-center justify-content-center gap-2"> 224 @label 225 </span> 226 } 227 else 228 { 229 @label 230 } 231 </button> 232 </div> 233 } 234 235 <script> 236 if (document.querySelector(".publication-redirect-btn") && document.querySelector(".download-publication-btn")){ 237 const redirectBtn = document.querySelector(".publication-redirect-btn"); 238 const publicationBtn = document.querySelector(".download-publication-btn"); 239 redirectBtn.addEventListener("click",e=>{ 240 publicationBtn.click(); 241 }) 242 } 243 </script> 244
By clicking 'Accept All' you consent that we may collect information about you for various purposes, including: Statistics and Marketing