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>
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