Vi bruker cookies for å forbedre brukeropplevelsen

Vennligst vent...
Handlekurven er tom..
Vennligst velg en variant
Du må være logget på som bruker for å anvende "Ønskeliste".
  1. Vibratorer
  2. Klitoris vibratorer

Adrien Lastic - Torn - Minivibrator


469,00 NOK 163,99 NOK

Som navnet antyder er dette en veldig kraftig vibrator. En av de sterkeste vibratoren i merket Adrien Lastic. Det er en vibrator som med fordel kan brukes både vaginalt og analt, og dermed er det altså en vibrator for både menn og kvinner.


På lager På lager (Bestil inden kl. 21.00 og varen sendes i dag)

Tilbehør

Spesifikasjoner

PRODUKTNR. 1002395000

Levering 1-3 hverdager

TESTET Ftalatfri
Dermatologisk testet

LENGDE I CM. 14,6

DIAMETER I CM. 3,6

MATERIALE Medisinsk silikon

KONTROLLEN Indbygget

VIBRASJONSMØNSTRE 8

RENGJØRING Rengjøringsmiddel til sexleketøy

STRØMFORSYNING Batterier medfølger

BATTERIER 2 x AAA

BRUKERMANUAL Engelsk

Exception in template (Designs\Dwsimple\eCom/Product/ProductWidget.cshtml): System.ArgumentNullException: Value cannot be null.
Parameter name: source
   at System.Linq.Enumerable.Contains[TSource](IEnumerable`1 source, TSource value, IEqualityComparer`1 comparer)
   at Dynamicweb.Content.Caching.Storage.Contains(String key)
   at Dynamicweb.eCommerce.International.Language.get_CachedLanguages()
   at Dynamicweb.eCommerce.International.Language.GetLanguage(String languageId)
   at Dynamicweb.eCommerce.Common.Context.get_Language()
   at Dynamicweb.eCommerce.Orders.SalesDiscounts.PriceFieldPriceProvider.FindPrice(Product Product, Double Quantity, String VariantID, Currency Currency, String UnitID, Extranet User)
   at Dynamicweb.eCommerce.Prices.PriceManager.FindPriceInternal(PriceProvider provider, Product product, Double quantity, String variantID, Currency currency, String unitId, Boolean isInformative)
   at Dynamicweb.eCommerce.Prices.PriceManager.FindPrice(Product Product, Double Quantity, String VariantID, Currency Currency, String UnitID, Boolean IsInformative)
   at Dynamicweb.eCommerce.Prices.PriceManager.FindPrice(Product Product, Double Quantity, Boolean IsInformative)
   at Dynamicweb.eCommerce.Prices.PriceCalculated.set_Product(Product Value)
   at Dynamicweb.eCommerce.Products.Product.get_Price()
   at CompiledRazorTemplates.Dynamic.accebfeb.<>c__DisplayClassdb.b__da(TextWriter __razor_helper_writer)
   at CompiledRazorTemplates.Dynamic.accebfeb.Execute()
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context)
   at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName)
   at Dynamicweb.Rendering.Template.Output()
@helper RenderProduct(dynamic product) { var id = product.GetString("Ecom:Product.ID"); var domain = System.Web.HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); var Image = belugi.core.Provider.ImageProvider.MainImage(product.GetString("Ecom:Product.Number")); string showStock = HttpContext.Current.Request["showStock"]; bool showStockState = true; if (!string.IsNullOrEmpty(showStock)) { showStockState = true; } var Name = product.GetString("Ecom:Product.Name"); var Description = product.GetString("Ecom:Product.ShortDescription"); var Discount = product.GetString("Ecom:Product.Discount.Price"); var Price = product.GetString("Ecom:Product.Price"); var Fullprice = product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Currency.Code")); var url = Pageview.Area.Item["ProductPage"] + "?ProductId=" + id; var cssClass = ""; <figure class="ex @(product.GetInteger("Ecom:Product.Stock") <= 0 ? "disabled" : "")"> @if (product.GetString("Ecom:Product:Field.bestseller") == "True") { DateTime date; if (DateTime.TryParseExact(product.GetString("Ecom:Product:Field.bestsellerdate"), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date)) { if (date.Date >= DateTime.Now.Date) { <div class="strip strip-red"><span>@Translate("Product.Bestseller", "Bestseller")</span></div> } } } @if (product.GetString("Ecom:Product:Field.new") == "True") { DateTime date; if (DateTime.TryParseExact(product.GetString("Ecom:Product:Field.newdate"), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date)) { if (date.Date >= DateTime.Now.Date) { <div class="strip strip-red"><span>@Translate("Product.New", "Nyhed")</span></div> } } } @if (product.GetString("Ecom:Product:Field.offer") == "True") { DateTime date; if (DateTime.TryParseExact(product.GetString("Ecom:Product:Field.offerdate"), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date)) { if (date.Date >= DateTime.Now.Date) { <div class="strip strip-green"><span>@Translate("Product.Offer", "Tilbud")</span></div> } } } @if (product.GetString("Ecom:Product:Field.top10") == "True") { DateTime date; if (DateTime.TryParseExact(product.GetString("Ecom:Product:Field.top10date"), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date)) { if (date.Date >= DateTime.Now.Date) { <div class="strip strip-black"><span>@Translate("Product.Top10", "Top 10")</span></div> } } } <div class="image" style="background-image:url('@Image')"> <a href="@url"></a> </div> <div class="title"><a href="@url">@Name</a></div> @if (product.GetInteger("Ecom:Product.Stock") <= 0) { var deliveryText = ""; if (!string.IsNullOrEmpty(GetString("Ecom:Product:Stock.DeliveryText"))) { deliveryText = " (" + GetString("Ecom:Product:Stock.DeliveryText") + " " + Translate(GetString("Ecom:Product:Stock.DeliveryUnit"), GetString("Ecom:Product:Stock.DeliveryUnit")) + ")"; } <div class="price @(!string.IsNullOrWhiteSpace(Fullprice) ? "price-discount" : "")"> <div class="@cssClass btn btn-black btn-block"> @if (!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.GetString("Ecom:Product.PriceWithVAT")) { if (product.GetString("Ecom:Product.Price.Currency.Code") == "EUR") { <small>@product.GetString("Ecom:Product.Price.Currency.Symbol") @string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code"))))</small> } else { <small>@string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code")))) @product.GetString("Ecom:Product.Currency.Symbol")</small> } } @Price @if (product.GetInteger("Ecom:Product.VariantCount") <= 0) { <span class="ico-disabled" style="background-image:url(@product.GetString("Ecom:Product:Stock.Image.Clean"))" data-toggle="tooltip" data-placement="left" title="@Translate(product.GetString("Ecom:Product:Stock.Text"), product.GetString("Ecom:Product:Stock.Text"))@deliveryText"></span> } else { <div class="mfp-hide main-popup" id="variant-popup-@id"> @RenderProductVariants(product) <form method="post" action="/Default.aspx"> @product.GetValue("Ecom:Product.Form.Clean") <a class="add-variant-to-cart btn btn-black btn-block btn-big" data-isdetail="0"> @Translate("Add to cart", "Add to cart") <i class="fa fa-cart-plus"></i> </a> </form> </div> } </div> </div> } else if (product.GetInteger("Ecom:Product.VariantCount") > 0) { <div class="price open-popup @(!string.IsNullOrWhiteSpace(Fullprice) ? "price-discount" : "")" data-product-id="@id" data-mfp-src="#variant-popup-@id"> <a> @if (!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.GetString("Ecom:Product.PriceWithVAT")) { if (product.GetString("Ecom:Product.Price.Currency.Code") == "EUR") { <small>@product.GetString("Ecom:Product.Price.Currency.Symbol") @string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code"))))</small> } else { <small>@string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code")))) @product.GetString("Ecom:Product.Currency.Symbol")</small> } } @Price </a> </div> <div class="mfp-hide main-popup" id="variant-popup-@id"> @RenderProductVariants(product) <form method="post" action="/Default.aspx"> @product.GetValue("Ecom:Product.Form.Clean") <a class="add-variant-to-cart btn btn-black btn-block btn-big" data-isdetail="0"> @Translate("Add to cart", "Add to cart") <i class="fa fa-cart-plus"></i> </a> </form> </div> } else { <div class="price @(!string.IsNullOrWhiteSpace(Fullprice) ? "price-discount" : "")" data-product-id="@id"> <form method="post" action="/Default.aspx"> @product.GetValue("Ecom:Product.Form.Clean") <button type="button" class="@cssClass add-variant-to-cart btn btn-black btn-block" data-isdetail="1"> @if (!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.GetString("Ecom:Product.PriceWithVAT")) { if (product.GetString("Ecom:Product.Price.Currency.Code") == "EUR") { <small>@product.GetString("Ecom:Product.Price.Currency.Symbol") @string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code"))))</small> } else { <small>@string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code")))) @product.GetString("Ecom:Product.Currency.Symbol")</small> } } @Price </button> </form> </div> <div class="mfp-hide main-popup" id="variant-popup-@id"> @RenderProductVariants(product) <form method="post" action="Default.aspx"> @product.GetValue("Ecom:Product.Form.Clean") <a class="add-variant-to-cart btn btn-black btn-block btn-big"> @Translate("Add to cart", "Add to cart") <i class="fa fa-cart-plus"></i> </a> </form> </div> } </figure> } @helper RenderProductVariants(dynamic product) { var variantGroups = product.GetLoop("VariantGroups"); var variantCombinations = product.GetLoop("VariantCombinations"); var selectedVariantComboID = product.GetString("Ecom:Product.SelectedVariantComboID"); @RenderProductVariants(product.GetString("Ecom:Product.ID"), variantGroups, variantCombinations, selectedVariantComboID, isMain: false, defaultPreselect: false) } @helper RenderProductVariants() { var variantGroups = GetLoop("VariantGroups"); var variantCombinations = GetLoop("VariantCombinations"); var selectedVariantComboID = GetString("Ecom:Product.SelectedVariantComboID"); var defaultPreselect = false; if (System.Web.HttpContext.Current.Request.RawUrl.Contains("=VO")) { defaultPreselect = true; } @RenderProductVariants(GetString("Ecom:Product.ID"), variantGroups, variantCombinations, selectedVariantComboID, true, defaultPreselect) } @helper RenderProductVariants(string productID, List<LoopItem> variantGroups, List<LoopItem> variantCombinations, string variantID, bool isMain = true, bool defaultPreselect = true) { var variantsExists = false; var availableVariantCombinations = new List<string>(); foreach (LoopItem variantCombination in variantCombinations) { availableVariantCombinations.Add(variantCombination.GetString("Ecom:VariantCombination.VariantID")); } if (variantGroups.Count() > 0 && availableVariantCombinations.Any()) { //color variant if (variantGroups.Count() == 1) { var otherVariants = new List<ProductVariant>(); var variantgroup = variantGroups.First(); var variantgroupid = variantgroup.GetString("Ecom:VariantGroup.ID"); var variantgroupname = variantgroup.GetString("Ecom:VariantGroup.Name"); foreach (LoopItem variantoption in variantgroup.GetLoop("VariantOptions")) { var variantoptionid = variantoption.GetString("Ecom:VariantOption.ID"); if (!availableVariantCombinations.Contains(variantoptionid)) { continue; } var variantoptionname = variantoption.GetString("Ecom:VariantOption.Name"); var selected = false; if (defaultPreselect) { selected = variantoption.GetBoolean("Ecom:VariantOption.Selected"); } var existingVariant = otherVariants.FirstOrDefault(v => v.VariantGroupID == variantgroupid); if (existingVariant != null) { existingVariant.VariantOptions.Add(new ProductVariantOption { VariantOptionID = variantoptionid, VariantOptionName = variantoptionname, Selected = selected }); } else { otherVariants.Add(new ProductVariant { VariantGroupID = variantgroupid, VariantGroupName = variantgroupname, VariantOptions = new List<ProductVariantOption> { new ProductVariantOption { VariantOptionID = variantoptionid, VariantOptionName = variantoptionname, Selected = selected } } }); } } foreach (var otherVariant in otherVariants) { variantsExists = true; <div class="variant clearfix"> <select class="other-variant" data-main="@(isMain ? "1" : "0")" data-pageurl="/@Pageview.Area.Item["ProductPage"]&ProductID=@productID"> <option value="-1">@Translate("Choose variant", "Choose variant")</option> @foreach (var variant in otherVariant.VariantOptions) { if (otherVariant.VariantOptions.Count() == 1) { variant.Selected = true; } <option value="@variant.VariantOptionID" @(variant.Selected ? "selected" : "")>@variant.VariantOptionName</option> } </select> </div> } } //size color variant if (variantGroups.Count() == 2) { var availableSizeCombinations = new List<string>(); foreach (var availVariantOption in availableVariantCombinations) { var optionSplit = availVariantOption.Split('.'); if (!availableSizeCombinations.Contains(optionSplit[0])) { availableSizeCombinations.Add(optionSplit[0]); } } var sizeColorVariants = new List<SizeColorVariant>(); var sizeVariantGroup = variantGroups[0]; var colorVariantGroup = variantGroups[1]; foreach (LoopItem sizeVariantoption in sizeVariantGroup.GetLoop("VariantOptions")) { var sizeVariantOptionId = sizeVariantoption.GetString("Ecom:VariantOption.ID"); if (!availableSizeCombinations.Contains(sizeVariantOptionId)) { continue; } var sizeName = sizeVariantoption.GetString("Ecom:VariantOption.Name"); var sizeSelected = defaultPreselect ? sizeVariantoption.GetBoolean("Ecom:VariantOption.Selected") : false; var sizeColorVariant = new SizeColorVariant { VariantID = sizeVariantOptionId, Size = sizeName, Selected = sizeSelected, Colors = new List<ColorVariant>() }; foreach (LoopItem colorVariantoption in colorVariantGroup.GetLoop("VariantOptions")) { var colorVariantOptionId = colorVariantoption.GetString("Ecom:VariantOption.ID"); var availableColorCombinations = availableVariantCombinations.FindAll(v => v.StartsWith(sizeVariantOptionId + ".")) .Select(v => v.Split('.')[1]) .ToList(); if (!availableColorCombinations.Contains(colorVariantOptionId)) { continue; } var colorName = colorVariantoption.GetString("Ecom:VariantOption.Name"); var colorSelected = defaultPreselect ? colorVariantoption.GetBoolean("Ecom:VariantOption.Selected") : false; sizeColorVariant.Colors.Add(new ColorVariant { Color = colorName, VariantID = colorVariantOptionId, Selected = colorSelected }); } sizeColorVariants.Add(sizeColorVariant); } if (sizeColorVariants.Any()) { variantsExists = true; <div class="lingerie-container"> <div class="variant clearfix"> <select class="lingerie-size" data-main="@(isMain ? "1" : "0")" data-pageurl="/@Pageview.Area.Item["ProductPage"]&ProductID=@productID"> <option value="-1">@Translate("Choose variant", "Choose variant")</option> @for (var i = 0; i < sizeColorVariants.Count; i++) { if (sizeColorVariants.Count == 1) { sizeColorVariants[i].Selected = true; } <option data-value="@(sizeColorVariants[i].VariantID)" value="@i" @(sizeColorVariants[i].Selected ? "selected" : "")>@sizeColorVariants[i].Size</option> } </select> </div> @foreach (var sizeColor in sizeColorVariants) { <div class="variant clearfix"> <select id="lingerieColor-@sizeColorVariants.IndexOf(sizeColor)" class="lingerie-color" data-visible="@(sizeColor.Selected ? 1 : 0)" data-main="@(isMain ? "1" : "0")" data-pageurl="/@Pageview.Area.Item["ProductPage"]&ProductID=@productID"> <option value="-1">@Translate("Choose variant", "Choose variant")</option> @foreach (var color in sizeColor.Colors) { if (sizeColor.Colors.Count() == 1) { color.Selected = true; } <option value="@color.VariantID" @(color.Selected ? "selected" : "")>@color.Color</option> } </select> </div> } </div> } } } if (variantsExists) { <hr /> } } @helper RenderProductObject(Dynamicweb.eCommerce.Products.Product product) { var id = product.ID; var domain = System.Web.HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); var Image = belugi.core.Provider.ImageProvider.MainImage(product.Number); var Name = product.Name; var Description = product.ShortDescription; // var Discount = @GetString("Ecom:Product.Discount.Price"); var Discount = belugi.core.provider.ProductProvider.GetCalcualtedOrderDiscountPrice(product.ID, GetValue("Ecom:Product.LanguageID").ToString()); var Fullprice = product.GetProductFieldValue("fullprice" + product.Price.Currency.Code).ToString(); var Price = product.Price.PriceFormatted; var url = Pageview.Area.Item["ProductPage"] + "?ProductId=" + id; <figure class="ex @(product.Stock <= 0 ? "disabled" : "")"> @if (product.GetProductFieldValue("bestseller").ToString() == "True") { DateTime date; if (DateTime.TryParseExact(product.GetProductFieldValue("bestsellerdate").ToString(), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date)) { if (date.Date >= DateTime.Now.Date) { <div class="strip strip-red"><span>@Translate("Product.Bestseller", "Bestseller")</span></div> } } } @if (product.GetProductFieldValue("new").ToString() == "True") { DateTime date; if (DateTime.TryParseExact(product.GetProductFieldValue("newdate").ToString(), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date)) { if (date.Date >= DateTime.Now.Date) { <div class="strip strip-red"><span>@Translate("Product.New", "Nyhed")</span></div> } } } @if (product.GetProductFieldValue("offer").ToString() == "True") { DateTime date; if (DateTime.TryParseExact(product.GetProductFieldValue("offerdate").ToString(), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date)) { if (date.Date >= DateTime.Now.Date) { <div class="strip strip-green"><span>@Translate("Product.Offer", "Tilbud")</span></div> } } } @if (product.GetProductFieldValue("top10").ToString() == "True") { DateTime date; if (DateTime.TryParseExact(product.GetProductFieldValue("top10date").ToString(), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date)) { if (date.Date >= DateTime.Now.Date) { <div class="strip strip-black"><span>@Translate("Product.Top10", "Top 10")</span></div> } } } <div class="image" style="background-image:url('@Image')"> <a href="@url"></a> </div> <div class="title"><a href="@url">@Name</a></div> @if (product.Stock <= 0) { var stockStatus = product.get_StockStatus(Dynamicweb.eCommerce.Common.Context.LanguageID); var deliveryText = ""; if (!string.IsNullOrEmpty(stockStatus.ExpectedDeliveryText)) { deliveryText = " (" + stockStatus.ExpectedDeliveryText + " " + Translate(stockStatus.ExpectedDeliveryValue, stockStatus.ExpectedDeliveryValue) + ")"; } <div class="price @(!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.Price.PriceWithVAT.ToString() ? "price-discount" : "")"> <div class="btn btn-black btn-block"> @if (!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.Price.PriceWithVAT.ToString()) { if (product.Price.Currency.Code == "EUR") { <small>@product.Price.Currency.Symbol @string.Format("{0:0,0.00}", double.Parse(Fullprice))</small> } else { <small>@string.Format("{0:0,0.00}", double.Parse(Fullprice)) @product.Price.Currency.Symbol</small> } } @Price @if (product.VariantCount > 0) { <div class="mfp-hide main-popup" id="variant-popup-@id"> @RenderProductObjectVariants(product) <form method="post" action="/Default.aspx"> <input type="hidden" name="ProductURL" id="ProductURL" value=""> <input type="hidden" name="CartCmd" id="CartCmd" value="add"> <input type="hidden" name="ProductID" id="ProductID" value="@product.ID"> <input type="hidden" name="VariantID" id="VariantID" value="@product.VariantID"> <input type="hidden" name="UnitID" id="UnitID" value=""> <input type="hidden" name="wishListID" id="wishListID" value="0"> <a class="add-variant-to-cart btn btn-black btn-block btn-big" data-isdetail="0"> @Translate("Add to cart", "Add to cart") <i class="fa fa-cart-plus"></i> </a> </form> </div> } else { <span class="ico-disabled" style="background-image:url(@stockStatus.Icon)" data-toggle="tooltip" data-placement="left" title="@Translate(stockStatus.Text, stockStatus.Text)@deliveryText"></span> } </div> </div> } else if (product.VariantCount > 0) { <div class="price open-popup @(!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.Price.PriceWithVAT.ToString() ? "price-discount" : "")" data-product-id="@id" data-mfp-src="#variant-popup-@id"> <a> @if (!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.Price.PriceWithVAT.ToString()) { if (product.Price.Currency.Code == "EUR") { <small>@product.Price.Currency.Symbol @string.Format("{0:0,0.00}", double.Parse(Fullprice))</small> } else { <small>@string.Format("{0:0,0.00}", double.Parse(Fullprice)) @product.Price.Currency.Symbol</small> } } @Price </a> </div> <div class="mfp-hide main-popup" id="variant-popup-@id"> @RenderProductObjectVariants(product) <form method="post" action="/Default.aspx"> <input type="hidden" name="ProductURL" id="ProductURL" value=""> <input type="hidden" name="CartCmd" id="CartCmd" value="add"> <input type="hidden" name="ProductID" id="ProductID" value="@product.ID"> <input type="hidden" name="VariantID" id="VariantID" value="@product.VariantID"> <input type="hidden" name="UnitID" id="UnitID" value=""> <input type="hidden" name="wishListID" id="wishListID" value="0"> <a class="add-variant-to-cart btn btn-black btn-block btn-big" data-isdetail="0"> @Translate("Add to cart", "Add to cart") <i class="fa fa-cart-plus"></i> </a> </form> </div> } else { var cssClass = ""; <div class="price @(!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.Price.PriceWithVAT.ToString() ? "price-discount" : "")" data-product-id="@id"> <form method="post" action="/Default.aspx"> <input type="hidden" name="ProductURL" id="ProductURL" value=""> <input type="hidden" name="CartCmd" id="CartCmd" value="add"> <input type="hidden" name="ProductID" id="ProductID" value="@product.ID"> <input type="hidden" name="VariantID" id="VariantID" value="@product.VariantID"> <input type="hidden" name="UnitID" id="UnitID" value=""> <input type="hidden" name="wishListID" id="wishListID" value="0"> <button type="button" class="@cssClass add-variant-to-cart btn btn-black btn-block" data-isdetail="1"> @if (!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.Price.PriceWithVAT.ToString()) { if (product.Price.Currency.Code == "EUR") { <small>@product.Price.Currency.Symbol @string.Format("{0:0,0.00}", double.Parse(Fullprice))</small> } else { <small>@string.Format("{0:0,0.00}", double.Parse(Fullprice)) @product.Price.Currency.Symbol</small> } } @Price </button> </form> </div> <div class="mfp-hide main-popup" id="variant-popup-@id"> @RenderProductObjectVariants(product) <form method="post" action="Default.aspx"> <input type="hidden" name="ProductURL" id="ProductURL" value=""> <input type="hidden" name="CartCmd" id="CartCmd" value="add"> <input type="hidden" name="ProductID" id="ProductID" value="@product.ID"> <input type="hidden" name="VariantID" id="VariantID" value="@product.VariantID"> <input type="hidden" name="UnitID" id="UnitID" value=""> <input type="hidden" name="wishListID" id="wishListID" value="0"> <a class="add-variant-to-cart btn btn-black btn-block btn-big"> @Translate("Add to cart", "Add to cart") <i class="fa fa-cart-plus"></i> </a> </form> </div> } </figure> } @helper RenderProductObjectVariants(Dynamicweb.eCommerce.Products.Product product) { var variantGroups = product.VariantGroups.ToList(); var variantCombinations = product.VariantCombinations.ToList(); var selectedVariantComboID = product.VariantID; @RenderProductObjectVariants(product.ID, variantGroups, variantCombinations, selectedVariantComboID, isMain: false, defaultPreselect: false) } @helper RenderProductObjectVariants(string productID, List<Dynamicweb.eCommerce.Variants.VariantGroup> variantGroups, List<Dynamicweb.eCommerce.Variants.VariantCombination> variantCombinations, string variantID, bool isMain = true, bool defaultPreselect = true) { var variantsExists = false; var availableVariantCombinations = new List<string>(); foreach (var variantCombination in variantCombinations) { availableVariantCombinations.Add(variantCombination.VariantID); } if (variantGroups.Count > 0 && availableVariantCombinations.Any()) { //color variant if (variantGroups.Count() == 1) { var otherVariants = new List<ProductVariant>(); var variantgroup = variantGroups.First(); var variantgroupid = variantgroup.ID; var variantgroupname = variantgroup.Name; foreach (var variantoption in variantgroup.VariantOptions) { var variantoptionid = variantoption.ID; if (!availableVariantCombinations.Contains(variantoptionid)) { continue; } var variantoptionname = variantoption.Name; var selected = false; if (defaultPreselect) { selected = false; //variantoption.GetBoolean("Ecom:VariantOption.Selected"); } var existingVariant = otherVariants.FirstOrDefault(v => v.VariantGroupID == variantgroupid); if (existingVariant != null) { existingVariant.VariantOptions.Add(new ProductVariantOption { VariantOptionID = variantoptionid, VariantOptionName = variantoptionname, Selected = selected }); } else { otherVariants.Add(new ProductVariant { VariantGroupID = variantgroupid, VariantGroupName = variantgroupname, VariantOptions = new List<ProductVariantOption> { new ProductVariantOption { VariantOptionID = variantoptionid, VariantOptionName = variantoptionname, Selected = selected } } }); } } foreach (var otherVariant in otherVariants) { variantsExists = true; <div class="variant clearfix"> <select class="other-variant" data-main="@(isMain ? "1" : "0")" data-pageurl="/@Pageview.Area.Item["ProductPage"]&ProductID=@productID"> <option value="-1">@Translate("Choose variant", "Choose variant")</option> @foreach (var variant in otherVariant.VariantOptions) { if (otherVariant.VariantOptions.Count() == 1) { variant.Selected = true; } <option value="@variant.VariantOptionID" @(variant.Selected ? "selected" : "")>@variant.VariantOptionName</option> } </select> </div> } } //size color variant if (variantGroups.Count() == 2) { var availableSizeCombinations = new List<string>(); foreach (var availVariantOption in availableVariantCombinations) { var optionSplit = availVariantOption.Split('.'); if (!availableSizeCombinations.Contains(optionSplit[0])) { availableSizeCombinations.Add(optionSplit[0]); } } var sizeColorVariants = new List<SizeColorVariant>(); var sizeVariantGroup = variantGroups[0]; var colorVariantGroup = variantGroups[1]; foreach (var sizeVariantoption in sizeVariantGroup.VariantOptions) { var sizeVariantOptionId = sizeVariantoption.ID; if (!availableSizeCombinations.Contains(sizeVariantOptionId)) { continue; } var sizeName = sizeVariantoption.Name; var sizeSelected = false; if (defaultPreselect) { sizeSelected = false; //sizeVariantoption.GetBoolean("Ecom:VariantOption.Selected"); } var sizeColorVariant = new SizeColorVariant { VariantID = sizeVariantOptionId, Size = sizeName, Selected = sizeSelected, Colors = new List<ColorVariant>() }; foreach (var colorVariantoption in colorVariantGroup.VariantOptions) { var colorVariantOptionId = colorVariantoption.ID; var availableColorCombinations = availableVariantCombinations.FindAll(v => v.StartsWith(sizeVariantOptionId + ".")) .Select(v => v.Split('.')[1]) .ToList(); if (!availableColorCombinations.Contains(colorVariantOptionId)) { continue; } var colorName = colorVariantoption.Name; var colorSelected = false; if (defaultPreselect) { colorSelected = false; //sizeVariantoption.GetBoolean("Ecom:VariantOption.Selected"); } sizeColorVariant.Colors.Add(new ColorVariant { Color = colorName, VariantID = colorVariantOptionId, Selected = colorSelected }); } sizeColorVariants.Add(sizeColorVariant); } if (sizeColorVariants.Any()) { variantsExists = true; <div class="lingerie-container"> <div class="variant clearfix"> <select class="lingerie-size"> <option value="-1">@Translate("Choose variant", "Choose variant")</option> @for (var i = 0; i < sizeColorVariants.Count; i++) { if (sizeColorVariants.Count == 1) { sizeColorVariants[i].Selected = true; } <option data-value="@(sizeColorVariants[i].VariantID)" value="@i" @(sizeColorVariants[i].Selected ? "selected" : "")>@sizeColorVariants[i].Size</option> } </select> </div> @foreach (var sizeColor in sizeColorVariants) { <div class="variant clearfix"> <select id="lingerieColor-@sizeColorVariants.IndexOf(sizeColor)" class="lingerie-color" data-visible="@(sizeColor.Selected ? 1 : 0)" data-main="@(isMain ? "1" : "0")" data-pageurl="/@Pageview.Area.Item["ProductPage"]&ProductID=@productID"> <option value="-1">@Translate("Choose variant", "Choose variant")</option> @foreach (var color in sizeColor.Colors) { if (sizeColor.Colors.Count() == 1) { color.Selected = true; } <option value="@color.VariantID" @(color.Selected ? "selected" : "")>@color.Color</option> } </select> </div> } </div> } } } if (variantsExists) { <hr /> } } @using System.Web; @using System.Net; @using System.Linq; @using System.Collections.Specialized; @using belugi.core.model; @using Dynamicweb.eCommerce.Products; @{ string image = GetString("Ecom:Product.ImageLarge.Default.Clean"); var grouplink = ""; string productname = ""; var pid = GetValue("Ecom:Product.ID"); var minQuantity = GetInteger("Ecom:Product:Field.antal.Value.Clean"); var productid = GetValue("Ecom:Product.ID"); var groupId = GetValue("Ecom:ProductList:Page.GroupID"); var productUrl = Pageview.Area.Item["ProductPage"]; var longDescription = GetString("Ecom:Product.LongDescription"); int userId = Dynamicweb.Modules.UserManagement.User.GetCurrentUserID(); var productRelatedGroups = CacheClient.Default.GetOrAdd(string.Format("groupCache_{0}", productid), CachePeriod.ForHours(1), () => GetLoop("ProductRelatedGroups")); var productObj = Dynamicweb.eCommerce.Products.Product.GetProductByID(GetString("Ecom:Product.ID")); } @{ var addedSimilarProducts = new List<LoopItem>(); var addedSimilarProductIds = new List<string>(); var allSimiliarProductsFromGroups = productObj.GetAllRelatedProductsFromGroups("Similar"); } @foreach (var group in productRelatedGroups) { if (group.GetValue("Ecom:Product:RelatedGroup.Name").ToString() == "Similar") { addedSimilarProducts = group.GetLoop("RelatedProducts"); foreach (var prod in addedSimilarProducts) { addedSimilarProductIds.Add(prod.GetString("Ecom:Product.ID")); } } } @if (addedSimilarProducts.Count > 0 || allSimiliarProductsFromGroups.Count > 0) { var skip = addedSimilarProducts.Count == 0 && allSimiliarProductsFromGroups.Count == 1 && allSimiliarProductsFromGroups.First().ID == GetString("Ecom:Product.ID"); if (!skip) { var i = 0; <section class="products"> <div class="container"> <div class="headline"> <div class="h1">@Translate("SimilarReplacementProducts", "Similar - replacement products")</div> </div> <div class="owl-carousel"> @foreach (var product in addedSimilarProducts) { i++; if (i > 4) { break; } <div class="item"> @RenderProduct(product) </div> } @foreach (var product in allSimiliarProductsFromGroups) { if (addedSimilarProductIds.Contains(product.ID) || product.ID == GetString("Ecom:Product.ID")) { continue; } i++; if (i > 4) { break; } <div class="item"> @RenderProductObject(product) </div> } </div> </div> </section> } }