/// <summary>
        /// Build the product block view model
        /// </summary>
        /// <param name="blockModel">The current product block</param>
        /// <returns>Return the product block view model</returns>
        public virtual ProductBlockViewModel Build(BlockModel blockModel)
        {
            var data      = blockModel.MapTo <ProductBlockViewModelData>();
            var viewModel = new ProductBlockViewModel();
            var channel   = _requestModelAccessor.RequestModel.ChannelModel.Channel;

            if (data != null)
            {
                viewModel.FooterLinkText = data.LinkText;
                if (data.LinkToCategorySystemId != Guid.Empty)
                {
                    viewModel.FooterLinkUrl = data.LinkToCategorySystemId.MapTo <Category>().GetUrl(_requestModelAccessor.RequestModel.ChannelModel.SystemId, true);
                }
                else if (!string.IsNullOrEmpty(data.LinkToPage.Href))
                {
                    viewModel.FooterLinkUrl = data.LinkToPage.Href;
                }

                viewModel.Title = data.Title;

                var products = new List <ProductModel>();
                if (data.SectionProductsType == BlockProductsType.Products)
                {
                    products.AddRange(data.ProductSystemIds.Select(x => _productModelBuilder.BuildFromVariant(_variantService.Get(x)) ?? _productModelBuilder.BuildFromBaseProduct(_baseProductService.Get(x), channel)).Where(x => x != null));
                }
                else
                {
                    var searchQuery = new SearchQuery
                    {
                        PageSize = data.NumberOfProducts
                    };

                    switch (data.SectionProductsType)
                    {
                    case BlockProductsType.Category:
                        searchQuery.CategoryShowRecursively = true;
                        searchQuery.SortBy           = data.ProductSorting;
                        searchQuery.CategorySystemId = data.CategorySystemId;
                        break;

                    case BlockProductsType.ProductList:
                        searchQuery.ProductListSystemId = data.ProductListSystemId;
                        break;
                    }
                    var response = _productSearchService.Search(searchQuery);
                    if (response?.Hits != null)
                    {
                        products.AddRange(_productSearchService
                                          .Transform(searchQuery, response)
                                          .Items
                                          .Value
                                          .OfType <ProductSearchResult>()
                                          .Select(x => x.Item));
                    }
                }

                viewModel.Products = products.Select(x => _productItemViewModelBuilder.Build(x)).ToList();
            }
            return(viewModel);
        }
        private async Task BuildProductsAsync(SearchResultViewModel searchResult, SearchQuery searchQuery)
        {
            if (searchQuery.PageSize == null)
            {
                var pageSize = _requestModelAccessor.RequestModel.WebsiteModel.GetValue <int?>(AcceleratorWebsiteFieldNameConstants.ProductsPerPage) ?? DefaultWebsiteFieldValueConstants.ProductsPerPage;
                searchQuery.PageSize = pageSize;
            }

            var searchResults = await _productSearchService.SearchAsync(searchQuery, searchQuery.Tags, true, true, true);

            if (searchResults == null)
            {
                searchResult.Pagination = new PaginationViewModel(0, 1);
                return;
            }

            searchResult.Products   = searchResults.Items.Value.Cast <ProductSearchResult>().Select(c => _productItemBuilder.Build(c.Item)).ToList();
            searchResult.Pagination = new PaginationViewModel(searchResults.Total, searchQuery.PageNumber, searchResults.PageSize);
        }
        public virtual BrandViewModel Build(PageModel pageModel)
        {
            var model = pageModel.MapTo <BrandViewModel>();

            var pageSize    = _requestModelAccessor.RequestModel.WebsiteModel.Fields.GetValue <int?>(AcceleratorWebsiteFieldNameConstants.ProductsPerPage) ?? DefaultWebsiteFieldValueConstants.ProductsPerPage;
            var searchQuery = _requestModelAccessor.RequestModel.SearchQuery.Clone();

            searchQuery.CategoryShowRecursively = true;
            searchQuery.PageSize = pageSize;

            var navigationType = _requestModelAccessor.RequestModel.WebsiteModel.GetNavigationType();
            var showBlocks     = model.Blocks.Any() && !searchQuery.ContainsFilter();

            model.ContainsFilter    = searchQuery.ContainsFilter();
            model.ShowFilterHeader  = navigationType == NavigationType.Filter && searchQuery.ContainsFilter();
            model.ShowRegularHeader = navigationType == NavigationType.Filter ? !model.Blocks.Any() && !searchQuery.ContainsFilter() : !showBlocks;

            var searchResponse = _productSearchService.Search(searchQuery, searchQuery.Tags, true, true, true);
            var searchResults  = searchResponse != null?_productSearchService.Transform(searchQuery, searchResponse) : null;

            if (searchResults == null)
            {
                return(model);
            }

            model.Products   = searchResults.Items.Value.Cast <ProductSearchResult>().Select(c => _productItemViewModelBuilder.Build(c.Item)).ToList();
            model.Pagination = new PaginationViewModel(searchResults.Total, searchQuery.PageNumber, searchResults.PageSize);

            return(model);
        }
示例#4
0
        private void BuildProducts(SearchResultViewModel searchResult, SearchQuery searchQuery)
        {
            if (searchQuery.PageSize == null)
            {
                var pageSize = _requestModelAccessor.RequestModel.WebsiteModel.Fields.GetValue <int?>(AcceleratorWebsiteFieldNameConstants.ProductsPerPage) ?? DefaultWebsiteFieldValueConstants.ProductsPerPage;
                searchQuery.PageSize = pageSize;
            }

            var searchResponse = _productSearchService.Search(searchQuery, searchQuery.Tags, true, true, true);
            var searchResults  = searchResponse == null ? null : _productSearchService.Transform(searchQuery, searchResponse);

            if (searchResults != null)
            {
                searchResult.Products   = searchResults.Items.Value.Cast <ProductSearchResult>().Select(c => _productItemBuilder.Build(c.Item)).ToList();
                searchResult.Pagination = new PaginationViewModel(searchResults.Total, searchQuery.PageNumber, searchResults.PageSize);
            }
        }