9 use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory;
29 private $collectionFactory;
34 private $searchableAttributes;
42 CollectionFactory $collectionFactory
45 $this->collectionFactory = $collectionFactory;
53 $searchableAttributes = $this->getSearchableAttributes();
55 $defaultSource = isset(
$data[
'source']) ?
$data[
'source'] :
null;
56 $additionalFields = $this->convert($searchableAttributes, $defaultSource,
null);
58 $data[
'fields'] = $this->merge(
$data[
'fields'], $additionalFields);
68 private function getSearchableAttributes()
70 if ($this->searchableAttributes ===
null) {
71 $this->searchableAttributes = [];
74 $productAttributes = $this->collectionFactory->create();
75 $productAttributes->addToIndexFilter(
true);
90 return $this->searchableAttributes;
99 private function convert(array
$attributes, $defaultSource, $defaultHandler)
105 'source' => $defaultSource,
106 'handler' => $defaultHandler,
120 private function getType(Attribute
$attribute)
123 $isFilterable =
$attribute->getData(
'is_filterable') ||
$attribute->getData(
'is_filterable_in_search');
124 $isSearchable =
$attribute->getData(
'is_searchable');
125 if ($isSearchable && $isFilterable) {
127 }
elseif ($isSearchable) {
128 $type =
'searchable';
129 }
elseif ($isFilterable) {
130 $type =
'filterable';
141 private function merge(array $dataFields, array $searchableFields)
143 foreach ($searchableFields as $field) {
144 if (!isset($dataFields[$field[
'name']])) {
145 $dataFields[$field[
'name']] = $field;
elseif(isset( $params[ 'redirect_parent']))
addDynamicData(array $data)
__construct(Config $eavConfig, CollectionFactory $collectionFactory)