/** * Retrieve attribute collection prefiltered with only attribute usable in rules. * * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection */ public function getAttributeCollection() { if ($this->attributeCollection === null) { $this->attributeCollection = $this->attributeCollectionFactory->create(); $mapping = $this->getMapping(); $attributeNameMapping = array_flip($this->fieldNameMapping); $arrayNameCb = function (FieldInterface $field) use($attributeNameMapping) { $attributeName = $field->getName(); if (isset($attributeNameMapping[$attributeName])) { $attributeName = $attributeNameMapping[$attributeName]; } return $attributeName; }; $attributeFilterCb = function (FieldInterface $field) use($mapping) { try { $fieldName = $field->getName(); $optionTextFieldName = $this->mappingHelper->getOptionTextFieldName($fieldName); $field = $mapping->getField($optionTextFieldName); } catch (\Exception $e) { } return $field->isFilterable() || $field->isSearchable(); }; $fieldNames = array_map($arrayNameCb, array_filter($this->getMapping()->getFields(), $attributeFilterCb)); $this->attributeCollection->addFieldToFilter('attribute_code', $fieldNames)->addFieldToFilter('backend_type', ['neq' => 'datetime']); } return $this->attributeCollection; }
/** * @return $this */ public function _getAttributes() { $attributes = $this->attributeCollection->addFieldToFilter('is_visible', 1)->addFieldToFilter('frontend_input', ['nin' => ['boolean', 'date', 'datetime', 'gallery', 'image', 'media_image', 'select', 'multiselect', 'textarea']])->load(); return $attributes; }