private List <UrlInfo> GetWebsiteUrls(BaseProduct baseProduct, WebSite webSite) { var urls = new List <UrlInfo>(); var variants = baseProduct.GetPublishedVariants(webSite.ID).ToList(); foreach (var baseProductCategoryLink in baseProduct.CategoryLinks) { var category = _categoryService.Get(baseProductCategoryLink.CategorySystemId); var baseProductUrl = baseProduct.GetUrl(webSite.ID, true, category); if (!string.IsNullOrEmpty(baseProductUrl)) { urls.Add(new UrlInfo { Id = baseProduct.Id, Url = baseProductUrl }); } foreach (var variant in variants) { var variantUrl = variant.GetUrl(webSite.ID, true, category); if (string.IsNullOrEmpty(variantUrl)) { continue; } if (urls.Any(u => u.Url.Equals(variantUrl))) { continue; } urls.Add(new UrlInfo { Id = variant.Id, Url = variantUrl }); } } return(urls); }
private ProductModel CreateProductModel(SearchQuery searchQuery, BaseProduct baseProduct) { var variants = baseProduct.GetPublishedVariants(_requestModelAccessor.RequestModel.WebsiteModel.SystemId, _requestModelAccessor.RequestModel.ChannelModel.SystemId).ToList(); if (searchQuery.Tags.Count > 0) { var order = new ConcurrentDictionary <Variant, int>(); foreach (var tag in searchQuery.Tags) { var fieldDefinition = _fieldDefinitionService.Get <ProductArea>(tag.Key); foreach (var variant in variants) { var value = GetTranslatedValue((variant.Fields[tag.Key, CultureInfo.CurrentCulture] ?? variant.Fields[tag.Key]) as string, CultureInfo.CurrentCulture, fieldDefinition); if (tag.Value.Contains(value)) { order.AddOrUpdate(variant, _ => 1, (_, c) => c + 1); } } } var vt = order.OrderByDescending(x => x.Value).Select(x => x.Key).FirstOrDefault() ?? variants.FirstOrDefault(); if (vt != null) { return(_productModelBuilder.BuildFromVariant(vt)); } } var firstVariant = variants.FirstOrDefault(); if (firstVariant != null) { return(_productModelBuilder.BuildFromBaseProduct(baseProduct, firstVariant)); } return(null); }