Vi bruger cookies for at forbedre brugeroplevelsen

Vent venligst...
Kurven er tom...
Exception in template (Designs\Dwsimple\eCom/Productlist/ProductList.cshtml): System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
   at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   at System.Net.HttpWebRequest.GetRequestStream()
   at CloudinaryDotNet.Api.PrepareRequestContent(HttpWebRequest& request, SortedDictionary`2 parameters, FileDescription file)
   at CloudinaryDotNet.Api.PrepareRequestBody(HttpWebRequest request, HttpMethod method, SortedDictionary`2 parameters, FileDescription file, Dictionary`2 extraHeaders)
   at CloudinaryDotNet.Api.Call(HttpMethod method, String url, SortedDictionary`2 parameters, FileDescription file, Dictionary`2 extraHeaders)
   at CloudinaryDotNet.Api.CallAndParse[T](HttpMethod method, String url, SortedDictionary`2 parameters, FileDescription file, Dictionary`2 extraHeaders)
   at CloudinaryDotNet.Search.Execute()
   at belugi.core.Provider.ImageProvider.ImagesCache(String product)
   at belugi.core.Provider.ImageProvider.<>c__DisplayClass5_0.b__0()
   at System.InMemoryCache.GetOrAdd[T](String key, CachePeriod cachePeriod, Func`1 GetItemsFunc, Boolean isWeb)
   at belugi.core.Provider.ImageProvider.Images(String product)
   at belugi.core.Provider.ImageProvider.MainImage(String product)
   at CompiledRazorTemplates.Dynamic.cdaceafbdadb.<>c__DisplayClassba.b__b9(TextWriter __razor_helper_writer)
   at CompiledRazorTemplates.Dynamic.cdaceafbdadb.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="[email protected]"> @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="#[email protected]"> <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="[email protected]"> @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="[email protected]"> @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"]&[email protected]"> <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"]&[email protected]"> <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="[email protected](sizeColor)" class="lingerie-color" data-visible="@(sizeColor.Selected ? 1 : 0)" data-main="@(isMain ? "1" : "0")" data-pageurl="/@Pageview.Area.Item["ProductPage"]&[email protected]"> <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 belugi.core.model; @using Dynamicweb.eCommerce.Products; @{ var search = GetString("Ecom:Search.SearchBox"); var productsCssClass = !string.IsNullOrEmpty(search) ? "col-sm-9 col-xs-12" : "col-sm-12 col-xs-12"; var paragraph = Pageview.CurrentParagraph; var pageSize = GetString("Ecom:ProductList.PageSize"); var seoText = GetString("Ecom:Group.Description"); var productsClass = "col-md-9 col-xs-12"; var searchHtml = GetString("Ecom:Search.SearchBox"); if (string.IsNullOrEmpty(searchHtml)) { productsClass = "col-md-12"; } var currentGroup = Group.GetGroupByID(GetString("Ecom:Group.ID")); var topGroupId = ""; var backgroundImg = ""; if (currentGroup != null) { backgroundImg = currentGroup.ProductGroupFieldValues.GetProductGroupFieldValue("BackgroundImg").HasValue && !string.IsNullOrWhiteSpace(currentGroup.ProductGroupFieldValues.GetProductGroupFieldValue("BackgroundImg").Value.ToString()) ? ("https://res.cloudinary.com/belugi/t_lib/Files/Images/" + currentGroup.ProductGroupFieldValues.GetProductGroupFieldValue("BackgroundImg").Value) : ""; var topGroup = currentGroup.GetTopGroup(); if (topGroup != null) { topGroupId = topGroup.ID.ToLower(); } } var searchQuery = HttpContext.Current.Request["eComQuery"]; var products = GetLoop("Products"); var manufacturerIdQueryString = HttpContext.Current.Request.QueryString["manufacturerid"]; Dynamicweb.eCommerce.Products.Manufacturer manufacturer = null; var manufacturerLogo = ""; var manufacturerDesc = ""; var manufacturerIdStr = ""; if (!string.IsNullOrEmpty(manufacturerIdQueryString)) { manufacturer = new Dynamicweb.eCommerce.Products.Manufacturer(manufacturerIdQueryString); var allPageParagraphs = Dynamicweb.Content.Paragraph.GetParagraphsByPageID(Convert.ToInt16(GetGlobalValue("Global:Page.ID"))); var manufacturerParagraphs = allPageParagraphs.Where(p => p.ShowParagraph && p.ItemType == "Manufacturer").ToList(); foreach (var manufacturerParagraph in manufacturerParagraphs) { var manufacturerData = Dynamicweb.Content.Items.ItemManager.Storage.GetById(manufacturerParagraph.ItemType, manufacturerParagraph.ItemId); if (manufacturerData == null) { continue; } object manufacturerId = null; manufacturerData.TryGetValue("Manufacturer", ref manufacturerId); if (manufacturerId != null) { manufacturerIdStr = manufacturerId.ToString(); } if (manufacturerIdQueryString == manufacturerIdStr) { object manufacturerLogoObj = null; manufacturerData.TryGetValue("Logo", ref manufacturerLogoObj); if (manufacturerLogoObj != null) { manufacturerLogo = manufacturerLogoObj.ToString(); } object manufacturerDescObj = null; manufacturerData.TryGetValue("Description", ref manufacturerDescObj); if (manufacturerDescObj != null) { manufacturerDesc = manufacturerDescObj.ToString(); } break; } } } if (HttpContext.Current.Request.QueryString["groupid"] != null && HttpContext.Current.Request.QueryString.Count > 2) { var canonicalUrl = HttpContext.Current.Request.RawUrl; canonicalUrl = "https://" + HttpContext.Current.Request.Url.Host + canonicalUrl.Substring(0, canonicalUrl.IndexOf("?")); <[email protected](metatags)--> <link rel="canonical" href="@canonicalUrl"> <[email protected](metatags)--> } var smartSearchParams = new List<string>() { "top10", "new", "bestseller" }; } <div style="display:none;">@HttpContext.Current.Request.Url.AbsoluteUri</div> @if (manufacturer != null && !string.IsNullOrEmpty(manufacturerLogo)) { <section class="text-module text-module-image"> <div class="container"> <img src="@(manufacturerLogo)" alt="@manufacturer.Name" title="@manufacturer.Name" /> </div> </section> } <section class="products [email protected]"> <div class="container"> @if (!string.IsNullOrWhiteSpace(GetString("Ecom:Group.Name"))) { if (string.IsNullOrWhiteSpace(backgroundImg)) { <div class="headline"> <div class="h1">@GetString("Ecom:Group.Name")</div> </div> } else { <div class="header-image" style="background-image:url(@backgroundImg)"> <div class="h1 title">@GetString("Ecom:Group.Name")</div> </div> } } <div class="row"> @if (!string.IsNullOrEmpty(searchHtml)) { var eComQuery = HttpContext.Current.Request.QueryString["eComQuery"]; <div class="col-md-3 col-xs-12"> <form id="EcomSearch" name="EcomSearch" method="get"> <input type="hidden" id="PageSize" name="PageSize" value="@pageSize" /> <input type="hidden" id="SortBy" name="SortBy" value="@HttpContext.Current.Request.QueryString["SortBy"]" /> <input type="hidden" id="SortOrder" name="SortOrder" value="@HttpContext.Current.Request.QueryString["SortOrder"]" /> @foreach(var searchSmartParam in smartSearchParams) { var querySmartSearchParam = HttpContext.Current.Request.QueryString[searchSmartParam]; if (querySmartSearchParam == null || querySmartSearchParam.ToString().ToLower() != "true") { continue; } <input type="hidden" name="@searchSmartParam" value="@querySmartSearchParam" /> } @if (!string.IsNullOrEmpty(eComQuery)) { <input type="hidden" id ="eComQuery" name="eComQuery" value="@eComQuery" /> } @searchHtml </form> </div> } <div class="@productsClass"> <!--filters--> <div class="clearfix"> <div class="sort-module"> <span> <span class="sort-option"> <div class="sort-option-table"> <div> <select id="pagesizeselect"> <option value="15" @(pageSize == "15" ? "selected='selected'" : string.Empty)> 15 </option> <option value="20" @(pageSize == "20" ? "selected='selected'" : string.Empty)> 20 </option> <option value="25" @(pageSize == "25" ? "selected='selected'" : string.Empty)> 25 </option> <option value="50" @(pageSize == "50" ? "selected='selected'" : string.Empty)> 50 </option> <option value="100" @(pageSize == "100" ? "selected='selected'" : string.Empty)> 100 </option> </select> </div> <div> @if (string.IsNullOrEmpty(searchQuery)) { <label>@Translate("Showing page", "Showing page") @GetValue("Ecom:ProductList.CurrentPage") @Translate("of", "of") @GetValue("Ecom:ProductList.TotalPages") (@GetValue("Ecom:ProductList.PageProdCnt") @Translate("products", "products"))</label> } else { <label>@Translate("Your search for", "Your search for") @searchQuery @Translate("returned", "returned") @GetValue("Ecom:ProductList.PageProdCnt") @Translate("results", "results")</label> } </div> </div> <script type="text/javascript"> $(document).ready(function () { $("#pagesizeselect").change(function (e) { $("#PageSize").val($(this).val()); $("#EcomSearch").get(0).submit(); }); }); </script> </span> <span class="sort-option"> <label>@Translate("ProductList.SortBy", "Soreter efter")</label> <select id="sortby"> <option value="" @(HttpContext.Current.Request.QueryString["SortBy"] == "Name" ? "selected='selected'" : string.Empty)> @Translate("Sorting.Default", "Anbefalede") </option> <option value="Price,Asc" @((HttpContext.Current.Request.QueryString["SortBy"] == "Price" && HttpContext.Current.Request["SortOrder"] == "Asc") ? "selected='selected'" : string.Empty)> @Translate("Price low-high", "Price low-high") </option> <option value="Price,Desc" @((HttpContext.Current.Request.QueryString["SortBy"] == "Price" && HttpContext.Current.Request["SortOrder"] == "Desc") ? "selected='selected'" : string.Empty)> @Translate("Price high-low", "Price high-low") </option> </select> <script type="text/javascript"> $(document).ready(function () { $("#sortby").change(function (e) { var sortBy = $(this).val().split(',')[0]; var sortOrder = $(this).val().split(',')[1]; $("#SortBy").val(sortBy); $("#SortOrder").val(sortOrder); $("#EcomSearch").get(0).submit(); }); }); </script> </span> </span> </div> </div> @if (products.Count() == 0) { <div class="text-module"> <div class="box"> <p>@Translate("No products found", "No products found")</p> </div> </div> } <div class="row"> <!--product-list--> <div class="clearfix"> @foreach (var product in products) { //Ecom:Product.VariantID <div class="col-sm-4 col-xs-12"> @RenderProduct(product) </div> } @{ var totalPages = GetInteger("Ecom:ProductList.TotalPages"); var firstPageToDisplay = 1; } @if (totalPages > 1) { var currentPage = GetInteger("Ecom:ProductList.CurrentPage"); int i = firstPageToDisplay; <div class="col-sm-12 col-xs-12"> <div class="pagination-wrap"> <ul class="pagination"> @if (!string.IsNullOrWhiteSpace(GetString("Ecom:ProductList.PrevPage.Clean"))) { var firstPage = HttpContext.Current.Request.RawUrl; if (firstPage.Contains("?PageNum")) { var j = firstPage.IndexOf("?PageNum"); var partAfterPageNum = ""; if (firstPage.Substring(j).IndexOf("&") > -1) { partAfterPageNum = firstPage.Substring(j).Substring(firstPage.Substring(j).IndexOf("&")); } firstPage = firstPage.Substring(0, j) + "?PageNum=" + firstPageToDisplay + partAfterPageNum; } else if (firstPage.Contains("&PageNum")) { var j = firstPage.IndexOf("&PageNum"); var partAfterPageNum = ""; if (firstPage.Substring(j).IndexOf("&") > -1) { partAfterPageNum = firstPage.Substring(j).Substring(firstPage.Substring(j).IndexOf("&")); } firstPage = firstPage.Substring(0, j) + "&PageNum=" + firstPageToDisplay + partAfterPageNum; } else if (firstPage.Contains("?")) { firstPage += "&PageNum=" + firstPageToDisplay; } else { firstPage += "?PageNum=" + firstPageToDisplay; } <li> <a href="@firstPage"> &laquo; <span aria-hidden="true">@Translate("ProductList.FirstPage", "Første")</span> </a> </li> <li> <a href="@GetString("Ecom:ProductList.PrevPage.Clean")"> &lsaquo; <span aria-hidden="true">@Translate("ProductList.PreviousPage", "Forrige")</span> </a> </li> } @foreach (LoopItem page in GetLoop("Ecom:ProductList.Pages")) { var cssClass = currentPage == page.GetInteger("Ecom:ProductList.Pages.Page.Number") ? "active" : string.Empty; var showPage = false; var index = 2; if (currentPage == firstPageToDisplay || currentPage == totalPages) { index = 4; } else if (currentPage == firstPageToDisplay + 1 || currentPage == totalPages - 1) { index = 3; } if (currentPage + index >= i && i >= currentPage - index) { showPage = true; } if (showPage) { <li class="@cssClass"> <a href="@page.GetString("Ecom:ProductList.Pages.Page.Url")"> @i </a> </li> } i++; } @if (!string.IsNullOrWhiteSpace(GetString("Ecom:ProductList.NextPage.Clean"))) { var lastPage = HttpContext.Current.Request.RawUrl; if (lastPage.Contains("?PageNum")) { var j = lastPage.IndexOf("?PageNum"); var partAfterPageNum = ""; if (lastPage.Substring(j).IndexOf("&") > -1) { partAfterPageNum = lastPage.Substring(j).Substring(lastPage.Substring(j).IndexOf("&")); } lastPage = lastPage.Substring(0, j) + "?PageNum=" + totalPages + partAfterPageNum; } else if (lastPage.Contains("&PageNum")) { var j = lastPage.IndexOf("&PageNum"); var partAfterPageNum = ""; if (lastPage.Substring(j).IndexOf("&") > -1) { partAfterPageNum = lastPage.Substring(j).Substring(lastPage.Substring(j).IndexOf("&")); } lastPage = lastPage.Substring(0, j) + "&PageNum=" + totalPages + partAfterPageNum; } else if(lastPage.Contains("?")) { lastPage += "&PageNum=" + totalPages; } else { lastPage += "?PageNum=" + totalPages; } <li> <a href="@GetString("Ecom:ProductList.NextPage.Clean")"> <span aria-hidden="true">@Translate("ProductList.NextPage", "Næste")</span> &rsaquo; </a> </li> <li> <a href="@lastPage"> <span aria-hidden="true">@Translate("ProductList.LastPage", "Sidste")</span> &raquo; </a> </li> } </ul> </div> </div> } </div> </div> </div> </div> </div> </section> @if (manufacturer != null && !string.IsNullOrEmpty(manufacturer.Description)) { <section class="text-module"> <div class="container"> <div class="box"> @manufacturer.Description </div> </div> </section> } @if (!string.IsNullOrEmpty(manufacturerDesc)) { <section class="text-module"> <div class="container"> <div class="box"> @manufacturerDesc </div> </div> </section> }

Brystvorte stimulering

Brystvorterne er for mange, en meget erogen zone, og det kan være utrolig pirrende at der bliver leget med dem. Enten med en hånd, en fod, en fjer, en isterning eller med sexlegetøj, i form af en brystevorte stimulator. Brystvorte stimulatorer kommer i 2 versioner. Brystvorte stimulatorer i form af brystvorteklemmer eller brystvortestimulator i form af en brystvortepumpe. Men en brystvortestimulator kan også være en dildo, en satisfyer eller andet, som du kan lege med, på eller rundt om dine brystvorter. Og husk, at både mænd og kvinder har en erogen zone på deres brystvorter, og derfor kan en brystvorte stimulator bruges af begge køn. 

Brystvortestimulator - Brystvorteklemmer

Brystvorte klemmer er udformet som en tøjklemme, hvor man klemmer sammen i den ene ende, så den anden ende åbner sig. Den ende, der åbner sig, sættes på brystvorten. Det er derfor nemt at regne ud, at den ende, der klemmer om brystvorten bør kunne indstilles til at klemme hårdt eller blødt - eller noget derimellem. Næsten alle brystvortestimulatorer i form af klemmer kan indstillet til at klemme blødt, mellem eller hårdt på dine brystvorter. Disse brystvortestimulatorer kan også indstilles undervejs, enten i forspillet eller under samleje.

Brystvortestimlatorer - Brystvortepumper

En anden form for brystvortestimulatorer er brystvortepumper eller brystpumper. Disse fungerer ved, at man placerer en ene ende ned over brystet og ved at pumpe i den anden ende, opstår der vakum, og brystvorten stimuleres. Denne form for brystvortestimulering er fantastisk lækker og man kommer ikke i kontakt med selve brystvorten, da det er alene er vakkummet, der stimulerer.

Brystvortestimulaterer til alle

Ja - som før nævnt, kan både mænd og kvinder benytte en brystvortestimulator. Alder har heller ikke nogen betydning for brug af en brystvorte stimulator. Vi ønsker jer derfor allesammen god fornøjelse med jeres brystvortestimulator. Belugi har helt sikkert også den perfekte brystvortestimulator til dig - men måske skal du prøve dig lidt frem!