/** * @param QueryBuilder $query * @param ProductAttributeFacet $facet * @param Criteria $criteria * @param Struct\ShopContextInterface $context * @return null|RadioFacetResult|ValueListFacetResult */ private function createValueListFacetResult(QueryBuilder $query, ProductAttributeFacet $facet, Criteria $criteria, Struct\ShopContextInterface $context) { $sqlField = 'productAttribute.' . $facet->getField(); $query->addSelect($sqlField)->orderBy($sqlField)->groupBy($sqlField); $this->addTranslations($query, $context); /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */ $statement = $query->execute(); $result = $statement->fetchAll(); if (empty($result)) { return null; } $actives = []; /**@var $condition ProductAttributeCondition*/ if ($condition = $criteria->getCondition($facet->getName())) { $actives = $condition->getValue(); } $items = array_map(function ($row) use($actives, $facet) { $viewName = $row[$facet->getField()]; $translation = $this->extractTranslations($row, $facet->getField()); if ($translation !== null) { $viewName = $translation; } return new ValueListItem($row[$facet->getField()], $viewName, in_array($row[$facet->getField()], $actives)); }, $result); if ($facet->getMode() == ProductAttributeFacet::MODE_RADIO_LIST_RESULT) { return new RadioFacetResult($facet->getName(), $criteria->hasCondition($facet->getName()), $facet->getLabel(), $items, $facet->getFormFieldName()); } else { return new ValueListFacetResult($facet->getName(), $criteria->hasCondition($facet->getName()), $facet->getLabel(), $items, $facet->getFormFieldName()); } }
/** * @param ProductAttributeFacet $criteriaPart * @param $data * @param Criteria $criteria * @return null|RadioFacetResult|ValueListFacetResult */ private function createItemListResult(ProductAttributeFacet $criteriaPart, $data, Criteria $criteria) { $values = array_column($data['buckets'], 'key'); if (empty($values)) { return null; } $actives = []; /**@var $condition ProductAttributeCondition*/ if ($condition = $criteria->getCondition($criteriaPart->getName())) { $actives = $condition->getValue(); } $items = array_map(function ($row) use($actives) { return new ValueListItem($row, $row, in_array($row, $actives)); }, $values); if ($criteriaPart->getMode() == ProductAttributeFacet::MODE_RADIO_LIST_RESULT) { $template = $criteriaPart->getTemplate(); if (!$template) { $template = 'frontend/listing/filter/facet-radio.tpl'; } return new RadioFacetResult($criteriaPart->getName(), $criteria->hasCondition($criteriaPart->getName()), $criteriaPart->getLabel(), $items, $criteriaPart->getFormFieldName(), [], $template); } else { $template = $criteriaPart->getTemplate(); if (!$template) { $template = 'frontend/listing/filter/facet-value-list.tpl'; } return new ValueListFacetResult($criteriaPart->getName(), $criteria->hasCondition($criteriaPart->getName()), $criteriaPart->getLabel(), $items, $criteriaPart->getFormFieldName(), [], $template); } }