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.eeaafbfaaafdf.<>c__DisplayClassba.b__b9(TextWriter __razor_helper_writer)
   at CompiledRazorTemplates.Dynamic.eeaafbfaaafdf.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> }

Fisting

Inom extrem sex finns det tekniker som många aldrig kommer att bekanta sig med och det är synd, för det är ofta när du går in i de mer tabubelagda ämnena som du tycker är de styggaste sexupplevelserna. Detta är också väldigt mycket fallet när det gäller fisting.

Gillar du att få ett finger upp i slidan eller anus, så kommer du definitivt också att kunna njuta av att få upp alla fingrarna. Det kan kännas bra. Riktigt riktigt bra. Belugi har allt du behöver för att komma igång fisting och därför kan du säkert gå på jakt i vårt urval av smörjmedel, som alla har sina fördelar. Gemensamt för alla våra smörjmedel för Fisting är att de kommer i en burk med en diameter på 10,2 m. Så att du kan få hela din hand i burken på en gång. Smörjmedel är ett måste när det gäller fisting. Alla våra smörjmedel är tillverkade av det holländska företaget Shots och utvecklat av Pharmaquest, men först och främst, låt oss titta närmare på vad fisting egentligen är.

Vad är fisting?

Om du gillar att få ett finger eller två uppåt är det höga sannolikhet att du kommer att älska fisting, för det är i grund och botten lite mer extrem fingerkön. Det är en form av sex som inte exakt tillhör mycket i romantiska filmer eller i sexutbildning. Om du vågar söka på Google är det en stor chans att du hittar mycket porr. Men i själva verket finns det mycket mer förekomst än man tror, ​​även bland de av oss som inte odlar de mer hardcore formerna av sex. Många danskar tränar fisting och de tycker om det. Det finns två typer av fisting som vi behöver titta närmare på nedan. Vaginal fisting och anal fisting. 

Vaginal fisting 

På många sätt är de uppenbara vad vaginal fisting är, men vi vill fortfarande bara klippa ut det från kartong så att ingen är i tvivel. Vaginal fisting är en sexteknik där du tränger in i din partners vagina med hela handen eller till och med en knuten näve. Det kallas också hardballing, fist jävla, handsex och mycket mer, men är främst känt under fisting i detta land.

För att odla vaginal fisting på ett bra och säkert sätt måste du naturligtvis se till att mycket smörjmedel används och mycket förspel är också en riktigt bra idé. När du är redo kan du börja försiktigt med några fingrar, varefter du tyst introducerar mer. När den mottagande parten slappnar av och lossnar i buken kommer du att kunna sätta in hela handen, vilket kan ge en helt fantastisk känsla. Givaren gör långsamma stötande rörelser med handen så att hela vagina stimuleras och du kan få en helt vild orgasm.

Fisting kombineras ofta med klitorisstimulering antingen av flickan själv eller av partnern. Även om du kan göra en knuten näve är det mycket bekvämare om du gör ett slags spjutspets med handen. Belugi specialiserar sig på bra smörjmedel som kan göra upplevelsen bättre för båda parter. Se själv vårt urval från Shots och deras serie Fist It. Det finns något för alla och du kan vara säker på att fisting blir mycket roligare på det sättet. Vad som gör vaginal fisting till något mycket speciellt är den unika känslan av att vara fylld. Det är en känsla som man sällan upplever på allvar med en penis eller till och med en dildo. En stor hand är bara den styggaste och om du gillar stygg sex, lura inte dig själv för att prova fisting.

Anal fisting

Det säger sig självt att om du kan sticka upp något i slidan tar det inte lång tid innan någon bestämmer sig för att sticka upp det också i anusen. Så när en klok person en gång för länge sedan stack hela handen upp i sin partners vagina, var det bara en tidsfråga innan någon stack en hand upp i skinkorna på honom. Det kan låta lite extremt och det är inte för alla, men för dem som är modiga nog kan det vara otroligt styggt att vara fisted anal. Speciellt om du kommer ihåg att använda mycket smörjmedel. Här på Belugi rekommenderar vi t.ex. att du använder Fist It Anal relaxer eller Fist It Numbing. Båda dessa krämer är utmärkta för analfisting, så du kan välja fritt.

Som med vaginal fisting görs anal fisting genom att givaren gör ett slags tips med fingrarna. På engelska kallas detta populärt "duck-billing" eller "The Silent Duck", eftersom handen kan se ut som en anka näbb. Sätt sedan fingrarna mycket noga i anusen. Knogar, handflata och tumme bör också inkluderas. Så småningom är hela handen uppe och man kan försiktigt börja stöta lätt. Om du är lite hardcore kan du faktiskt också bilda en knytnäve nu när allt är introducerat. Det är symbolen för analfisting och om man kan göra det rätt är det otroligt styggt.

Om det behöver vara mer extremt, kan du gå till arbetet mer våldsamt och dra din hand in och ut. Eller så kallad punch-fisting, som förmodligen knappast kräver en djupare förklaring. Du kan prova och hitta vad du föredrar. Kom bara ihåg att smörjmedel är en absolut nödvändighet, så hitta din Fist It-kräm.

Hur känner fisting?

Nu när vi har förtydligat vad fisting är bör vi förmodligen också titta närmare på hur det faktiskt känns. För det kan nog låta väldigt extremt för någon. Men för andra är det utan jämförelse det styggaste i världen. Hur som helst blir det bara bättre med rätt smör, så kom ihåg att beväpna dig med en av de många bra krämerna från Shots.

Den som får knytnäve kommer först och främst att uppleva en känsla av att vara fylld och sträckt. Det kan vara enormt spännande att uppleva detta, men när du vänjer dig vid det och slappnar av kommer du att uppleva en känsla som bäst kan beskrivas som en mer intensiv version av g-punktstimulans. Eftersom man blir fylld stimuleras alla nerver i slidan eller anusen på en gång och detta kan leda till några mycket intensiva och djupa orgasmer. Dessutom hela spelet om makten, där du skickar in och låter dig ta dig. Det kan jämföras med att använda en strap-on, bara fisting är mycket mer intimt och närvarande.

För de som knytnäve blir det en mycket speciell upplevelse, eftersom du inte bara upplever den underbara känslan utan också kommer att känna kontrollen. Detta har inneburit att fisting bl.a. har blivit mycket populärt bland transpersoner som inte har en biologisk penis. Med fisting kan de fortfarande uppleva att vara "inuti sina partners" och oavsett kön är det extremt styggt att känna hur sin partners kropp sträcker sig för att ta emot. Man måste vara ganska mycket på våglängden för att göra det ordentligt, men om man först uppnår det blir fisting en helt fantastisk upplevelse som man inte ska fuska sig med.

Hur kommer man igång med fisting?

Om du sitter och känner dig lite nyfiken är du inte ensam, för tusentals danskar övar fisting och du kan vara säker på att allt har börjat med lite nyfikenhet. Men som med så många andra typer av sex, måste du vara försiktig när du kastar dig i fisting, oavsett om det är vaginal eller anal. Det är trotsigt en mycket stor sak som behöver tränga igenom och därför kan man inte bara gå rakt på och hårt.

Men om du kan börja försiktigt och gå långsamt till jobbet, kan du mycket snart bli engagerad i den styggaste fistingen, vilket ger er båda några helt unika känslor. Det är otroligt styggt att odla fisting och det blir bara ännu bättre om du gör det rätt. Så nedan kan du läsa våra råd för den bästa starten på ditt nya fistingäventyr.

Börja försiktigt och var uppmärksam

Först och främst är det viktigt att du som fisting ser till att du har kontroll över dina naglar. Så bör du börja med att ge dig själv en liten manikyr, där du ser till att det inte finns några långa, skarpa naglar som potentiellt kan repa och skala, vilket är ett stenhårt sätt att förstöra det goda humöret. Ingen vill få sår i slidan eller anus. Men vad gör du om du inte vill förstöra dina vackra långa naglar? Ja, du använder bomullsull och latexhandskar. På så sätt kan du skydda din partner från tårar och sår i buken.

Därefter är det viktigt för en bra fistingsession att man använder smörjmedel och mycket av det. När du tror att du har tagit tillräckligt med grädde, ta dubbelt så mycket, bara för att vara på den säkra sidan. Lyckligtvis kan du göra det lätt för dig själv genom att använda Fist It-krämer från Shots, eftersom de kommer i en smart förpackning som du bara kan sticka hela näven i. Så du behöver inte smörja runt med ett rör. Du tar bara bort locket innan du börjar, och sedan kan du sticka hela klo-fem i behållaren och vara redo för åtgärder. Det blir inte lättare och det är en otroligt praktisk lösning om önskan uppstår spontant. Om du använder smörjmedel som kan göra slidan eller anusen bedövad, måste du vara försiktig, eftersom du riskerar att spela för hårt utan att märka det. Så odla alltid fisting med omsorg och kommunicera med din partner på vägen.

Se till att ni båda är på rätt humör så att upplevelsen alls blir så bra som möjligt. Kommunicera och se till att ni båda är på ett bra ställe. Börja inte med hela handen utan stimulera istället din partner med ett finger i taget. När han / hon lossnar kan du använda fler fingrar tills du försiktigt kan sätta in hela handen.

Dra nytta av formen på dina knogar när du fistar din partner. Låt dem stimulera hennes g-punkt, vilket kan göra upplevelsen ännu bättre och ge några mycket djupa orgasmer. Detsamma gäller om du knullar en manlig anal anal, för då kan du med fördel stimulera hans prostata. Det är inte utan anledning att det kallas den manliga g-punkten.

Avsluta på ett ordentligt sätt

När du är klar, lyft inte bara handen mot dig, eftersom det kan skada slidan eller anusen. Be din partner att andas djupt och andas långsamt så att musklerna slappnar av och du kan dra dig ut på ett skonsamt och säkert sätt.

Då får du inte glömma eftervård. Det är inte bara ett fysiskt krävande spel utan i den mån också mentalt krävande. Fisting är fortfarande tabu i många kretsar och därför kan båda parter vara mentalt sårbara och i behov av kärleksfull vård. Se till att dricka vatten, håll varandra och prata om upplevelsen. Eftervård kan hjälpa er att ge er båda ett mycket bättre slut på en fistingtid, så du får inte hoppa över det här steget.

Få ut mesta möjliga av fisting med Belugi

Om du sitter där och drömmer om fisting, har du lyckligtvis kommit till rätt ställe, för Belugi har allt du kan önska dig i sexleksaker och ännu viktigare smör. Eftersom grädde är så viktigt har vi naturligtvis sett till att alliera oss med en av de bästa tillverkarna av smörjmedel för näve i världen. Shots är experter när det gäller att producera förstklassiga smörjmedel och därför kan du med fördel välja en av de många olika Shots fisting krämerna som vi bär här på Belugi.

Om du tränar anal fisting finns det några krämer som du kommer att dra nytta av. Fist it Numbing, tar bort mycket av smärtan vid anal fisting. Anal Relaxer gör att musklerna runt anusen slappnar av så att du lättare kan tränga igenom. Naturligtvis kan du också använda andra av Shots Fist It-krämer för analfisting, men de förstnämnda ger bäst resultat.

För vaginal fisting kan du få mycket glädje av bra krämer som Extra Thick, som är en mycket tjock kräm som gör upplevelsen mildare och trevligare för mottagaren. Sperm är en Fist It-kräm som är vattenbaserad och ser ut som riktig sperma, vilket kan göra spelet ännu mer styggt och pirrande. Om du vill leka med näve i badet rekommenderar vi att du använder Submerge, som behåller sin smörjförmåga även under vatten. Strawberry är lite stygg av en smörj som smakar mycket av jordgubbar och är ett perfekt val om du vill kombinera fisting med lite oralsex. Om det ser riktigt bra ut medan du spelar kan du välja Fist It Gold, som innehåller ett guldfärgat pigment som ser riktigt styggt ut. Slutligen finns det CBD, som som namnet antyder innehåller CBD, vilket kan hjälpa till att läka mindre skador på vägen och då är det i allmänhet mycket bra för huden.

Som du kan se finns det något för alla med Fist It från Shots och därför kan du knappast hitta något bättre märke när det gäller fisting glidmedel. Belugi har naturligtvis sett till att ha massor av dessa bra krämer i lager, så att du alltid kan få exakt vad du vill. Så om du vill prova på fisting eller om du är erfaren, är Belugi det perfekta stället att hitta allt du behöver för att göra upplevelsen så bra som möjligt.