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
                        });
                    }
                }
            });
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
 }