Vi använder cookies för att förbättra användarupplevelsen

Vänta
Varukorgen är 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.dfbdabcbadd.<>c__DisplayClassba.b__b9(TextWriter __razor_helper_writer)
   at CompiledRazorTemplates.Dynamic.dfbdabcbadd.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 /> } } @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("?")); <!--@SnippetStart(metatags)--> <link rel="canonical" href="@canonicalUrl"> <!--@SnippetEnd(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 products-@topGroupId"> <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> }

Intim rakning och tillbehör

Om du inte bryr dig för mycket hår på kroppen finns det många olika metoder för att ta bort håret. På en skönhetsklinik kan de göra det effektivt, men en är dyr, och det kan också vara lite gränsöverskridande, särskilt om det är intima platser som måste utsättas för en främling.

Det finns gott om möjlighet att göra det hemma eller kanske med hjälp av din partner. Det kan till och med vara en del av förspel eller sexuell lek, att ta bort hår på varandra.

Intim rakning för alla

Det finns många olika metoder, var och en med dess fördelar och nackdelar. Du kan välja att raka dig med en skrapa eller en liten rakkniv. Fördelen här är att den är snabb och smärtfri och kan göras som en daglig rutin. Du kan också använda vax eller en epilator om håret ska rivas upp med roten. Det tar längre tid och kan vara lite smärtsamt, men huden förblir slät och hårfri längre. De nya hårstrån som växer ut börjar som ner, eftersom det är helt nya hårstrån. Därför kommer du inte att uppleva stickande stubbar som en vanlig rakning kan ge.

Å andra sidan, om du använder en trimmer, kan du göra fantastiska intima frisyrer som du kan överraska din partner med nästa gång du har intima möten. Här kan du till exempel. Använd en mall för att raka dig bort eller så kan du göra det "frihand". Försök - det är trevligt att älska sina intima delar.

Efter rakning, använt vax eller epilator rekommenderar vi starkt att du smörjer med en gel eller olja för att undvika röda knoppar. Röda knoppar är inte snygga och kan orsaka lätt klåda.

Hos Belugi har vi produkter för olika typer av hårborttagning. Du kan köpa det du vet eller så kan du välja att prova något nytt.