public ParsedFilter Parse(FilterDescription definition, CommerceDataSourceContext context) { var paramValues = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase); foreach (var paramDef in definition.Parameters) { var param = ParameterValues.Find(p => p.ParameterName.Equals(paramDef.Name, StringComparison.OrdinalIgnoreCase)); // Parameter is required but it's missing in data source settings (might cause by code changes). Parse failed. if (paramDef.Required && param == null) { return(null); } var strParamValue = ParameterizedFieldValue.GetFieldValue(param.ParameterValue, context.ValueProvider); // Parameter is required but it's missing in current context. Parse failed. if (paramDef.Required && strParamValue == null) { return(null); } var paramValue = StringConvert.ToObject(strParamValue, paramDef.ValueType); paramValues.Add(paramDef.Name, paramValue); } return(new ParsedFilter(definition.Name) { ParameterValues = paramValues }); }
public void OnResolvedPage(System.Web.Mvc.ControllerContext controllerContext, CMS.Sites.View.PageRequestContext pageRequestContext) { var page = pageRequestContext.Page; if (!page.CustomFields.ContainsKey("ProductId")) { return; } var value = ParameterizedFieldValue.GetFieldValue(page.CustomFields["ProductId"], pageRequestContext.GetValueProvider()); if (String.IsNullOrEmpty(value)) { return; } int productId; if (Int32.TryParse(value, out productId)) { BehaviorReceivers.Receive(Site.Current.GetCommerceInstanceName(), new Behavior { Type = BehaviorTypes.View, ItemId = productId.ToString(), UserId = controllerContext.RequestContext.HttpContext.EnsureVisitorUniqueId() }); } }
private int EvaluatePageSize(CommerceDataSourceContext context) { var pageSize = ParameterizedFieldValue.GetFieldValue(PageSize, context.ValueProvider); if (String.IsNullOrEmpty(pageSize)) { return(60); } return(Convert.ToInt32(pageSize)); }
public Filter Parse(IValueProvider valueProvider) { var parsed = new Filter { Name = Name, Fields = Fields, UseRangeFiltering = UseRangeFiltering, FieldValue = ParameterizedFieldValue.GetFieldValue(FieldValue, valueProvider), FromValue = ParameterizedFieldValue.GetFieldValue(FromValue, valueProvider), FromInclusive = FromInclusive, ToValue = ParameterizedFieldValue.GetFieldValue(ToValue, valueProvider), ToInclusive = ToInclusive, AnalyzeInput = AnalyzeInput }; return(parsed); }
private int EvaluatePageNumber(CommerceDataSourceContext context) { var pageNumber = ParameterizedFieldValue.GetFieldValue(PageNumber, context.ValueProvider); if (String.IsNullOrEmpty(pageNumber)) { return(1); } var page = Convert.ToInt32(pageNumber); if (page < 1) { page = 1; } return(page); }
public object Execute(CommerceDataSourceContext context) { var culture = CultureInfo.InvariantCulture; if (!String.IsNullOrEmpty(context.Site.Culture)) { var languageStore = LanguageStores.Get(context.Instance); if (languageStore.Exists(context.Site.Culture)) { culture = CultureInfo.GetCultureInfo(context.Site.Culture); } } var store = IndexStores.Get <ProductModel>(context.Instance, culture); var query = store.Query(); // Apply defined filters if (Filters != null) { query = query.ApplyFilters(ParseFilters(context), culture); } // Apply implicit facet filters repsented in url query IList <Filter> facetFilters = null; if (IncludeFacets && Facets != null && Facets.Count > 0) { facetFilters = GetFacetFilters(context); if (facetFilters.Count > 0) { query = query.ApplyFilters(facetFilters, culture); } } // Apply sorting var sortField = ParameterizedFieldValue.GetFieldValue(SortField, context.ValueProvider); if (!String.IsNullOrEmpty(sortField)) { query.AddOrderBy(sortField); } // Execute result var result = new ProductSearchResult(); var pagination = query.Paginate(EvaluatePageNumber(context) - 1, EvaluatePageSize(context)); result.Total = pagination.TotalItems; result.Products = ToProducts(pagination.Cast <ProductModel>().ToList(), context.Site.Commerce()); // Get facets if (IncludeFacets && Facets != null && Facets.Count > 0) { result.Facets = query.ToFacets(Facets); // Generate facet urls var url = HttpContext.Current.Request.RawUrl; CategoryTree localizedCategoryTree = null; foreach (var facetResult in result.Facets) { // Categories are in tree structure, and all level of categories of a product are indexed for seaier search. // If Category facet is not presented in url query, we should only return the ROOT level categories. // If Category facet is presented in url query, we should only return it's children categories. // Otherwise there'll be too many category results. if (facetResult.Field == FacetDefinition.Category.Field) { if (localizedCategoryTree == null) { localizedCategoryTree = CategoryTree.Get(context.Instance).Localize(culture, "Name"); } var filter = facetFilters.FirstOrDefault(f => f.Name == FacetDefinition.Category.Name); if (filter != null) { var category = localizedCategoryTree.Desendants().FirstOrDefault(c => c.Name == filter.FieldValue); foreach (var value in facetResult.Values.ToList()) { if (!category.Children.Any(c => c.Name == value.Term)) { facetResult.Values.Remove(value); } } } else { foreach (var value in facetResult.Values.ToList()) { if (!localizedCategoryTree.Categories.Any(c => c.Name == value.Term)) { facetResult.Values.Remove(value); } } } } foreach (var value in facetResult.Values) { var paramName = facetResult.Name; value.Url = UrlUtility.RemoveQuery(url, paramName); value.Url = UrlUtility.AddQueryParam(value.Url, paramName, value.Term); } } } return(result); }
public string GetFieldValue(string field) { return(ParameterizedFieldValue.GetFieldValue(field, ValueProvider)); }