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);
        }
Ejemplo n.º 2
0
        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);
        }