public ActionResult Facet(GenericNode currentContent, CommerceFilterOptionViewModel viewModel) { if (string.IsNullOrEmpty(viewModel.ViewSwitcher)) { viewModel.ViewSwitcher = string.IsNullOrEmpty(currentContent.DefaultTemplate) ? "List" : currentContent.DefaultTemplate; } return(PartialView("_Facet", viewModel)); }
public IEnumerable <ProductTileViewModel> QuickSearch(string query, int catalogId = 0) { var filterOptions = new CommerceFilterOptionViewModel { Q = query, PageSize = 5, Sort = string.Empty, FacetGroups = new List <FacetGroupOption>(), Page = 1, TrackData = false }; return(QuickSearch(filterOptions, catalogId)); }
private ProductSearchResults GetSearchResults(string language, Commerce.Models.Blocks.ProductSearchBlock productSearchBlock) { var filterOptions = new CommerceFilterOptionViewModel { Q = productSearchBlock.SearchTerm, PageSize = productSearchBlock.ResultsPerPage, Sort = string.Empty, FacetGroups = new List <FacetGroupOption>(), Page = 1 }; var filters = GetFilters(productSearchBlock); return(_searchService.SearchWithFilters(null, filterOptions, filters)); }
public async Task <ViewResult> Index(GenericNode currentContent, CommerceFilterOptionViewModel viewModel) { var model = _viewModelFactory.Create <DemoSearchViewModel <GenericNode>, GenericNode>(currentContent, new CommerceArgs { FilterOption = viewModel, SelectedFacets = HttpContext.Request.QueryString["facets"], CatalogId = 0 }); if (HttpContext.Request.HttpMethod == "GET") { var response = await _recommendationService.TrackCategory(HttpContext, currentContent); model.Recommendations = response.GetCategoryRecommendations(_referenceConverter); } model.BreadCrumb = GetBreadCrumb(currentContent.Code); return(View(model)); }
public IEnumerable <ProductTileViewModel> QuickSearch(CommerceFilterOptionViewModel filterOptions, int catalogId = 0) => string.IsNullOrEmpty(filterOptions.Q) ? Enumerable.Empty <ProductTileViewModel>() : GetSearchResults(null, filterOptions, "", null, catalogId).ProductViewModels;
public ProductSearchResults SearchWithFilters(IContent currentContent, CommerceFilterOptionViewModel filterOptions, IEnumerable <Filter> filters, int catalogId = 0) => filterOptions == null?CreateEmptyResult() : GetSearchResults(currentContent, filterOptions, "", filters, catalogId);
public ProductSearchResults Search(IContent currentContent, CommerceFilterOptionViewModel filterOptions, string selectedFacets, int catalogId = 0) => filterOptions == null?CreateEmptyResult() : GetSearchResults(currentContent, filterOptions, selectedFacets, null, catalogId);
private ITypeSearch <EntryContentBase> OrderBy(ITypeSearch <EntryContentBase> query, CommerceFilterOptionViewModel CommerceFilterOptionViewModel) { if (string.IsNullOrEmpty(CommerceFilterOptionViewModel.Sort) || CommerceFilterOptionViewModel.Sort.Equals("Position")) { if (CommerceFilterOptionViewModel.SortDirection.Equals("Asc")) { query = query.OrderBy(x => x.SortOrder()); return(query); } query = query.OrderByDescending(x => x.SortOrder()); return(query); } if (CommerceFilterOptionViewModel.Sort.Equals("Price")) { if (CommerceFilterOptionViewModel.SortDirection.Equals("Asc")) { query = query.OrderBy(x => x.DefaultPrice()); return(query); } query = query.OrderByDescending(x => x.DefaultPrice()); return(query); } if (CommerceFilterOptionViewModel.Sort.Equals("Name")) { if (CommerceFilterOptionViewModel.SortDirection.Equals("Asc")) { query = query.OrderBy(x => x.DisplayName); return(query); } query = query.OrderByDescending(x => x.DisplayName); return(query); } //if (CommerceFilterOptionViewModel.Sort.Equals("Recommended")) //{ // query = query.UsingPersonalization(); // return query; //} return(query); }
private ProductSearchResults GetSearchResults(IContent currentContent, CommerceFilterOptionViewModel filterOptions, string selectedfacets, IEnumerable <Filter> filters = null, int catalogId = 0) { //If contact belong organization, only find product that belong the categories that has owner is this organization var contact = PrincipalInfo.CurrentPrincipal.GetCustomerContact(); var organizationId = contact?.ContactOrganization?.PrimaryKeyId ?? Guid.Empty; CatalogContent catalogOrganization = null; if (organizationId != Guid.Empty) { //get category that has owner id = organizationId catalogOrganization = _contentRepository .GetChildren <CatalogContent>(_referenceConverter.GetRootLink()) .FirstOrDefault(x => !string.IsNullOrEmpty(x.Owner) && x.Owner.Equals(organizationId.ToString(), StringComparison.OrdinalIgnoreCase)); } var pageSize = filterOptions.PageSize > 0 ? filterOptions.PageSize : DefaultPageSize; var market = _currentMarket.GetCurrentMarket(); var query = _findClient.Search <EntryContentBase>(); query = ApplyTermFilter(query, filterOptions.Q, filterOptions.TrackData); query = query.Filter(x => x.Language.Name.Match(_languageResolver.GetPreferredCulture().Name)); if (organizationId != Guid.Empty && catalogOrganization != null) { query = query.Filter(x => x.Outline().PrefixCaseInsensitive(catalogOrganization.Name)); } var nodeContent = currentContent as NodeContent; if (nodeContent != null) { var outline = GetOutline(nodeContent.Code); query = query.FilterOutline(new[] { outline }); } query = query.FilterMarket(market); var facetQuery = query; query = FilterSelected(query, filterOptions.FacetGroups); query = ApplyFilters(query, filters); query = OrderBy(query, filterOptions); //Exclude products from search //query = query.Filter(x => (x as ProductContent).ExcludeFromSearch.Match(false)); if (catalogId != 0) { query = query.Filter(x => x.CatalogId.Match(catalogId)); } query = query.ApplyBestBets() .Skip((filterOptions.Page - 1) * pageSize) .Take(pageSize) .StaticallyCacheFor(TimeSpan.FromMinutes(1)); var result = query.GetContentResult(); return(new ProductSearchResults { ProductViewModels = CreateProductViewModels(result, currentContent, filterOptions.Q), FacetGroups = GetFacetResults(filterOptions.FacetGroups, facetQuery, selectedfacets), TotalCount = result.TotalMatching, DidYouMeans = string.IsNullOrEmpty(filterOptions.Q) ? null : _findClient.Statistics().GetDidYouMean(filterOptions.Q), Query = filterOptions.Q, }); }
public async Task <ActionResult> Index(SearchResultPage currentPage, CommerceFilterOptionViewModel filterOptions) { if (filterOptions == null) { return(Redirect(Url.ContentUrl(ContentReference.StartPage))); } if (string.IsNullOrEmpty(filterOptions.ViewSwitcher)) { filterOptions.ViewSwitcher = "List"; } var startPage = _contentLoader.Get <DemoHomePage>(ContentReference.StartPage); var viewModel = _viewModelFactory.Create <DemoSearchViewModel <SearchResultPage>, SearchResultPage>(currentPage, new CommerceArgs { FilterOption = filterOptions, SelectedFacets = HttpContext.Request.QueryString["facets"], CatalogId = startPage.SearchCatalog, }); if (viewModel == null) { return(View(viewModel)); } if (!startPage.ShowProductSearchResults) { viewModel.ProductViewModels = new List <ProductTileViewModel>(); } else { var bestBestList = viewModel.ProductViewModels.Where(x => x.IsBestBetProduct); var notBestBestList = viewModel.ProductViewModels.Where(x => !x.IsBestBetProduct); viewModel.ProductViewModels = bestBestList.Union(notBestBestList); if (filterOptions.Page <= 1 && HttpContext.Request.HttpMethod == "GET") { var trackingResult = await _recommendationService.TrackSearch(HttpContext, filterOptions.Q, filterOptions.PageSize, viewModel.ProductViewModels.Select(x => x.Code)); viewModel.Recommendations = trackingResult.GetSearchResultRecommendations(_referenceConverter); } } await _cmsTrackingService.SearchedKeyword(_httpContextBase, filterOptions.Q); if (startPage.ShowContentSearchResults) { viewModel.ContentSearchResult = _cmsSearchService.SearchContent(new CmsFilterOptionViewModel() { Q = filterOptions.Q, PageSize = 5, Page = filterOptions.SearchContent ? filterOptions.Page : 1, SectionFilter = filterOptions.SectionFilter }); } var productCount = viewModel.ProductViewModels?.Count() ?? 0; var contentCount = viewModel.ContentSearchResult.Hits?.Count() ?? 0; if (productCount + contentCount == 1) { if (productCount == 1) { var product = viewModel.ProductViewModels.FirstOrDefault(); return(Redirect(product.Url)); } else { var content = viewModel.ContentSearchResult.Hits.FirstOrDefault(); return(Redirect(content.Url)); } } viewModel.ShowContentSearchResults = startPage.ShowContentSearchResults; viewModel.ShowProductSearchResults = startPage.ShowProductSearchResults; return(View(viewModel)); }
public ActionResult Facet(SearchResultPage currentPage, CommerceFilterOptionViewModel viewModel) => PartialView("_Facet", viewModel);
public ActionResult Facet(GenericNode currentContent, CommerceFilterOptionViewModel viewModel) => PartialView("_Facet", viewModel);