Radio PerfectPro POWERPLAYER, Lithium

Kompakt og robust letvægtsradio med masser af afspilningsmuligheder. Indkapslet i ramme af slagfast ABS-plast med gummiaffjedring finder du et kraftfuldt lithiumbatteri og en kraftig 15-watt Neodymium-højttaler. PerfectPro POWERPLAYER brillierer med en krystalklar lyd og en fantastisk driftstid per opladning. Fastmonteret netkabel med kabelholder for enkel opladning. Powerbank-funktion, så du kan oplade mobilen. Udviklet til primært indendør brug i mellemstore rum. Optimal lyd i rum optil 70 m2, udendørs 10 meter.

1.882,00 kr. InStock
Vejl. udsalgspris ekskl. moms

PerfectPro Powerplayer kombinerer avancerede funktioner med enestående tekniske specifikationer. Powerplayer har Bluetooth, DAB+, FM, og AUX-IN lytteindstillinger, så du kan nyde en bred vifte af musikoplevelser. Med et integreret lithiumbatteri leverer Powerplayer op til 30 timers afspilningstid, hvilket sikrer langvarig brug og mobilitet. Den ultra-stærke 15-watt dobbelt Neodymium-højttaler sikrer en kraftfuld og klar lydoplevelse. Tekniske specifikationer inkluderer DAB+ digital radiomodtagelse, FM-modtagelse med RDS-stationsinformation, og preset til 10 stationer for både FM og DAB+. Yderligere funktioner som Bluetooth-modtager til musikstreaming, USB-port til afspilning af MP3, AAC og FLAC-filer, samt en Aux-in til ekstern MP3-afspiller, gør Powerplayer alsidig og brugervenlig. Med DSP (Digital lydbehandling), dynamisk Loudness-funktion, og separat tonekontrol (diskant og bas) tilbyder Powerplayer avancerede lydindstillinger. Den har også et stereo-hovedtelefonstik for personlig lytteoplevelse. Strømforsyning og opladning er bekvemme med 230V strømforsyning og et indbygget LongPlayer Lithium-Polymer-batteri med en gennemsnitlig afspilningstid på 24 til 28 timer. Opladningsmuligheder inkluderer opladning med det indbyggede batteri og opladning under afspilning på strømnettet, med en tydelig opladningsindikator på displayet. Ekstra funktioner som Bluetooth-tilsluttet LED, flersproget brugergrænseflade, justerbar baggrundsbelyst display, visning af nuværende spor (titel, kunstner, album), og en 5V USB-strømudgang til opladning af mobiltelefon, gør Powerplayer endnu mere alsidig. Powerplayer er konstrueret af holdbart ABS-plast og har baggrundsbelyst LCD-display, metalhøjttalergrill, og robuste betjeningsknapper. Den er designet til at modstå elementerne med stødsikkerhed, regn-, snavs- og støvafvisning i overensstemmelse med IP65-standarden. Certificeret af TüV/GS, og med dimensioner på 2,2 kg vægt og mål på 19 x 24,5 x 20 cm (BxHxD) i sort farve, er Powerplayer den ideelle løsning for alle, der ønsker en robust og højtydende lydenhed.

Error executing template "Designs/Swift/Paragraph/Custom_ProductSpecification.cshtml"
System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
Parameter name: length
   at System.String.Substring(Int32 startIndex, Int32 length)
   at CompiledRazorTemplates.Dynamic.RazorEngine_97606dbe0c92427eae59e15f3a28edc6.<>c__DisplayClass2_0.<RenderFieldValue>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Co3\itools.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Custom_ProductSpecification.cshtml:line 297
   at CompiledRazorTemplates.Dynamic.RazorEngine_97606dbe0c92427eae59e15f3a28edc6.<>c__DisplayClass1_0.<RenderField>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Co3\itools.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Custom_ProductSpecification.cshtml:line 263
   at CompiledRazorTemplates.Dynamic.RazorEngine_97606dbe0c92427eae59e15f3a28edc6.<>c__DisplayClass0_0.<RenderFieldsFromList>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Co3\itools.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Custom_ProductSpecification.cshtml:line 153
   at CompiledRazorTemplates.Dynamic.RazorEngine_97606dbe0c92427eae59e15f3a28edc6.Execute() in D:\dynamicweb.net\Solutions\Co3\itools.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Custom_ProductSpecification.cshtml:line 95
   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 4 @{ 5 bool isVisualEditor = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("VisualEdit")) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.QueryString.Get("VisualEdit")) : false; 6 7 ProductViewModel product = new ProductViewModel(); 8 9 ProductViewModelSettings productSetting = new ProductViewModelSettings 10 { 11 LanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID, 12 CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code, 13 CountryCode = Dynamicweb.Ecommerce.Common.Context.Country.Code2, 14 ShopId = Pageview.Area.EcomShopId 15 }; 16 17 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 18 { 19 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"]; 20 } else if (Pageview.Item["DummyProduct"] != null) { 21 22 string dummyProductId = ""; 23 var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page); 24 ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel(); 25 if (productList.Products != null) 26 { 27 foreach (var p in productList.Products) { dummyProductId = p.Id; } 28 ProductViewModel dummyProduct = dummyProductId != "" ? ViewModelFactory.CreateView(productSetting, dummyProductId) : new ProductViewModel(); 29 product = dummyProduct; 30 } else { 31 product = ViewModelFactory.CreateView(productSetting, Dynamicweb.Ecommerce.Services.Products.GetLastActiveProducts(1, Dynamicweb.Ecommerce.Common.Context.LanguageID, false).FirstOrDefault().Id); 32 } 33 } else if (Pageview.Item["DummyProduct"] == null) { 34 product = ViewModelFactory.CreateView(productSetting, Dynamicweb.Ecommerce.Services.Products.GetLastActiveProducts(1, Dynamicweb.Ecommerce.Common.Context.LanguageID, false).FirstOrDefault().Id); 35 } 36 } 37 38 @if (product?.Id != null) { 39 IEnumerable<string> selectedDisplayGroupIds = Model.Item.GetRawValueString("DisplayGroups").Split(',').ToList(); 40 List<CategoryFieldViewModel> displayGroups = new List<CategoryFieldViewModel>(); 41 42 foreach (var selection in selectedDisplayGroupIds) 43 { 44 foreach (CategoryFieldViewModel group in product.FieldDisplayGroups.Values) 45 { 46 if (selection == group.Id) 47 { 48 displayGroups.Add(group); 49 } 50 } 51 } 52 53 bool showProductFields = Model.Item.GetBoolean("ProductFields"); 54 55 bool hideTitle = Model.Item.GetBoolean("HideTitle"); 56 57 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : ""; 58 59 string titleFontSize = Model.Item.GetRawValueString("TitleFontSize", "display-4"); 60 61 string contentPadding = Model.Item.GetRawValueString("ContentPadding", ""); 62 contentPadding = contentPadding == "small" ? "p-2 p-md-3" : contentPadding; 63 contentPadding = contentPadding == "large" ? "p-4 p-md-5" : contentPadding; 64 65 string layout = Model.Item.GetRawValueString("Layout", "list"); 66 string size = Model.Item.GetRawValueString("Size", "full"); 67 68 if (Pageview.IsVisualEditorMode && displayGroups.Count() == 0) 69 { 70 product.ProductFields.Clear(); 71 product.ProductFields.Add(Translate("Width"), new FieldValueViewModel { Name = Translate("Width"), Value = "99cm" }); 72 product.ProductFields.Add(Translate("Height"), new FieldValueViewModel { Name = Translate("Height"), Value = "195cm" }); 73 showProductFields = true; 74 } 75 76 <div class="@(theme) h-100 item_@Model.Item.SystemName.ToLower()"> 77 <div class="@contentPadding"> 78 @if ((product.ProductFields != null && Model.Item.GetBoolean("ProductFields")) || (product.ProductCategories != null && Model.Item.GetBoolean("CategoryFields")) || (displayGroups.Count != 0)) { 79 if (!hideTitle) 80 { 81 <div class="text-start pb-2 pb-lg-4"> 82 <h2 class="@titleFontSize">@Model.Item.GetString("Title")</h2> 83 </div> 84 } 85 } 86 87 @if (displayGroups.Count != 0) { 88 foreach (var group in displayGroups) { 89 bool hideHeader = Model.Item.GetBoolean("HideGroupHeaders"); 90 91 if (!hideHeader) { 92 <h4 class="h4 mb-4">@group.Name</h4> 93 } 94 95 @RenderFieldsFromList(group.Fields, layout); 96 } 97 } 98 99 @if (product.ProductFields != null && showProductFields) { 100 if (product.ProductFields.Count > 0) { 101 @RenderFieldsFromList(product.ProductFields, layout); 102 } 103 } 104 105 @if (product.ProductCategories != null && Model.Item.GetBoolean("CategoryFields")) { 106 if (product.ProductCategories.Count > 0) { 107 foreach (var group in product.ProductCategories) { 108 CategoryFieldViewModel category = group.Value; 109 bool hideHeader = Model.Item.GetBoolean("HideGroupHeaders"); 110 111 if (!hideHeader) { 112 <h4 class="h4 mb-4">@group.Value.Name</h4> 113 } 114 115 @RenderFieldsFromList(category.Fields, layout); 116 } 117 } 118 } 119 </div> 120 </div> 121 } else if (Pageview.IsVisualEditorMode) { 122 <div class="alert alert-warning m-0">@Translate("No products available")</div> 123 } 124 125 126 @helper RenderFieldsFromList(Dictionary<string, FieldValueViewModel> fields, string layout) { 127 string size = Model.Item.GetRawValueString("Size", "full"); 128 string extraMargin = size == "full" ? "mb-3" : ""; 129 bool hideFieldLabels = Model.Item.GetBoolean("HideFieldLabels"); 130 131 <div class="@extraMargin"> 132 @if (layout == "columns") { 133 string gaps = size == "full" ? "gap-0" : "gap-2"; 134 135 <div class="grid @gaps"> 136 @foreach (var field in fields) { 137 @RenderField(field.Value, layout) 138 } 139 </div> 140 } 141 @if (layout == "list") { 142 <dl class="grid gap-0"> 143 @foreach (var field in fields) { 144 @RenderField(field.Value, layout) 145 } 146 </dl> 147 } 148 @if (layout == "table") { 149 string tableSize = size == "full" ? "" : "table-sm"; 150 151 <table class="table table-striped @tableSize"> 152 @foreach (var field in fields) { 153 @RenderField(field.Value, layout) 154 } 155 </table> 156 } 157 @if (layout == "bullets") { 158 string listSize = size == "full" ? "" : "m-0 p-0 lh-1 fs-7 opacity-75"; 159 string listStyle = size == "full" ? "" : "style=\"list-style-position: inside\""; 160 161 <ul class="@listSize" @listStyle> 162 @foreach (var field in fields) { 163 @RenderField(field.Value, layout) 164 } 165 </ul> 166 } 167 @if (layout == "commas") { 168 List<string> featuresList = new List<string>(); 169 170 foreach (var field in fields) 171 { 172 if (field.Value.Value.GetType() == typeof(System.Collections.Generic.List<FieldOptionValueViewModel>)) { 173 List<string> options = new List<string>(); 174 foreach (FieldOptionValueViewModel option in field.Value.Value as System.Collections.Generic.List<FieldOptionValueViewModel>) { 175 if (!string.IsNullOrWhiteSpace(option.Value)) { 176 if (option.Value.ToString().Contains("#") && (Translate(field.Value.Name) == Translate("Color") || Translate(field.Value.Name) == Translate("Colour"))) { 177 string colorSpan = "<span class=\"colorbox-sm\" style=\"background-color: " + option.Value + "\"></span>"; 178 options.Add(colorSpan); 179 } else if (!string.IsNullOrEmpty(option.Value)) { 180 options.Add(option.Name); 181 } 182 } 183 } 184 string optionsString = (string.Join(", ", options.Select(x => x.ToString()).ToArray())); 185 if ((Translate(field.Value.Name) == Translate("Color") || Translate(field.Value.Name) == Translate("Colour"))) { 186 optionsString = (string.Join(" ", options.Select(x => x.ToString()).ToArray())); 187 } 188 189 if (!hideFieldLabels) { 190 featuresList.Add(field.Value.Name + ": " + optionsString); 191 } else { 192 featuresList.Add(optionsString); 193 } 194 } else { 195 if (!string.IsNullOrWhiteSpace(field.Value.Value.ToString())) { 196 if (field.Value.Value.ToString().Contains("#") && (Translate(field.Value.Name) == Translate("Color") || Translate(field.Value.Name) == Translate("Colour"))) { 197 string colorSpan = "<span class=\"colorbox-sm\" style=\"background-color: " + field.Value.Value + "\"></span>"; 198 199 if (!hideFieldLabels) { 200 featuresList.Add(field.Value.Name + ": " + colorSpan); 201 } else { 202 featuresList.Add(colorSpan); 203 } 204 } else { 205 if (!hideFieldLabels) { 206 featuresList.Add(field.Value.Name + ": " + field.Value.Value.ToString()); 207 } else { 208 featuresList.Add(field.Value.Value.ToString()); 209 } 210 } 211 } 212 } 213 } 214 215 string featuresString = (string.Join(", ", featuresList.Select(x => x.ToString()).ToArray())); 216 217 <div class="opacity-75 fs-7">@featuresString</div> 218 } 219 </div> 220 } 221 222 @helper RenderField(FieldValueViewModel field, string layout) { 223 string size = Model.Item.GetRawValueString("Size", "full"); 224 string fieldValue = field?.Value != null ? field.Value.ToString() : ""; 225 string fieldLabel = field?.Name != null ? Translate($"Custom Product Specification - Label - {field.Name}", field.Name) : ""; 226 bool hideFieldLabels = Model.Item.GetBoolean("HideFieldLabels"); 227 bool noValues = false; 228 229 if (!string.IsNullOrEmpty(fieldValue)) { 230 if (field.Value.GetType() == typeof(System.Collections.Generic.List<FieldOptionValueViewModel>)) { 231 System.Collections.Generic.List<FieldOptionValueViewModel> values = field.Value as System.Collections.Generic.List<FieldOptionValueViewModel>; 232 noValues = values.Count > 0 ? false : true; 233 } 234 } 235 236 if (!string.IsNullOrEmpty(fieldValue) && noValues == false) { 237 if (layout == "columns") { 238 <div class="grid g-col-6 g-col-lg-4"> 239 @if(!hideFieldLabels) 240 { 241 <dt class="g-col-4 py-2 fw-bold">@fieldLabel</dt> 242 } 243 <dd class="g-col-8 py-2 mb-0">@RenderFieldValue(field)</dd> 244 </div> 245 } 246 if (layout == "list") { 247 string extraPadding = size == "full" ? "py-2" : ""; 248 249 if (!hideFieldLabels) 250 { 251 <dt class="g-col-4 @extraPadding fw-bold">@fieldLabel</dt> 252 } 253 <dd class="g-col-8 @extraPadding mb-0"> 254 @RenderFieldValue(field) 255 </dd> 256 } 257 if (layout == "table") { 258 <tr> 259 @if (!hideFieldLabels) 260 { 261 <th class="fw-bold" scope="row">@fieldLabel</th> 262 } 263 <td>@RenderFieldValue(field)</td> 264 </tr> 265 } 266 if (layout == "bullets") { 267 <li> 268 @if (!hideFieldLabels) 269 { 270 <strong>@fieldLabel</strong> 271 } 272 <span>@RenderFieldValue(field)</span> 273 </li> 274 } 275 } 276 } 277 278 @helper RenderFieldValue(FieldValueViewModel field) { 279 string fieldValue = field?.Value != null ? field.Value.ToString() : ""; 280 281 bool isLink = field?.Type == "Link"; 282 bool isColor = false; 283 bool isBrandName = field?.SystemName == "Brand_name"; 284 285 fieldValue = fieldValue == "False" ? Translate("No") : fieldValue; 286 fieldValue = fieldValue == "True" ? Translate("Yes") : fieldValue; 287 288 289 if (field.Value.GetType() == typeof(System.Collections.Generic.List<Dynamicweb.Ecommerce.ProductCatalog.FieldOptionValueViewModel>)) 290 { 291 int valueCount = 0; 292 System.Collections.Generic.List<FieldOptionValueViewModel> values = field.Value as System.Collections.Generic.List<FieldOptionValueViewModel>; 293 int totalValues = values.Count; 294 295 foreach (FieldOptionValueViewModel option in values) 296 { 297 if (option.Value.Substring(0,1) == "#") { 298 isColor = true; 299 } 300 301 if (!isColor) { 302 @option.Name 303 } else { 304 <span class="colorbox-sm" style="background-color: @option.Value" title="@option.Name"></span> 305 } 306 307 if (valueCount != totalValues && valueCount < (totalValues - 1)) { 308 if (isColor) { 309 <text> </text> 310 } else { 311 <text>, </text> 312 } 313 } 314 valueCount++; 315 } 316 } 317 else 318 { 319 if (fieldValue.Substring(0,1) == "#") { 320 isColor = true; 321 } 322 323 if (!isColor) { 324 if(isLink) 325 { 326 string linktTitle = !fieldValue.Contains("aspx") ? fieldValue : Translate("Go to link"); 327 string target = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && fieldValue.Contains("http") ? "target=\"_blank\"" : string.Empty; 328 string rel = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && fieldValue.Contains("http") ? "rel=\"noopener\"" : string.Empty; 329 330 <a href="@field.Value" title="@field.Name" @target @rel>@linktTitle</a> 331 } 332 else if (isBrandName) 333 { 334 <span itemprop="brand" itemtype="https://schema.org/Brand" itemscope> 335 <span itemprop="name">@fieldValue</span> 336 </span> 337 } 338 else 339 { 340 @fieldValue 341 } 342 343 } else { 344 <span class="colorbox-sm" style="background-color: @fieldValue" title="@fieldValue"></span> 345 } 346 } 347 } 348

Alternative produkter