public string BuildCategoryBrowsingUrl(BuildCategoryBrowsingUrlParam param) { var websiteId = WebsiteContext.WebsiteId; var scope = DataScopeManager.CurrentDataScope; var key = $"{websiteId}{param.CategoryId}{param.IsAllProductsPage}{scope}"; var cacheKey = new CacheKey(CacheConfigurationCategoryNames.CategoryUrls, key, param.CultureInfo); var categoryBaseUrl = CacheProvider.GetOrAdd(cacheKey, () => { // Because of ConfigureAwait(false), we lost context here. // Therefore we need to re-initialize C1 context because getting the Url. using (ThreadDataManager.EnsureInitialize()) { var map = GetCategoryMap(scope, param.CultureInfo); if (!map.TryGetValue(param.CategoryId, out var categoryPages)) { return(null); } foreach (var categoryPage in categoryPages.Where(_ => _.IsAllProductsPage == param.IsAllProductsPage)) { if (HasAncestor(categoryPage.PageId, websiteId)) { return(PageService.GetPageUrl(categoryPage.PageId, param.CultureInfo)); } } } return(null); }); // Category page is not found if (categoryBaseUrl == null) { return(null); } var finalUrl = UrlFormatter.AppendQueryString(categoryBaseUrl, BuildSearchQueryString(new BuildSearchUrlParam { SearchCriteria = param.Criteria })); return(finalUrl); }
protected override string GenerateUrl(BrowsingSearchParam byCategoryCriteria) { var cloneParam = (BrowsingSearchParam)byCategoryCriteria.Clone(); if (cloneParam.CategoryFilters != null) { RemoveAppendedCategoryFacet(cloneParam); } var param = new BuildCategoryBrowsingUrlParam { CategoryId = byCategoryCriteria.CategoryId, Criteria = cloneParam.Criteria, IsAllProductsPage = byCategoryCriteria.IsAllProductsPage }; return(_categoryBrowsingUrlProvider.BuildCategoryBrowsingUrl(param)); }
public string BuildCategoryBrowsingUrl(BuildCategoryBrowsingUrlParam param) { var itemId = GuidUtility.Create(GetNamespace(param.IsAllProductsPage), param.CategoryId); var cacheKey = new CacheKey(CacheConfigurationCategoryNames.CategoryUrls, itemId.ToString(), param.CultureInfo); var categoryBaseUrl = CacheProvider.GetOrAdd(cacheKey, () => GetPageUrl(itemId, param.CultureInfo)); // Category page is not found if (categoryBaseUrl == null) { return(null); } var finalUrl = UrlFormatter.AppendQueryString(categoryBaseUrl, BuildSearchQueryString(new BuildSearchUrlParam { SearchCriteria = param.Criteria })); return(finalUrl); }