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.affaccdffcb.<>c__DisplayClassba.b__b9(TextWriter __razor_helper_writer)
at CompiledRazorTemplates.Dynamic.affaccdffcb.Execute()
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context)
at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName)
at Dynamicweb.Rendering.Template.Output()
@helper RenderProduct(dynamic product)
{
var id = product.GetString("Ecom:Product.ID");
var domain = System.Web.HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);
var Image = belugi.core.Provider.ImageProvider.MainImage(product.GetString("Ecom:Product.Number"));
string showStock = HttpContext.Current.Request["showStock"];
bool showStockState = true;
if (!string.IsNullOrEmpty(showStock))
{
showStockState = true;
}
var Name = product.GetString("Ecom:Product.Name");
var Description = product.GetString("Ecom:Product.ShortDescription");
var Discount = product.GetString("Ecom:Product.Discount.Price");
var Price = product.GetString("Ecom:Product.Price");
var Fullprice = product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Currency.Code"));
var url = Pageview.Area.Item["ProductPage"] + "?ProductId=" + id;
var cssClass = "";
<figure class="ex @(product.GetInteger("Ecom:Product.Stock") <= 0 ? "disabled" : "")">
@if (product.GetString("Ecom:Product:Field.bestseller") == "True")
{
DateTime date;
if (DateTime.TryParseExact(product.GetString("Ecom:Product:Field.bestsellerdate"), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date))
{
if (date.Date >= DateTime.Now.Date)
{
<div class="strip strip-red"><span>@Translate("Product.Bestseller", "Bestseller")</span></div>
}
}
}
@if (product.GetString("Ecom:Product:Field.new") == "True")
{
DateTime date;
if (DateTime.TryParseExact(product.GetString("Ecom:Product:Field.newdate"), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date))
{
if (date.Date >= DateTime.Now.Date)
{
<div class="strip strip-red"><span>@Translate("Product.New", "Nyhed")</span></div>
}
}
}
@if (product.GetString("Ecom:Product:Field.offer") == "True")
{
DateTime date;
if (DateTime.TryParseExact(product.GetString("Ecom:Product:Field.offerdate"), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date))
{
if (date.Date >= DateTime.Now.Date)
{
<div class="strip strip-green"><span>@Translate("Product.Offer", "Tilbud")</span></div>
}
}
}
@if (product.GetString("Ecom:Product:Field.top10") == "True")
{
DateTime date;
if (DateTime.TryParseExact(product.GetString("Ecom:Product:Field.top10date"), "dd-MM-yyyy", null, System.Globalization.DateTimeStyles.None, out date))
{
if (date.Date >= DateTime.Now.Date)
{
<div class="strip strip-black"><span>@Translate("Product.Top10", "Top 10")</span></div>
}
}
}
<div class="image" style="background-image:url('@Image')">
<a href="@url"></a>
</div>
<div class="title"><a href="@url">@Name</a></div>
@if (product.GetInteger("Ecom:Product.Stock") <= 0)
{
var deliveryText = "";
if (!string.IsNullOrEmpty(GetString("Ecom:Product:Stock.DeliveryText")))
{
deliveryText = " (" + GetString("Ecom:Product:Stock.DeliveryText") + " " + Translate(GetString("Ecom:Product:Stock.DeliveryUnit"), GetString("Ecom:Product:Stock.DeliveryUnit")) + ")";
}
<div class="price @(!string.IsNullOrWhiteSpace(Fullprice) ? "price-discount" : "")">
<div class="@cssClass btn btn-black btn-block">
@if (!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.GetString("Ecom:Product.PriceWithVAT"))
{
if (product.GetString("Ecom:Product.Price.Currency.Code") == "EUR")
{
<small>@product.GetString("Ecom:Product.Price.Currency.Symbol") @string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code"))))</small>
}
else
{
<small>@string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code")))) @product.GetString("Ecom:Product.Currency.Symbol")</small>
}
}
@Price
@if (product.GetInteger("Ecom:Product.VariantCount") <= 0)
{
<span class="ico-disabled" style="background-image:url(@product.GetString("Ecom:Product:Stock.Image.Clean"))" data-toggle="tooltip" data-placement="left" title="@Translate(product.GetString("Ecom:Product:Stock.Text"), product.GetString("Ecom:Product:Stock.Text"))@deliveryText"></span> }
else
{
<div class="mfp-hide main-popup" id="[email protected]">
@RenderProductVariants(product)
<form method="post" action="/Default.aspx">
@product.GetValue("Ecom:Product.Form.Clean")
<a class="add-variant-to-cart btn btn-black btn-block btn-big" data-isdetail="0">
@Translate("Add to cart", "Add to cart")
<i class="fa fa-cart-plus"></i>
</a>
</form>
</div>
}
</div>
</div>
}
else if (product.GetInteger("Ecom:Product.VariantCount") > 0)
{
<div class="price open-popup @(!string.IsNullOrWhiteSpace(Fullprice) ? "price-discount" : "")" data-product-id="@id" data-mfp-src="#[email protected]">
<a>
@if (!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.GetString("Ecom:Product.PriceWithVAT"))
{
if (product.GetString("Ecom:Product.Price.Currency.Code") == "EUR")
{
<small>@product.GetString("Ecom:Product.Price.Currency.Symbol") @string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code"))))</small>
}
else
{
<small>@string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code")))) @product.GetString("Ecom:Product.Currency.Symbol")</small>
}
}
@Price
</a>
</div>
<div class="mfp-hide main-popup" id="[email protected]">
@RenderProductVariants(product)
<form method="post" action="/Default.aspx">
@product.GetValue("Ecom:Product.Form.Clean")
<a class="add-variant-to-cart btn btn-black btn-block btn-big" data-isdetail="0">
@Translate("Add to cart", "Add to cart")
<i class="fa fa-cart-plus"></i>
</a>
</form>
</div>
}
else
{
<div class="price @(!string.IsNullOrWhiteSpace(Fullprice) ? "price-discount" : "")" data-product-id="@id">
<form method="post" action="/Default.aspx">
@product.GetValue("Ecom:Product.Form.Clean")
<button type="button" class="@cssClass add-variant-to-cart btn btn-black btn-block" data-isdetail="1">
@if (!string.IsNullOrWhiteSpace(Fullprice) && Fullprice != product.GetString("Ecom:Product.PriceWithVAT"))
{
if (product.GetString("Ecom:Product.Price.Currency.Code") == "EUR")
{
<small>@product.GetString("Ecom:Product.Price.Currency.Symbol") @string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code"))))</small>
}
else
{
<small>@string.Format("{0:0,0.00}", double.Parse(product.GetString("Ecom:Product:Field.fullprice" + product.GetString("Ecom:Product.Price.Currency.Code")))) @product.GetString("Ecom:Product.Currency.Symbol")</small>
}
}
@Price
</button>
</form>
</div>
<div class="mfp-hide main-popup" id="[email protected]">
@RenderProductVariants(product)
<form method="post" action="Default.aspx">
@product.GetValue("Ecom:Product.Form.Clean")
<a class="add-variant-to-cart btn btn-black btn-block btn-big">
@Translate("Add to cart", "Add to cart")
<i class="fa fa-cart-plus"></i>
</a>
</form>
</div>
}
</figure>
}
@helper RenderProductVariants(dynamic product)
{
var variantGroups = product.GetLoop("VariantGroups");
var variantCombinations = product.GetLoop("VariantCombinations");
var selectedVariantComboID = product.GetString("Ecom:Product.SelectedVariantComboID");
@RenderProductVariants(product.GetString("Ecom:Product.ID"), variantGroups, variantCombinations, selectedVariantComboID, isMain: false, defaultPreselect: false)
}
@helper RenderProductVariants()
{
var variantGroups = GetLoop("VariantGroups");
var variantCombinations = GetLoop("VariantCombinations");
var selectedVariantComboID = GetString("Ecom:Product.SelectedVariantComboID");
var defaultPreselect = false;
if (System.Web.HttpContext.Current.Request.RawUrl.Contains("=VO"))
{
defaultPreselect = true;
}
@RenderProductVariants(GetString("Ecom:Product.ID"), variantGroups, variantCombinations, selectedVariantComboID, true, defaultPreselect)
}
@helper RenderProductVariants(string productID, List<LoopItem> variantGroups, List<LoopItem> variantCombinations, string variantID, bool isMain = true, bool defaultPreselect = true)
{
var variantsExists = false;
var availableVariantCombinations = new List<string>();
foreach (LoopItem variantCombination in variantCombinations)
{
availableVariantCombinations.Add(variantCombination.GetString("Ecom:VariantCombination.VariantID"));
}
if (variantGroups.Count() > 0 && availableVariantCombinations.Any())
{
//color variant
if (variantGroups.Count() == 1)
{
var otherVariants = new List<ProductVariant>();
var variantgroup = variantGroups.First();
var variantgroupid = variantgroup.GetString("Ecom:VariantGroup.ID");
var variantgroupname = variantgroup.GetString("Ecom:VariantGroup.Name");
foreach (LoopItem variantoption in variantgroup.GetLoop("VariantOptions"))
{
var variantoptionid = variantoption.GetString("Ecom:VariantOption.ID");
if (!availableVariantCombinations.Contains(variantoptionid)) { continue; }
var variantoptionname = variantoption.GetString("Ecom:VariantOption.Name");
var selected = false;
if (defaultPreselect)
{
selected = variantoption.GetBoolean("Ecom:VariantOption.Selected");
}
var existingVariant = otherVariants.FirstOrDefault(v => v.VariantGroupID == variantgroupid);
if (existingVariant != null)
{
existingVariant.VariantOptions.Add(new ProductVariantOption
{
VariantOptionID = variantoptionid,
VariantOptionName = variantoptionname,
Selected = selected
});
}
else
{
otherVariants.Add(new ProductVariant
{
VariantGroupID = variantgroupid,
VariantGroupName = variantgroupname,
VariantOptions = new List<ProductVariantOption> {
new ProductVariantOption {
VariantOptionID = variantoptionid,
VariantOptionName = variantoptionname,
Selected = selected
}
}
});
}
}
foreach (var otherVariant in otherVariants)
{
variantsExists = true;
<div class="variant clearfix">
<select class="other-variant" data-main="@(isMain ? "1" : "0")" data-pageurl="/@Pageview.Area.Item["ProductPage"]&[email protected]">
<option value="-1">@Translate("Choose variant", "Choose variant")</option>
@foreach (var variant in otherVariant.VariantOptions)
{
if (otherVariant.VariantOptions.Count() == 1) { variant.Selected = true; }
<option value="@variant.VariantOptionID" @(variant.Selected ? "selected" : "")>@variant.VariantOptionName</option>
}
</select>
</div>
}
}
//size color variant
if (variantGroups.Count() == 2)
{
var availableSizeCombinations = new List<string>();
foreach (var availVariantOption in availableVariantCombinations)
{
var optionSplit = availVariantOption.Split('.');
if (!availableSizeCombinations.Contains(optionSplit[0]))
{
availableSizeCombinations.Add(optionSplit[0]);
}
}
var sizeColorVariants = new List<SizeColorVariant>();
var sizeVariantGroup = variantGroups[0];
var colorVariantGroup = variantGroups[1];
foreach (LoopItem sizeVariantoption in sizeVariantGroup.GetLoop("VariantOptions"))
{
var sizeVariantOptionId = sizeVariantoption.GetString("Ecom:VariantOption.ID");
if (!availableSizeCombinations.Contains(sizeVariantOptionId)) { continue; }
var sizeName = sizeVariantoption.GetString("Ecom:VariantOption.Name");
var sizeSelected = defaultPreselect ? sizeVariantoption.GetBoolean("Ecom:VariantOption.Selected") : false;
var sizeColorVariant = new SizeColorVariant
{
VariantID = sizeVariantOptionId,
Size = sizeName,
Selected = sizeSelected,
Colors = new List<ColorVariant>()
};
foreach (LoopItem colorVariantoption in colorVariantGroup.GetLoop("VariantOptions"))
{
var colorVariantOptionId = colorVariantoption.GetString("Ecom:VariantOption.ID");
var availableColorCombinations = availableVariantCombinations.FindAll(v => v.StartsWith(sizeVariantOptionId + "."))
.Select(v => v.Split('.')[1])
.ToList();
if (!availableColorCombinations.Contains(colorVariantOptionId)) { continue; }
var colorName = colorVariantoption.GetString("Ecom:VariantOption.Name");
var colorSelected = defaultPreselect ? colorVariantoption.GetBoolean("Ecom:VariantOption.Selected") : false;
sizeColorVariant.Colors.Add(new ColorVariant
{
Color = colorName,
VariantID = colorVariantOptionId,
Selected = colorSelected
});
}
sizeColorVariants.Add(sizeColorVariant);
}
if (sizeColorVariants.Any())
{
variantsExists = true;
<div class="lingerie-container">
<div class="variant clearfix">
<select class="lingerie-size" data-main="@(isMain ? "1" : "0")" data-pageurl="/@Pageview.Area.Item["ProductPage"]&[email protected]">
<option value="-1">@Translate("Choose variant", "Choose variant")</option>
@for (var i = 0; i < sizeColorVariants.Count; i++)
{
if (sizeColorVariants.Count == 1) { sizeColorVariants[i].Selected = true; }
<option data-value="@(sizeColorVariants[i].VariantID)" value="@i" @(sizeColorVariants[i].Selected ? "selected" : "")>@sizeColorVariants[i].Size</option>
}
</select>
</div>
@foreach (var sizeColor in sizeColorVariants)
{
<div class="variant clearfix">
<select id="[email protected](sizeColor)" class="lingerie-color" data-visible="@(sizeColor.Selected ? 1 : 0)"
data-main="@(isMain ? "1" : "0")" data-pageurl="/@Pageview.Area.Item["ProductPage"]&[email protected]">
<option value="-1">@Translate("Choose variant", "Choose variant")</option>
@foreach (var color in sizeColor.Colors)
{
if (sizeColor.Colors.Count() == 1) { color.Selected = true; }
<option value="@color.VariantID" @(color.Selected ? "selected" : "")>@color.Color</option>
}
</select>
</div>
}
</div>
}
}
}
if (variantsExists)
{
<hr />
}
}
@using System.Web;
@using belugi.core.model;
@using Dynamicweb.eCommerce.Products;
@{
var search = GetString("Ecom:Search.SearchBox");
var productsCssClass = !string.IsNullOrEmpty(search) ? "col-sm-9 col-xs-12" : "col-sm-12 col-xs-12";
var paragraph = Pageview.CurrentParagraph;
var pageSize = GetString("Ecom:ProductList.PageSize");
var seoText = GetString("Ecom:Group.Description");
var productsClass = "col-md-9 col-xs-12";
var searchHtml = GetString("Ecom:Search.SearchBox");
if (string.IsNullOrEmpty(searchHtml))
{
productsClass = "col-md-12";
}
var currentGroup = Group.GetGroupByID(GetString("Ecom:Group.ID"));
var topGroupId = "";
var backgroundImg = "";
if (currentGroup != null)
{
backgroundImg = currentGroup.ProductGroupFieldValues.GetProductGroupFieldValue("BackgroundImg").HasValue && !string.IsNullOrWhiteSpace(currentGroup.ProductGroupFieldValues.GetProductGroupFieldValue("BackgroundImg").Value.ToString()) ? ("https://res.cloudinary.com/belugi/t_lib/Files/Images/" + currentGroup.ProductGroupFieldValues.GetProductGroupFieldValue("BackgroundImg").Value) : "";
var topGroup = currentGroup.GetTopGroup();
if (topGroup != null)
{
topGroupId = topGroup.ID.ToLower();
}
}
var searchQuery = HttpContext.Current.Request["eComQuery"];
var products = GetLoop("Products");
var manufacturerIdQueryString = HttpContext.Current.Request.QueryString["manufacturerid"];
Dynamicweb.eCommerce.Products.Manufacturer manufacturer = null;
var manufacturerLogo = "";
var manufacturerDesc = "";
var manufacturerIdStr = "";
if (!string.IsNullOrEmpty(manufacturerIdQueryString))
{
manufacturer = new Dynamicweb.eCommerce.Products.Manufacturer(manufacturerIdQueryString);
var allPageParagraphs = Dynamicweb.Content.Paragraph.GetParagraphsByPageID(Convert.ToInt16(GetGlobalValue("Global:Page.ID")));
var manufacturerParagraphs = allPageParagraphs.Where(p => p.ShowParagraph && p.ItemType == "Manufacturer").ToList();
foreach (var manufacturerParagraph in manufacturerParagraphs)
{
var manufacturerData = Dynamicweb.Content.Items.ItemManager.Storage.GetById(manufacturerParagraph.ItemType, manufacturerParagraph.ItemId);
if (manufacturerData == null) { continue; }
object manufacturerId = null;
manufacturerData.TryGetValue("Manufacturer", ref manufacturerId);
if (manufacturerId != null)
{
manufacturerIdStr = manufacturerId.ToString();
}
if (manufacturerIdQueryString == manufacturerIdStr)
{
object manufacturerLogoObj = null;
manufacturerData.TryGetValue("Logo", ref manufacturerLogoObj);
if (manufacturerLogoObj != null)
{
manufacturerLogo = manufacturerLogoObj.ToString();
}
object manufacturerDescObj = null;
manufacturerData.TryGetValue("Description", ref manufacturerDescObj);
if (manufacturerDescObj != null)
{
manufacturerDesc = manufacturerDescObj.ToString();
}
break;
}
}
}
if (HttpContext.Current.Request.QueryString["groupid"] != null && HttpContext.Current.Request.QueryString.Count > 2)
{
var canonicalUrl = HttpContext.Current.Request.RawUrl;
canonicalUrl = "https://" + HttpContext.Current.Request.Url.Host + canonicalUrl.Substring(0, canonicalUrl.IndexOf("?"));
<[email protected](metatags)-->
<link rel="canonical" href="@canonicalUrl">
<[email protected](metatags)-->
}
var smartSearchParams = new List<string>() { "top10", "new", "bestseller" };
}
<div style="display:none;">@HttpContext.Current.Request.Url.AbsoluteUri</div>
@if (manufacturer != null && !string.IsNullOrEmpty(manufacturerLogo))
{
<section class="text-module text-module-image">
<div class="container">
<img src="@(manufacturerLogo)" alt="@manufacturer.Name" title="@manufacturer.Name" />
</div>
</section>
}
<section class="products [email protected]">
<div class="container">
@if (!string.IsNullOrWhiteSpace(GetString("Ecom:Group.Name")))
{
if (string.IsNullOrWhiteSpace(backgroundImg))
{
<div class="headline">
<div class="h1">@GetString("Ecom:Group.Name")</div>
</div>
}
else
{
<div class="header-image" style="background-image:url(@backgroundImg)">
<div class="h1 title">@GetString("Ecom:Group.Name")</div>
</div>
}
}
<div class="row">
@if (!string.IsNullOrEmpty(searchHtml))
{
var eComQuery = HttpContext.Current.Request.QueryString["eComQuery"];
<div class="col-md-3 col-xs-12">
<form id="EcomSearch" name="EcomSearch" method="get">
<input type="hidden" id="PageSize" name="PageSize" value="@pageSize" />
<input type="hidden" id="SortBy" name="SortBy" value="@HttpContext.Current.Request.QueryString["SortBy"]" />
<input type="hidden" id="SortOrder" name="SortOrder" value="@HttpContext.Current.Request.QueryString["SortOrder"]" />
@foreach(var searchSmartParam in smartSearchParams)
{
var querySmartSearchParam = HttpContext.Current.Request.QueryString[searchSmartParam];
if (querySmartSearchParam == null || querySmartSearchParam.ToString().ToLower() != "true")
{
continue;
}
<input type="hidden" name="@searchSmartParam" value="@querySmartSearchParam" />
}
@if (!string.IsNullOrEmpty(eComQuery))
{
<input type="hidden" id ="eComQuery" name="eComQuery" value="@eComQuery" />
}
@searchHtml
</form>
</div>
}
<div class="@productsClass">
<!--filters-->
<div class="clearfix">
<div class="sort-module">
<span>
<span class="sort-option">
<div class="sort-option-table">
<div>
<select id="pagesizeselect">
<option value="15"
@(pageSize == "15" ? "selected='selected'" : string.Empty)>
15
</option>
<option value="20"
@(pageSize == "20" ? "selected='selected'" : string.Empty)>
20
</option>
<option value="25"
@(pageSize == "25" ? "selected='selected'" : string.Empty)>
25
</option>
<option value="50"
@(pageSize == "50" ? "selected='selected'" : string.Empty)>
50
</option>
<option value="100"
@(pageSize == "100" ? "selected='selected'" : string.Empty)>
100
</option>
</select>
</div>
<div>
@if (string.IsNullOrEmpty(searchQuery))
{
<label>@Translate("Showing page", "Showing page") @GetValue("Ecom:ProductList.CurrentPage") @Translate("of", "of") @GetValue("Ecom:ProductList.TotalPages") (@GetValue("Ecom:ProductList.PageProdCnt") @Translate("products", "products"))</label>
}
else
{
<label>@Translate("Your search for", "Your search for") @searchQuery @Translate("returned", "returned") @GetValue("Ecom:ProductList.PageProdCnt") @Translate("results", "results")</label>
}
</div>
</div>
<script type="text/javascript">
$(document).ready(function () {
$("#pagesizeselect").change(function (e) {
$("#PageSize").val($(this).val());
$("#EcomSearch").get(0).submit();
});
});
</script>
</span>
<span class="sort-option">
<label>@Translate("ProductList.SortBy", "Soreter efter")</label>
<select id="sortby">
<option value=""
@(HttpContext.Current.Request.QueryString["SortBy"] == "Name" ? "selected='selected'" : string.Empty)>
@Translate("Sorting.Default", "Anbefalede")
</option>
<option value="Price,Asc"
@((HttpContext.Current.Request.QueryString["SortBy"] == "Price" && HttpContext.Current.Request["SortOrder"] == "Asc") ? "selected='selected'" : string.Empty)>
@Translate("Price low-high", "Price low-high")
</option>
<option value="Price,Desc"
@((HttpContext.Current.Request.QueryString["SortBy"] == "Price" && HttpContext.Current.Request["SortOrder"] == "Desc") ? "selected='selected'" : string.Empty)>
@Translate("Price high-low", "Price high-low")
</option>
</select>
<script type="text/javascript">
$(document).ready(function () {
$("#sortby").change(function (e) {
var sortBy = $(this).val().split(',')[0];
var sortOrder = $(this).val().split(',')[1];
$("#SortBy").val(sortBy);
$("#SortOrder").val(sortOrder);
$("#EcomSearch").get(0).submit();
});
});
</script>
</span>
</span>
</div>
</div>
@if (products.Count() == 0)
{
<div class="text-module">
<div class="box">
<p>@Translate("No products found", "No products found")</p>
</div>
</div>
}
<div class="row">
<!--product-list-->
<div class="clearfix">
@foreach (var product in products)
{
//Ecom:Product.VariantID
<div class="col-sm-4 col-xs-12">
@RenderProduct(product)
</div>
}
@{
var totalPages = GetInteger("Ecom:ProductList.TotalPages");
var firstPageToDisplay = 1;
}
@if (totalPages > 1)
{
var currentPage = GetInteger("Ecom:ProductList.CurrentPage");
int i = firstPageToDisplay;
<div class="col-sm-12 col-xs-12">
<div class="pagination-wrap">
<ul class="pagination">
@if (!string.IsNullOrWhiteSpace(GetString("Ecom:ProductList.PrevPage.Clean")))
{
var firstPage = HttpContext.Current.Request.RawUrl;
if (firstPage.Contains("?PageNum"))
{
var j = firstPage.IndexOf("?PageNum");
var partAfterPageNum = "";
if (firstPage.Substring(j).IndexOf("&") > -1)
{
partAfterPageNum = firstPage.Substring(j).Substring(firstPage.Substring(j).IndexOf("&"));
}
firstPage = firstPage.Substring(0, j) + "?PageNum=" + firstPageToDisplay + partAfterPageNum;
}
else if (firstPage.Contains("&PageNum"))
{
var j = firstPage.IndexOf("&PageNum");
var partAfterPageNum = "";
if (firstPage.Substring(j).IndexOf("&") > -1)
{
partAfterPageNum = firstPage.Substring(j).Substring(firstPage.Substring(j).IndexOf("&"));
}
firstPage = firstPage.Substring(0, j) + "&PageNum=" + firstPageToDisplay + partAfterPageNum;
}
else if (firstPage.Contains("?"))
{
firstPage += "&PageNum=" + firstPageToDisplay;
}
else
{
firstPage += "?PageNum=" + firstPageToDisplay;
}
<li>
<a href="@firstPage">
«
<span aria-hidden="true">@Translate("ProductList.FirstPage", "Første")</span>
</a>
</li>
<li>
<a href="@GetString("Ecom:ProductList.PrevPage.Clean")">
‹
<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>
›
</a>
</li>
<li>
<a href="@lastPage">
<span aria-hidden="true">@Translate("ProductList.LastPage", "Sidste")</span>
»
</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>
}