Exception in template (Designs\Vidcom\eCom/Product/productview.cshtml): System.IndexOutOfRangeException: Index was outside the bounds of the array. at CompiledRazorTemplates.Dynamic.eaeccacebbfbcef.Execute() at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context) at RazorEngine.Templating.TemplateService.Run(ITemplate template, DynamicViewBag viewBag) at RazorEngine.Templating.TemplateService.Parse(String razorTemplate, Object model, DynamicViewBag viewBag, String cacheName) at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName) at Dynamicweb.Rendering.Template.Output()
@inherits RazorTemplateBase<RazorTemplateModel<Template>> @using System @using System.Linq @using Dynamicweb.Rendering @using Dynamicweb @using Dynamicweb.eCommerce.Products @using System.Web @{ @* Fetch the main product *@ Product product = Product.GetProductByID(GetString("Ecom:Product.ID").Split('-')[0]); // Stock status var stockAmount = GetInteger("Ecom:Product.AvailableAmount"); var minAmount = 1; if (stockAmount == 0) { minAmount = 0; } string imageString = "/Admin/Public/getImage.ashx?Image={0}&format=jpg&compression=80&crop=5&altFmImage_path=/Files/Images/Vidcom/na-image.jpg"; string mainImage = String.Format(imageString, GetString("Ecom:Product.ImageSmall.Default.Clean")); if (GetGlobalValue("Global:Request.Url").Contains("variantid") && GetInteger("Ecom:Product.AvailableAmount") == 0) { HttpContext.Current.Response.Redirect("/" + GetString("Ecom:Product.Link.Clean")); } bool isVariant = !string.IsNullOrEmpty(Input.Request("variantid")); bool hasVariants = GetInteger("Ecom:Product.VariantCount") > 0 ? true : false; // Price var productPrice = GetString("Ecom:Product.Discount.Price"); var productPriceClean = GetString("Ecom:Product.Discount.Price").Split(' ')[1].Replace(",", "."); string productName = GetString("Ecom:Product.Name"); string productNumber = GetString("Ecom:Product.Number"); string shortDescription = GetString("Ecom:Product.ShortDescription"); string longDescription = GetString("Ecom:Product.LongDescription"); string longDescriptionTeaser = GetString("Ecom:Product.ShortDescription"); if (string.IsNullOrEmpty(GetString("Ecom:Product.ShortDescription"))) { longDescriptionTeaser = GetString("Ecom:Product.LongDescription"); } if (longDescriptionTeaser.Length > 100) { longDescriptionTeaser = GetString("Ecom:Product.LongDescription").Substring(0, 100) + "..."; } string shareDescription = HttpContext.Current.Server.HtmlDecode(Dynamicweb.Base.StripHTML(longDescriptionTeaser)); string host = string.Format("{0}://{1}", GetGlobalValue("Global:Request.Scheme"), GetGlobalValue("Global:Request.Host")); string shareImage = string.Format("{0}{1}", host, GetString("Ecom:Product.ImageSmall.Default.Clean")); string naImage = string.Format("/Admin/Public/getImage.ashx?Image={0}&format=jpg&compression=80&Width=246&Height=184&crop=6&altFmImage_path=/Files/Images/Vidcom/na-image.jpg", "/Files/Images/Vidcom/na-image.jpg"); string productLink = string.Format("{0}{1}", host, GetGlobalValue("Global:Pageview.Url")); var systemDate = @GetGlobalValue("Global:Server.Date.GeneralDate"); var deliveryDate = @Pageview.Area.Item["DeliveryTimer"]; var rating = GetString("Comments.Rating"); bool disableRatings = (bool)@Pageview.Area.Item["DisableRatings"]; bool isDiscount = (bool)GetLoop("ProductDiscounts").Any(); int counter = 0; string videoUrl = GetString("Ecom:Product:Field.VideoVimeoUrl"); string videoImg = String.Format(imageString, GetString("Ecom:Product:Field.VideoBackgroundImage")); string videoImgBig = String.Format("/Admin/Public/getImage.ashx?Image={0}&format=jpg&compression=100&height=250", GetString("Ecom:Product:Field.VideoBackgroundImage")); string productPageId = GetString("Ecom:Product:Page.ID"); string productId = GetString("Ecom:Product.ID"); } @* Set product canonical URL *@ @SnippetStart("canonical") <link rel="canonical" href="/produkter/@GetGlobalValue("Global:Pageview.Url").Split('/')[2]"> @SnippetEnd("canonical") @* Open Graph Tags *@ @SnippetStart("MetaTags") <meta property="og:site_name" content="@GetString("DwAreaName")"> <meta property="og:title" content="@productName"> <meta property="og:url" content="@productLink"> <meta property="og:description" content="@shareDescription"> <meta property="og:image" content="@shareImage"> <meta property="og:type" content="website"> @SnippetEnd("MetaTags") @functions { string DiscountPct(LoopItem context = null) { double oldPrice = 0; double price = 0; double discount = 0; var inputdiscountPrice = (context != null ? context.GetString("Ecom:Product.Discount.AmountWithVAT") : GetString("Ecom:Product.Discount.AmountWithVAT")); var inputprice = (context != null ? context.GetString("Ecom:Product.Price.Price") : GetString("Ecom:Product.Price.Price")); double.TryParse( inputprice, out oldPrice); double.TryParse( inputdiscountPrice, out price); double difference = ( oldPrice - price ); discount = Math.Round((difference / oldPrice) * 100); return discount.ToString(); } string DiscountDiff(LoopItem context = null) { double oldPrice = 0; double price = 0; var inputdiscountPrice = (context != null ? context.GetString("Ecom:Product.Discount.AmountWithVAT") : GetString("Ecom:Product.Discount.AmountWithVAT")); var inputprice = (context != null ? context.GetString("Ecom:Product.Price.Price") : GetString("Ecom:Product.Price.Price")); double.TryParse( inputprice, out oldPrice); double.TryParse( inputdiscountPrice, out price); double difference = ( oldPrice - price ); return SliceCommas(difference.ToString()); } string OldPrice(LoopItem context = null, LoopItem product = null) { double oldPrice = 0; double price = 0; var inputdiscountPrice = (context != null ? context.GetString("Ecom:Product.Discount.AmountWithVAT") : GetString("Ecom:Product.Discount.AmountWithVAT")); var inputprice = (product != null ? product.GetString("Ecom:Product.Price.Price") : GetString("Ecom:Product.Price.Price")); double.TryParse( inputprice, out oldPrice); double.TryParse( inputdiscountPrice, out price); double difference = ( oldPrice + price ); return SliceCommas(difference.ToString()); } string SliceCommas(string givenPrice) { //We remove everything after comma, if the Discount-Handler calculates it differently, however the price in the cart is with comma values string price = givenPrice; int index = price.LastIndexOf(','); if(index > -1) { price = price.Substring(0, index) + ",-"; } else { price = price + ",-"; } return price.ToString(); } string ChangeAttribute(string input, string format) { if(!String.IsNullOrEmpty(input) && input == "checked") { return format; } else if(!String.IsNullOrEmpty(input) && Convert.ToBoolean(input)) { return format; } return null; } } @helper RenderProductList( string loopName, int limit = 0, bool isFeatured = false ) { bool isPromoProductAdded = false; var loop = GetLoop(loopName); foreach( LoopItem product in limit == 0 ? loop : loop.Take(limit) ) { string link = product.GetString("Ecom:Product.LinkGroup.Clean"); string name = product.GetString("Ecom:Product.Name"); string shortDescription = product.GetString("Ecom:Product.ShortDescription"); string price = product.GetString("Ecom:Product.Price"); string discountPrice = product.GetString("Ecom:Product.Discount.Price"); string discount = product.GetString("Ecom:Product.Discount.TotalPercentWithVATFormatted"); string productPageId = product.GetString("Ecom:Product:Page.ID"); string productId = product.GetString("Ecom:Product.ID"); string videoUrl = product.GetString("Ecom:Product:Field.VideoVimeoUrl"); string videoImg = product.GetString("Ecom:Product:Field.VideoBackgroundImage"); bool isDiscount = (bool)product.GetLoop("ProductDiscounts").Any(); bool isCategoryPromo = (bool)product.GetBoolean("Ecom:Product:Field.CategoryPromo"); string image = string.Format("/Admin/Public/getImage.ashx?Image={0}&format=jpg&compression=80&Width=246&Height=184&crop=6&altFmImage_path=/Files/Images/Vidcom/na-image.jpg", product.GetString("Ecom:Product.ImageSmall.Default.Clean")); string naImage = string.Format("/Admin/Public/getImage.ashx?Image={0}&format=jpg&compression=80&Width=246&Height=184&crop=6&altFmImage_path=/Files/Images/Vidcom/na-image.jpg", "/Files/Images/Vidcom/na-image.jpg"); string smallImagePath = product.GetString("Ecom:Product.ImageSmall.Default.Clean").Replace(" ", "%20"); string productClassName = "product-list__item"; if( isDiscount ) { productClassName = "product-list__item product-list__item--promo"; } if( isFeatured && !string.IsNullOrWhiteSpace(@videoUrl) && !string.IsNullOrWhiteSpace(@videoImg) && !@isPromoProductAdded){ isPromoProductAdded = true; <div class="@productClassName product-list__item--double"> <div class="product-list__item-content"> <div class="product-list__video js-button-play" data-video-id="@videoUrl" data-product-id="@productId" data-product-page-id="@productPageId" data-product-price="@discountPrice" data-product-name="@name" data-product-description="@shortDescription" data-product-link="@link"> <div class="product-list__image-content"> <img class="product-list__image" src="@naImage"> </div> <div class="product-list__video-bcg" style="background-image:url(/admin/public/getImage.ashx?Image=@videoImg&Format=jpg&Height=250)"></div> <div class="product-list__video-content"> <div class="product-list__video-play button--play"><span data-icon="play"></span></div> <div class="product-list__video-title"> <span>@Translate("ProductVideoHeadline", "Afspil Video")</span> <span>@Translate("ProductVideoSubheadline", "Det tager kun 2 minutter")</span> </div> </div> <div class="discount-badge product-list__video-badge" data-icon="discount-badge-bcg"><span>@Translate("ProductLocalStoreBadgeText", "Set i din lokale butik") </span></div> </div> <a href="@link"> <div class="product-list__details"> <span class="product-list__title">@name</span> <span class="product-list__btn-info">@Translate("ButtonMoreInfoText", "Mere info")</span> <span class="product-list__price-before">@Translate("ButtonBeforeText", "For") @price,-</span> <object><a href="/default.aspx?id=@productPageId&productid=@productId&cartcmd=add" class="button--shop product-list__btn-shop js-product-add-to-basket"><span data-icon-before="cart">@Translate("ButtonBuyNowText", "Køb nu")</span></a></object> <span class="product-list__price">@discountPrice,-</span> </div> </a> </div> </div> } else { <div class="@productClassName"> <a href="@link"> <div class="product-list__item-content"> <div class="product-list__image-content"> <img class="product-list__image" src="@image" alt="@name"> <div class="discount-badge discount-badge--yellow product-list__badge" data-icon="discount-badge-bcg"><span>@Translate("ButtonOfferText", "TILBUD")!</span></div> </div> <div class="product-list__details"> <span class="product-list__title">@name</span> <span class="product-list__subtitle">@shortDescription</span> @if( isDiscount ) { <span class="product-list__price">@discountPrice</span> }else { <span class="product-list__price">@price</span> } <span class="product-list__price-discount">@Translate("ButtonSaveText", "Spar") @discount%</span> <span class="product-list__price-before">@Translate("ButtonBeforeText", "For") @price</span> <span class="product-list__btn-info">@Translate("ButtonMoreInfoText", "Mere info")</span> <object><a href="/default.aspx?id=@productPageId&productid=@productId&cartcmd=add" class="button--shop product-list__btn-shop js-product-add-to-basket"><span data-icon-before="cart">@Translate("ButtonBuyNowText", "Køb nu")</span></a></object> </div> </div> </a> </div> } } } <div class="product-view__header"> <div class="container product-view__header-content"> <div class="breadcrumb__list"> <a class="breadcrumb__link" href="/">@Translate("BreadcrumbHome", "Forsiden")</a> <span>></span> @RenderNavigation(new { StartLevel = 1, template = "breadcrumb.xslt", expandmode = "pathonly", id = "breadcrumb" }) </div> </div> </div> <div class="product-view"> <div class="container product-view__content"> <div class="product-page" itemscope="" itemtype="http://schema.org/Product"> <div class="product-card js-product-card"> <meta itemprop="name" content="@productName"> <meta itemprop="brand" content="@GetString("Ecom:Product:Field.brand.Value.Clean")"> <meta itemprop="sku" content="@productNumber"> <meta itemprop="productID" content="@productNumber"> <div class="product-card__image-column"> <div class="slider js-init-slider active" data-autostart="false"> <div class="slider-container" style="visibility: visible;"> <div class="slider__slides"> @if (GetLoop("Ecom:Product.Images.Medium").Count() > 1) { foreach (LoopItem item in GetLoop("Ecom:Product.Images.Medium")) { counter++; string image = String.Format(imageString, item.GetString("Ecom:Product.ImageMedium.Default.Clean")); <div class="slider__slide"> <img class="slider__image" itemprop="image" src="@( string.Format("{0}&width=539", image) )" alt="@productName"> @if (!string.IsNullOrEmpty(@GetString("Ecom:Product:Field.VideoVimeoUrl")) && counter <= 1) { <div class="product-list__video-content js-button-play" data-video-id="@videoUrl"> <div class="product-list__video-play button--play"><span data-icon="play"></span></div> </div> <div class="video-overlay__player"> <a href="#" class="video-overlay__btn-close js-overlay-close"><span data-icon-before="cross"></span></a> <div class="embed-video js-video-vimeo"> <div class="embed-video__container"> <div class="embed-video__inner js-video-iframe"> <div id="video-iframe"> </div> </div> </div> </div> </div> } </div><!-- .slider__slide --> } } else { <div class="slider__slide"> <img class="slider__image" itemprop="image" src="@( string.Format("{0}&width=700", mainImage) )" alt="@productName"> @if (!string.IsNullOrEmpty(@GetString("Ecom:Product:Field.VideoVimeoUrl"))) { <div class="product-list__video-content js-button-play" data-video-id="@videoUrl"> <div class="product-list__video-play button--play"><span data-icon="play"></span></div> </div> <div class="video-overlay__player"> <a href="#" class="video-overlay__btn-close js-overlay-close"><span data-icon-before="cross"></span></a> <div class="embed-video js-video-vimeo"> <div class="embed-video__container"> <div class="embed-video__inner js-video-iframe"> <div id="video-iframe"> </div> </div> </div> </div> </div> } </div><!-- .slider__slide --> } </div><!-- .slider__slides --> @if (GetLoop("Ecom:Product.Images.Medium").Count() > 1) { <a class="slider__prev" href="#previous" data-icon="arrow-left"></a> <a class="slider__next" href="#next" data-icon="arrow-right"></a> } @if (isDiscount) { <div class="discount-badge discount-badge--yellow product-card__badge" data-icon="discount-badge-bcg"><span>@Translate("ButtonOfferText", "TILBUD")!</span></div> } </div><!-- .slider-container --> <nav class="slider__nav"> @if(hasVariants) { if (hasVariants && !isVariant) { foreach (LoopItem item in GetLoop("Ecom:Product.Images.Medium")) { string image = String.Format(imageString, item.GetString("Ecom:Product.ImageMedium.Default.Clean")); <a class="slider__nav-item"> <img class="slider__nav-image" src="@( string.Format("{0}&width=80&height=80", image) )" alt="@productName"> </a><!-- .slider__nav-item --> } } else if (hasVariants && isVariant) { <a class="slider__nav-item"> <img class="slider__nav-image" src="@( string.Format("{0}&width=80&height=80", mainImage) )" alt="@productName"> </a><!-- .slider__nav-item --> } } else { <a class="slider__nav-item"> <img class="slider__nav-image" src="@( string.Format("{0}&width=80&height=80", mainImage) )" alt="@productName"> </a><!-- .slider__nav-item --> } </nav><!-- .slider__nav --> </div><!-- .slider --> <div class="social__bar"> <span class="social__bar-text">@Translate("ButtonShareText", "DEL") </span> <a class="js-social-bar social__bar-icon" data-icon="facebook-share" href="#" data-type="facebook" data-url="@productLink" data-media="@shareImage" data-title="@productName" data-description="@shareDescription"></a> <a class="js-social-bar social__bar-icon" data-icon="twitter-share" href="#" data-type="twitter" data-url="@productLink" data-media="@shareImage" data-title="@productName" data-description="@shareDescription"></a> <a class="js-social-bar social__bar-icon" data-icon="linkedin-share" href="#" data-type="linkedin" data-url="@productLink" data-media="@shareImage" data-title="@productName" data-description="@shareDescription"></a> <a class="js-social-bar social__bar-icon" data-icon="pinterest-share" href="#" data-type="pinterest" data-url="@productLink" data-media="@shareImage" data-title="@productName" data-description="@shareDescription"></a> </div> </div> <div class="product-card__info-column"> <h1 class="h2 product-card__title">@productName</h1> @if (!@disableRatings) { <p class="product-card__rating"> <span class="product-card__rating-stars rating"> @GetString("Comments.Stars") </span> <span class="product-card__rating-info" itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating"> @GetString("Comments.Rating") ud af 5 stjerner - <a href="#" class='js-reviews-btn'>@Translate("ButtonSeeReviewsText", "SE ANMELDELSER")</a> <meta itemprop="ratingValue" content="@GetString("Comments.Rating")"> <meta itemprop="reviewCount" content="@GetString("Comments.Count")"> <meta itemprop="bestRating" content="5" /> <meta itemprop="worstRating" content="0" /> </span> </p> } <div class="product-card__info"> <span class="product-card__info-txt">@longDescriptionTeaser</span> <br> <a class="product-card__info-btn js-more-info-btn" href="#">@Translate("ButtonReadMoreText", "LÆS MERE")</a> </div> <form id="ecomCart" class="js-product-form @(hasVariants ? "js-required-form" : null)" name="ecomCart" method="post"> @GetString("Ecom:Product.Form.Multi.HiddenFields") <div class="product-card__price-info" itemprop="offers" itemscope="" itemtype="http://schema.org/Offer"> <meta itemprop="priceCurrency" content="@GetString("Ecom:Product.Currency.Code")"> <meta itemprop="price" content="@productPriceClean"> <div class="product-card__price-wrapper"> @if (isDiscount) { <h3 class="product-card__price product-card__price--promo">@productPrice</h3> <span class="product-card__price-after">@Translate("ButtonSaveText", "Spar") @GetString("Ecom:Product.Discount.TotalPercentWithVATFormatted")%</span> <span class="product-card__price-before">@Translate("ButtonBeforeText", "For") @productPrice</span> } else { <h3 class="product-card__price">@productPrice</h3> } @if (stockAmount > 0) { <link itemprop="availability" href="http://schema.org/InStock" /> } else { <link itemprop="availability" href="http://schema.org/OutOfStock" /> } </div> </div> @if (hasVariants) { <div class="product-card__options"> <select id="product-options" class="js-product-variant-select js-required-select" name="variant" required> <option value="" disabled selected hidden>@Translate("TextSelectVariant", "Vælg variant")</option> @foreach (var v in GetLoop("VariantCombinations")) { var isSelected = v.GetBoolean("Ecom:VariantCombination.Selected") ? "selected" : null; var variantId = v.GetString("Ecom:VariantCombination.VariantID"); <option @isSelected value="@variantId" data-variantlink="@v.GetString("Ecom:VariantCombination.LinkGroup.Clean")"> @v.GetString("Ecom:VariantCombination.Product.Name") </option> } </select> </div> } <div class="product-card__buy-container"> <div> <div class="product-card__quantity"> <span class="product-card__quantity-subtract js-product-quantity-subtract">-</span> <input id="Quantity" class="product-card__quantity-input js-quantity-input" name="Quantity" type="number" min="@minAmount" max="@stockAmount" value="@minAmount"> <span class="product-card__quantity-add js-product-quantity-add">+</span> </div> </div> <div class="product-card__button-container"> @if (stockAmount > 0) { <button class="button--shop product-card__button-add" type="submit"><span data-icon-before="cart">@Translate("ButtonAddToBasketText", "Læg i kurv")</span></button> } else { <button class="button--shop product-card__button-add" type="submit" disabled><span data-icon-before="cart">@Translate("ButtonAddToBasketText", "Læg i kurv")</span></button> } <input type="hidden" name="CartCmd" id="CartCmd" value="add"> </div> </div> </form> <div class="product-card__availability"> @if (stockAmount > 0) { <span class="product-card__stock-status" data-icon-before="info-checkmark">@Translate("EcomInStock", "Varen er på lager")</span> } else { <span class="product-card__stock-status product-card__stock-status--no-products" data-icon-before="info-checkmark">@Translate("EcomOutOfStock", "Out of stock")</span> } </div> </div> </div> <div class="product-info js-product-info"> <div class="product-info__statements-column"> <div class="product-statements"> <h4 class="statements__headline">Ved Vidcom får du altid ....</h4> <ul class="statements__list"> <li class="statements__item"><span>Levering inden for 1-2 dage</span></li> <li class="statements__item"><span>Fragt fra @Pageview.Area.Item["DeliveryCost"] kr. (gratis over @Pageview.Area.Item["FreeDeliveryFrom"] kr.)</span></li> <li class="statements__item"><span>30 dages fri returret</span></li> </ul> </div> </div> <div class="product-info__tabs-column"> <div class="products__tabs swiper-container js-product-tabs-swiper"> <div class="swiper-wrapper"> <a class="products__tabs-item swiper-slide js-toggle-class js-toggle-retrigger is-active js-tabsection-products" data-target-retrigger="target-retrigger" data-target=".product-list__content--similar" data-target-class="is-active">@Translate("ProductsTabSimilarText", "Andre har også købt")</a> <a class="products__tabs-item swiper-slide js-toggle-class js-toggle-retrigger js-tabsection-description" data-target-retrigger="target-retrigger" data-target=".product-list__content--description" data-target-class="is-active">@Translate("ProductsTabDescriptionText", "Varebeskrivelse")</a> @if (!@disableRatings) { <a class="products__tabs-item swiper-slide js-toggle-class js-toggle-retrigger js-tabsection-reviews" data-target-retrigger="target-retrigger" data-target=".product-list__content--reviews" data-target-class="is-active">@Translate("ProductsTabReviewsText", "Anmeldelser")</a> } </div> <div class="swiper-scrollbar js-product-tabs-scroll"></div> </div> <div> <div class="product-list"> <div class="product-list__content product-list__content--similar is-active js-toggle-retrigger js-tabsection-products" data-hash="products"> @if (GetLoop("eCom:Related.CustomersWhoBoughtThisItemAlsoBought").Any()) { @RenderProductList("eCom:Related.CustomersWhoBoughtThisItemAlsoBought", 3) } else { <p>@Translate("EcomNoRelatedProductsText", "Ingen relaterede produkter fundet.")</p> } </div> <div class="product-list__content product-list__content--description js-toggle-retrigger js-tabsection-description" data-hash="details" itemprop="description"> @if (!string.IsNullOrWhiteSpace(longDescription)) { @longDescription } else { <p>@Translate("EcomNoDescription", "Ikke fundet produktbeskrivelse.")</p> } </div> @if (!@disableRatings) { <div class="product-list__content product-list__content--reviews js-toggle-retrigger js-tabsection-reviews" data-hash="reviews"> @if (GetLoop("Comments").Any()) { foreach (var item in GetLoop("Comments")) { <div class="product-comment" itemprop="review" itemscope itemtype="http://schema.org/Review"> <span class="product-comment__date" itemprop="datePublished">@item.GetString("CreatedDate")</span> <span class="product-comment__rating" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating"> @item.GetString("Stars") <meta itemprop="worstRating" content="1"> <meta itemprop="ratingValue" content="@item.GetString("Rating")"> <meta itemprop="bestRating" content="5"> </span> <span class="product-comment__title">- <strong itemprop="author">@item.GetString("Name")</strong></span> <p class="product-comment__text" itemprop="description">@item.GetString("Text")</p> </div> } } else { <p>@Translate("EcomNoReviews", "Dette produkt har ingen anmeldelser")</p> } </div> } </div> </div> </div> </div> </div> </div> </div>
Solar Butterfly
kr. 29,95 Add to basketHyggelig dekorativ soldrevet have sommerfugl
Solar Butterfly er en unik dekorativ sommerfugl, som vil skabe hygge i din have hele den lange sommer.
Sommerfuglen placeres i en blomst eller plante ved hjælp af det medfølgende jordspyd.
Med energi fra sollyset roterer og vibrerer Solar Butterfly rundt om planten. Det får Solar Butterfly til forveksling at ligne en rigtig sommerfugl.
Solar Butterfly findes i seks flotte farver og kan i mangel af sollys drives af et 1,5V batteri.
Brugbare kvalitets produkter du kender fra dit lokale supermarked
Vidcom Danmark A/S er en virksomhed, hvis produkter forhandles i dagligvarebutikker, isenkræmmere og byggemarkeder via In-Store-Video, dvs produkt-demonstrationer på skærme opstillet som del af et varedisplay.
LÆS MEREEfter mere end 30 års varesalg i butikker, er vores produkter nu ligeledes tilgængelige online.....
Alle vores produkter præsenteres og forhandles nu ligeledes online, nemt og bekvemt med levering til nærmeste GLS pakkeshop