protected virtual void ConvertCategory(CatalogSearchQuery query, string origin) { if (origin == "Catalog/Category") { // We don't need category facetting in category pages. return; } var alias = _catalogSearchQueryAliasMapper.GetCommonFacetAliasByGroupKind(FacetGroupKind.Category, query.LanguageId ?? 0); if (TryGetValueFor(alias ?? "c", out List <int> ids) && ids != null && ids.Any()) { // TODO; (mc) Get deep ids (???) Make a low-level version of CatalogHelper.GetChildCategoryIds() query.WithCategoryIds(_catalogSettings.IncludeFeaturedProductsInNormalLists ? null : false, ids.ToArray()); } AddFacet(query, FacetGroupKind.Category, true, FacetSorting.HitsDesc, descriptor => { if (ids != null) { foreach (var id in ids) { descriptor.AddValue(new FacetValue(id, IndexTypeCode.Int32) { IsSelected = true }); } } }); }
protected virtual NameValueCollection GetQueryParts(Facet facet) { string name = null; string value = null; int entityId; var group = facet.FacetGroup; var val = facet.Value; var result = new NameValueCollection(2); switch (group.Kind) { case FacetGroupKind.Attribute: if (facet.Value.TypeCode == IndexTypeCode.Double) { value = "{0}~{1}".FormatInvariant( val.Value != null ? ((double)val.Value).ToString(CultureInfo.InvariantCulture) : "", val.UpperValue != null ? ((double)val.UpperValue).ToString(CultureInfo.InvariantCulture) : ""); } else { entityId = val.Value.Convert <int>(); value = _mapper.GetAttributeOptionAliasById(entityId, _languageId) ?? "opt" + entityId; } name = _mapper.GetAttributeAliasById(val.ParentId, _languageId) ?? "attr" + val.ParentId; result.Add(name, value); break; case FacetGroupKind.Variant: entityId = val.Value.Convert <int>(); name = _mapper.GetVariantAliasById(val.ParentId, _languageId) ?? "vari" + val.ParentId; value = _mapper.GetVariantOptionAliasById(entityId, _languageId) ?? "opt" + entityId; result.Add(name, value); break; case FacetGroupKind.Category: case FacetGroupKind.Brand: case FacetGroupKind.Price: case FacetGroupKind.Rating: case FacetGroupKind.DeliveryTime: case FacetGroupKind.Availability: case FacetGroupKind.NewArrivals: value = val.ToString(); if (value.HasValue()) { name = _mapper.GetCommonFacetAliasByGroupKind(group.Kind, _languageId) ?? _queryNames[group.Kind]; result.Add(name, value); } break; } return(result); }
protected override Dictionary <string, string> GetQueryParts(Facet facet) { var result = new Dictionary <string, string>(); string name; string value; int entityId; var val = facet.Value; var languageId = _workContext.WorkingLanguage.Id; switch (facet.FacetGroup.Kind) { case FacetGroupKind.Attribute: if (facet.Value.TypeCode == IndexTypeCode.Double) { value = "{0}~{1}".FormatInvariant( val.Value != null ? ((double)val.Value).ToString(CultureInfo.InvariantCulture) : string.Empty, val.UpperValue != null ? ((double)val.UpperValue).ToString(CultureInfo.InvariantCulture) : string.Empty); } else { entityId = val.Value.Convert <int>(); value = _catalogAliasMapper.GetAttributeOptionAliasById(entityId, languageId) ?? "opt" + entityId; } name = _catalogAliasMapper.GetAttributeAliasById(val.ParentId, languageId) ?? "attr" + val.ParentId; result[name] = value; break; case FacetGroupKind.Variant: entityId = val.Value.Convert <int>(); name = _catalogAliasMapper.GetVariantAliasById(val.ParentId, languageId) ?? "vari" + val.ParentId; value = _catalogAliasMapper.GetVariantOptionAliasById(entityId, languageId) ?? "opt" + entityId; result[name] = value; break; case FacetGroupKind.Category: case FacetGroupKind.Brand: case FacetGroupKind.Price: case FacetGroupKind.Rating: case FacetGroupKind.DeliveryTime: case FacetGroupKind.Availability: case FacetGroupKind.NewArrivals: value = val.ToString(); if (value.HasValue()) { name = _catalogAliasMapper.GetCommonFacetAliasByGroupKind(facet.FacetGroup.Kind, languageId) ?? _queryNames[facet.FacetGroup.Kind]; result[name] = value; } break; } return(result); }
protected virtual bool GetValueFor <T>(CatalogSearchQuery query, string key, FacetGroupKind kind, out T value) { return(GetValueFor(_catalogSearchQueryAliasMapper.GetCommonFacetAliasByGroupKind(kind, query.LanguageId ?? 0) ?? key, out value)); }