/** * @param QueryBuilder $query * @param ProductAttributeFacet $facet * @param Criteria $criteria * @return null|BooleanFacetResult */ private function createBooleanFacetResult(QueryBuilder $query, ProductAttributeFacet $facet, Criteria $criteria) { $sqlField = 'productAttribute.' . $facet->getField(); $query->select('COUNT(' . $sqlField . ')'); /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */ $statement = $query->execute(); $result = $statement->fetch(\PDO::FETCH_COLUMN); if (empty($result)) { return null; } return new BooleanFacetResult($facet->getName(), $facet->getFormFieldName(), $criteria->hasCondition($facet->getName()), $facet->getLabel()); }
/** * @param ProductAttributeFacet $criteriaPart * @param $data * @param Criteria $criteria * @return RangeFacetResult */ private function createRangeResult(ProductAttributeFacet $criteriaPart, $data, Criteria $criteria) { $values = array_column($data['buckets'], 'key'); $min = min($values); $max = max($values); $template = $criteriaPart->getTemplate(); if (!$template) { $template = 'frontend/listing/filter/facet-range.tpl'; } $activeMin = $min; $activeMax = $max; /**@var $condition ProductAttributeCondition*/ if ($condition = $criteria->getCondition($criteriaPart->getName())) { $data = $condition->getValue(); $activeMin = $data['min']; $activeMax = $data['max']; } return new RangeFacetResult($criteriaPart->getName(), $criteria->hasCondition($criteriaPart->getName()), $criteriaPart->getLabel(), $min, $max, $activeMin, $activeMax, 'min' . $criteriaPart->getFormFieldName(), 'max' . $criteriaPart->getFormFieldName(), [], $template); }