Vi bruker cookies for å forbedre brukeropplevelsen

Vennligst vent...
Handlekurven 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.ffaecabedfded.<>c__DisplayClassba.b__b9(TextWriter __razor_helper_writer)
   at CompiledRazorTemplates.Dynamic.ffaecabedfded.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> }

Penisring eller Penis ring

En Penisring er lite stykke tilbehør med meget stor effekt

Penisringer kommer i et utall av utforminger og materialer. Penisringen trekkes ned over din penis, helt ned til roten når din penis er erigert (stiv). Når en erigert penis blir slapp igjen er det fordi blodet renner vekk fra den. Blodet renner i noen små blodårer ytterst på penisens skaft. Hvis du holder fast om penisroten med hånden eller monterer en penisring som lett strammer til, kan blodet ikke renne tilbake, og du kan beholde din ereksjon i lengre tid. Du behøver ikke å ha problemer med din ereksjon, for å prøve en penisring. En penisring kan også bare gjøre at pikken blir hardere enn vanlig, eller gir deg og kanskje din partner en ny følelse.

Penisringer fås som helt enkle ringer i gummi, silikon eller bløte jelly-materialer, men det er også mange modeller som kan litt ekstra. Noen kan vibrere, så både du og din partner får glede av den deilige stimuleringen når dere elsker. Det er også penisringer som er utformet så de kan gi en kvinnelig partner stor nytelse på klitoris, når hun nyter din erigerte penis innvendig.

Det er penisringer som også monteres ned omkring pungen, så den kan stimulere pungen, perineum eller anus.

Ved bruk av en penisring skal du være oppmerksom på at den ikke må sitte for stramt, og ikke må sitte for lenge. De fleste produsenter anbefaler, at en penisring maksimalt må brukes i 20 minutter av gangen - men det er under alle omstendigheter en god idé å holde øye med om ’King Kong’ ser glad og tilfreds ut underveis. Og at det føles behagelig.

Tre forskjellige typer penisringer - med og uten vibrasjon

Penisringer fås i 3 forskjellige typer. Den klassiske penisring, uten vibrasjon. Denne rulles ned over penis, ned til penisroten og forhindrer blodet i å renne tilbake. Disse er typisk meget elastiske og består av en elastisk ring som er laget i en eller annen form for gummi - eller jelly materiale. Vær oppmerksom på at jo mere du trener med en penisring desto strammere ønsker du din klassiske penisring, da den i høyere grad forhindrer blodet i å renne tilbake og øker styrken i ereksjonen. En klassisk penisring uten vibrasjon kan også anvendes som en begynner penisring, men brukes også av øvede og meget øvede.

Så er det den klassiske penisring med vibrator. Den fungerer på samme måte som den klassiske penisring uten vibrator. Men her er det normalt påsatt en bullet eller også er det innebygget en vibrator i penisringen. Vibratoren har til formål å stimulere kvinnens klitoris under samleiet samtidig med at du blir stimulert av vibrasjonene.

Tredje type penisring kan både være med og uten vibrasjon. Den settes omkring penis som en normal penisring. Men utover det settes den også omkring testiklene. Det kan også være påsatt en dildo som føres inn under perineum og inn i anus - altså som en anal dildo eller buttplug.

Klassisk penisring – guide

Når din penis er erigert (stiv) føres ringen ned over penis og helt ned til penisroten. Du kan også gjøre det i slapp tilstand, men det er lettest i stiv tilstand da du dermed også kan kjenne om penisringen passer til deg. Du kan smøre din penis inn i vannbasert glidekrem så penisringen glir lettere ned over penis. Deretter har du sex med din partner eller onanerer som du pleier.

Klassisk penisring med vibrator- guide

Den klassiske penisring med vibrator settes på penis akkurat som den klassiske penisring uten vibrator. Når penisringen med vibratoren sitter helt nede ved roten og føles behagelig, slår du på vibratoren. Vibratoren stilles inn til den styrke og evt. vibrasjonsmønster som du finner behagelig. Deretter trenger du inn i din partner og hun vil elske å merke vibrasjonene på sin klitoris når du trenger helt i bunn. Bli helt inne i henne og beveg underlivet litt i sirkler så vibratoren føres rundt omkring på hendes klitoris. Hvis du bruker din penisring med vibrator til å onanere, skal du bare slå på vibratoren på penisringen når den sitter behagelig. Deretter kan du onanere med din penisring med vibrator som du pleier. Skift mellom de forskjellige styrkene og eventuelle vibrasjonsmønstre for å se om du kan holde litt lengre og oppnå kjempenytelse.

Penisring med ring til testiklene eller med anal stimulering - guide

Du skal starte med å føre penisringen ned over din penis akkurat som en klassisk penisring. Når penisringen sitter behagelig tar du fatt i ringen til testiklene og fører denne ring rundt om din pung. Normalt utvider man ringen til pungen temmelig mye så det ikke gjør vondt å føre ringen rundt om pungen. Hvis penisringen har en anal stimulator skal penisringen også først påføres som en klassisk penisring - altså ned over penis i erigert tilstand - helt ned til penisroten. Deretter plasserer du anal dildoen eller buttplugen i anus. Husk å bruke rikelig med glidekrem til analdildoen eller buttpluggen. Hvis det er første gang at du skal stifte bekjentskap med anal stimulering vil vi anbefale at du leser vår guide til anal stimulering.

Hvilken modell av penisring passer til deg?

Der fins mange forskjellige penisringer som du kan velge imellom. De små og stramme og de store og elastiske. Og hvilken modell skal du velge?

Alle penisringer er fleksible så de kan utvides en del, men hvis den fra starten er for stor skal du velge en mindre penisring. Men du blir nødt til å prøve deg litt frem så du kan kjenne hva som føles best for deg. Start eventuelt med å kjøpe et sett av penisringer.

En penisring må aldri sitte så stramt at det føles ubehagelig - så skal du velge en penisring som er større.  Den helt rette penisringen gir deg en større penis og du kan simpelthen holde lengre hvis det er det du ønsker. Din partner vil typisk også merke at din penis er større under samleiet enn den pleier å være.

Så svaret er på "hvilken penisring du skal velge": Du skal prøve deg frem. Den må ikke være for stram og den må ikke være for løs. Når du har funnet den rette størrelsen kan du og din partner kjenne at din penis er større og du kan holde lengre samtidig med at det føles behagelig å elske eller onanere med penisringen.

Penisringen - hvor lenge må den stramme om penis?

En penisring må som hovedregel ikke sitte lengre enn 20 minutter. Deretter vil vi anbefale at dere tar en pause på 5 minutter, så penis kan bli kvitt det overskytende blodet, få en normal blodgjennomstrømning og så kan dere påføre penisringen igjen. Det må bare sies at de fleste mennesker kan ha deres penisring på i lengre tid. Men det avhenger også av hvor mye penisringen strammer om penis da en meget stram penisring bør sitte i kortere tid. Hvis det på noen måte føles ubehagelig, bør du øyeblikkelig ta din penisring av og la blodet strømme tilbake fra din penis.

Hvilke Penisring anbefaler Belugi?

Hos Belugi finner du et kjempeutvalg av penisringer. Men vi er spesielt stolte over vårt store utvalg av Fantasy c-ringz, der du ganske enkelt finner alle typer penisringer i en fantastisk kvalitet og til en meget overkommelig pris. Utover det anbefaler vi penisringer fra Colt, LELO, Ouch! og Rocks Off.