/// <summary> /// This method returns the ProductSearchResults for a datasource /// </summary> /// <param name="dataSource">The datasource to perform the search with</param> /// <param name="productSearchOptions">The search options.</param> /// <returns>A ProductSearchResults</returns> public SearchResults GetProductSearchResults(Item dataSource, CommerceSearchOptions productSearchOptions) { Assert.ArgumentNotNull(productSearchOptions, "productSearchOptions"); if (dataSource != null) { int totalProductCount = 0; int totalPageCount = 0; string error = string.Empty; if (dataSource.TemplateName == StorefrontConstants.KnownTemplateNames.CommerceNamedSearch || dataSource.TemplateName == StorefrontConstants.KnownTemplateNames.NamedSearch) { var returnList = new List <Item>(); IEnumerable <CommerceQueryFacet> facets = null; var searchOptions = new CommerceSearchOptions(-1, 0); var defaultBucketQuery = dataSource[CommerceConstants.KnownSitecoreFieldNames.DefaultBucketQuery]; var persistendBucketFilter = CleanLanguageFromFilter(dataSource[CommerceConstants.KnownSitecoreFieldNames.PersistentBucketFilter]); try { var searchResponse = SearchNavigation.SearchCatalogItems(defaultBucketQuery, persistendBucketFilter, searchOptions); if (searchResponse != null) { returnList.AddRange(searchResponse.ResponseItems); totalProductCount = searchResponse.TotalItemCount; totalPageCount = searchResponse.TotalPageCount; facets = searchResponse.Facets; } } catch (Exception ex) { error = ex.Message; } return(new SearchResults(returnList, totalProductCount, totalPageCount, searchOptions.StartPageIndex, facets)); } var childProducts = GetChildProducts(productSearchOptions, dataSource).SearchResultItems; return(new SearchResults(childProducts, totalProductCount, totalPageCount, productSearchOptions.StartPageIndex, new List <CommerceQueryFacet>())); } return(null); }
/// <summary> /// This method returns child products for this category /// </summary> /// <param name="searchOptions">The options to perform the search with</param> /// <param name="categoryItem">The category item whose children to retrieve</param> /// <returns>A list of child products</returns> protected SearchResults GetChildProducts(CommerceSearchOptions searchOptions, Item categoryItem) { IEnumerable <CommerceQueryFacet> facets = null; var returnList = new List <Item>(); var totalPageCount = 0; var totalProductCount = 0; if (RenderingContext.Current.Rendering.Item != null) { SearchResponse searchResponse = null; if (CatalogUtility.IsItemDerivedFromCommerceTemplate(categoryItem, CommerceConstants.KnownTemplateIds.CommerceDynamicCategoryTemplate) || categoryItem.TemplateName == "Commerce Named Search") { try { var defaultBucketQuery = categoryItem[CommerceConstants.KnownSitecoreFieldNames.DefaultBucketQuery]; var persistendBucketFilter = categoryItem[CommerceConstants.KnownSitecoreFieldNames.PersistentBucketFilter]; persistendBucketFilter = CleanLanguageFromFilter(persistendBucketFilter); searchResponse = SearchNavigation.SearchCatalogItems(defaultBucketQuery, persistendBucketFilter, searchOptions); } catch (Exception ex) { Helpers.LogException(ex, this); } } else { searchResponse = SearchNavigation.GetCategoryProducts(categoryItem.ID, searchOptions); } if (searchResponse != null) { returnList.AddRange(searchResponse.ResponseItems); totalProductCount = searchResponse.TotalItemCount; totalPageCount = searchResponse.TotalPageCount; facets = searchResponse.Facets; } } var results = new SearchResults(returnList, totalProductCount, totalPageCount, searchOptions.StartPageIndex, facets); return(results); }