Smile\ElasticsuiteCatalogRule\Model\Rule\Condition\Product\AttributeList::getAttributeCollection PHP Метод

getAttributeCollection() публичный Метод

Retrieve attribute collection prefiltered with only attribute usable in rules.
public getAttributeCollection ( ) : Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
Результат 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;
    }

Usage Example

Пример #1
0
 /**
  * {@inheritDoc}
  */
 public function loadAttributeOptions()
 {
     $productAttributes = $this->attributeList->getAttributeCollection();
     $attributes = [];
     foreach ($productAttributes as $attribute) {
         $attributes[$attribute->getAttributeCode()] = $attribute->getFrontendLabel();
     }
     $this->_addSpecialAttributes($attributes);
     asort($attributes);
     $this->setAttributeOption($attributes);
     return $this;
 }