/// <summary> /// Product Lister /// </summary> /// <param name="entity"></param> /// <param name="containerSize"></param> /// <returns></returns> public ActionResult ProductLister(EntityModel entity, int containerSize = 0) { SetupViewData(entity, containerSize); ProductListerWidget widget = (ProductListerWidget)entity; IProductQueryResult queryResult = null; if (widget.CategoryReference != null) { var category = ResolveCategory(widget.CategoryReference); queryResult = ECommerceContext.Client.QueryService.Query(new Api.Model.Query { Category = category }); } else { // Use category from page controller // queryResult = (IProductQueryResult)ECommerceContext.Get(ECommerceContext.QUERY_RESULT); } if (queryResult == null) { queryResult = GetResultFromPageTemplate(); } widget.Items = queryResult.Products.ToList(); this.ProcessListerNavigationLinks(widget, queryResult, (IList <FacetParameter>)ECommerceContext.Get(ECommerceContext.FACETS)); return(View(entity.MvcData.ViewName, entity)); }
/// <summary> /// Facets /// </summary> /// <param name="entity"></param> /// <param name="containerSize"></param> /// <returns></returns> public ActionResult Facets(EntityModel entity, int containerSize = 0) { SetupViewData(entity, containerSize); FacetsWidget widget = (FacetsWidget)entity; // Get facets // IProductQueryResult queryResult = null; if (widget.CategoryReference != null) { var category = ResolveCategory(widget.CategoryReference); queryResult = ECommerceContext.Client.QueryService.Query(new Api.Model.Query { Category = category }); } else { // Use category from page controller // queryResult = (IProductQueryResult)ECommerceContext.Get(ECommerceContext.QUERY_RESULT); } if (queryResult == null) { queryResult = GetResultFromPageTemplate(); } widget.FacetGroups = queryResult.FacetGroups.ToList(); return(View(entity.MvcData.ViewName, entity)); }
public Query Previous(IProductQueryResult queryResult) { var query = new Query(this); query.StartIndex = queryResult.StartIndex - queryResult.ViewSize; if (query.StartIndex < 0) { return(null); } return(query); }
// TODO: Add view type + filter attributes here public Query Next(IProductQueryResult queryResult) { var query = new Query(this); query.StartIndex = queryResult.StartIndex + queryResult.ViewSize; if (query.StartIndex > queryResult.TotalCount) { return(null); } return(query); }
/// <summary> /// Promotions /// </summary> /// <param name="entity"></param> /// <param name="containerSize"></param> /// <returns></returns> public ActionResult Promotions(EntityModel entity, int containerSize = 0) { SetupViewData(entity, containerSize); PromotionsWidget widget = (PromotionsWidget)entity; // Get promotions // IProductQueryResult queryResult = null; if (widget.CategoryReference != null) { var query = new Api.Model.Query(); var category = ResolveCategory(widget.CategoryReference); query.Category = category; if (widget.ViewType != null) { query.ViewType = (Api.Model.ViewType)Enum.Parse(typeof(Api.Model.ViewType), widget.ViewType.ToUpper()); } queryResult = ECommerceContext.Client.QueryService.Query(query); } else { // Use category from page controller // queryResult = (IProductQueryResult)ECommerceContext.Get(ECommerceContext.QUERY_RESULT); } if (queryResult == null) { queryResult = GetResultFromPageTemplate(); } if (queryResult != null) { widget.Promotions = queryResult.Promotions.ToList(); } else { var product = (IProduct)ECommerceContext.Get(ECommerceContext.PRODUCT); if (product != null) { widget.Promotions = product.Promotions; } else { widget.Promotions = Enumerable.Empty <IPromotion>().ToList(); } } return(View(entity.MvcData.ViewName, entity)); }
/// <summary> /// Breadcrumb /// </summary> /// <param name="entity"></param> /// <param name="containerSize"></param> /// <returns></returns> public ActionResult Breadcrumb(EntityModel entity, int containerSize = 0) { SetupViewData(entity, containerSize); BreadcrumbWidget widget = (BreadcrumbWidget)entity; // Get breadcrumb // IProductQueryResult queryResult = null; if (widget.CategoryReference != null) { var category = ResolveCategory(widget.CategoryReference); queryResult = ECommerceContext.Client.QueryService.Query(new Api.Model.Query { Category = category }); } else { // Use category from page controller // queryResult = (IProductQueryResult)ECommerceContext.Get(ECommerceContext.QUERY_RESULT); } if (queryResult == null) { queryResult = GetResultFromPageTemplate(); } if (queryResult != null) { widget.Breadcrumbs = queryResult.Breadcrumbs.ToList(); widget.TotalItems = queryResult.TotalCount; } else { var product = (IProduct)ECommerceContext.Get(ECommerceContext.PRODUCT); if (product != null) { widget.Breadcrumbs = product.Breadcrumbs; } else { widget.Breadcrumbs = Enumerable.Empty <IBreadcrumb>().ToList(); } } return(View(entity.MvcData.ViewName, entity)); }
void PrintQueryResult(IProductQueryResult result) { Console.WriteLine(" Search Results:"); Console.WriteLine("####################"); Console.WriteLine("Total Count: " + result.TotalCount); Console.WriteLine("Start index: " + result.StartIndex); Console.WriteLine("Current set: " + result.CurrentSet); Console.WriteLine("First " + result.ViewSize + " products:"); foreach (var product in result.Products) { Console.WriteLine("Product ID: " + product.Id + ", Name: " + product.Name); } Console.WriteLine(" Facets:"); Console.WriteLine("--------------------------"); foreach (var facetGroup in result.FacetGroups) { Console.WriteLine(" FacetGroup: " + facetGroup.Title); Console.WriteLine(" Edit URL: " + facetGroup.EditUrl); foreach (var facet in facetGroup.Facets) { Console.WriteLine(" " + facet.Title + " (" + facet.Count + ")"); } } Console.WriteLine(" Promotions:"); Console.WriteLine("--------------------------"); foreach (var promotion in result.Promotions) { Console.WriteLine("Name: " + promotion.Name); } Console.WriteLine(" Breadcrumbs:"); Console.WriteLine("--------------------------"); foreach (var breadcrumb in result.Breadcrumbs) { Console.WriteLine(" Breadcrumb: " + breadcrumb.Title + " (category: " + breadcrumb.IsCategory + ")"); } }
/// <summary> /// Process navigation links in product listers (next, previous etc). /// </summary> /// <param name="lister"></param> /// <param name="result"></param> /// <param name="facets"></param> protected void ProcessListerNavigationLinks(ProductListerWidget lister, IProductQueryResult result, IList <FacetParameter> facets) { int totalCount = result.TotalCount; int viewSize = result.ViewSize; int startIndex = result.StartIndex; int currentSet = result.CurrentSet; lister.NavigationData = new ListerNavigationData(); int viewSets = 1; if (totalCount > viewSize) { viewSets = (totalCount / viewSize) + 1; } lister.NavigationData.ViewSets = viewSets; if (viewSets > 1) { int nextStartIndex = -1; int previousStartIndex = -1; if (currentSet > 1) { previousStartIndex = startIndex - viewSize; } if (currentSet < viewSets) { nextStartIndex = startIndex + viewSize; } string baseUrl = ECommerceContext.LinkResolver.GetFacetLink(facets); if (String.IsNullOrEmpty(baseUrl)) { baseUrl += "?"; } else { baseUrl += "&"; } if (previousStartIndex != -1) { lister.NavigationData.PreviousUrl = baseUrl + "startIndex=" + previousStartIndex; } if (nextStartIndex != -1) { lister.NavigationData.NextUrl = baseUrl + "startIndex=" + nextStartIndex; } if (currentSet > 2) { lister.NavigationData.FirstUrl = baseUrl + "startIndex=0"; } if (currentSet + 1 < viewSets) { lister.NavigationData.LastUrl = baseUrl + "startIndex=" + ((viewSets - 1) * viewSize); } lister.NavigationData.CurrentSet = currentSet; lister.NavigationData.ShowNavigation = true; } else { lister.NavigationData.ShowNavigation = false; } }