/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /** @var ProductAttributeFacet $criteriaPart */ $field = 'attributes.core.' . $criteriaPart->getField(); $this->criteriaParts[] = $criteriaPart; switch ($criteriaPart->getMode()) { case ProductAttributeFacet::MODE_VALUE_LIST_RESULT: case ProductAttributeFacet::MODE_RADIO_LIST_RESULT: $aggregation = new TermsAggregation($criteriaPart->getName()); $aggregation->setField($field); break; case ProductAttributeFacet::MODE_BOOLEAN_RESULT: $count = new ValueCountAggregation($criteriaPart->getName() . '_count'); $count->setField($field); $aggregation = new FilterAggregation($criteriaPart->getName()); $aggregation->setFilter(new ExistsFilter($field)); $aggregation->addAggregation($count); break; case ProductAttributeFacet::MODE_RANGE_RESULT: $aggregation = new TermsAggregation($criteriaPart->getName()); $aggregation->setField($field); break; default: return; } $search->addAggregation($aggregation); }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /** @var ProductAttributeCondition $criteriaPart */ $field = 'attributes.core.' . $criteriaPart->getField(); switch ($criteriaPart->getOperator()) { case ProductAttributeCondition::OPERATOR_EQ: $filter = new TermFilter($field, $criteriaPart->getValue()); break; case ProductAttributeCondition::OPERATOR_NEQ: $filter = new NotFilter(new TermFilter($field, $criteriaPart->getValue())); break; case ProductAttributeCondition::OPERATOR_LT: $filter = new RangeFilter($field, ['lt' => $criteriaPart->getValue()]); break; case ProductAttributeCondition::OPERATOR_LTE: $filter = new RangeFilter($field, ['lte' => $criteriaPart->getValue()]); break; case ProductAttributeCondition::OPERATOR_BETWEEN: $value = $criteriaPart->getValue(); $filter = new RangeFilter($field, ['gte' => $value['min'], 'lte' => $value['max']]); break; case ProductAttributeCondition::OPERATOR_GT: $filter = new RangeFilter($field, ['gt' => $criteriaPart->getValue()]); break; case ProductAttributeCondition::OPERATOR_GTE: $filter = new RangeFilter($field, ['gte' => $criteriaPart->getValue()]); break; case ProductAttributeCondition::OPERATOR_IN: $filter = new TermsFilter($field, $criteriaPart->getValue()); break; case ProductAttributeCondition::OPERATOR_STARTS_WITH: case ProductAttributeCondition::OPERATOR_ENDS_WITH: case ProductAttributeCondition::OPERATOR_CONTAINS: $filter = new QueryFilter(new TermFilter($field, $criteriaPart->getValue())); break; default: return; } if ($criteria->hasBaseCondition($criteriaPart->getName())) { $search->addFilter($filter); } else { $search->addPostFilter($filter); } }
/** * {@inheritdoc} */ public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context) { /** @var ProductAttributeSorting $criteriaPart */ $field = 'attributes.core.' . $criteriaPart->getField(); $search->addSort(new FieldSort($field, strtolower($criteriaPart->getDirection()))); }