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