IT-Storm

Лучший код тот, который не написан

Menu

Magento 2: атрибуты (attributes)

Magento 2: атрибуты (attributes)

Описание флагов атрибутов (официальная документация): docs.magento.com

Некоторые полезные константы содержатся здесь: Magento/Catalog/Api/Data/EavAttributeInterface

Взять все атрибуты продуктов текущего стора
use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
use Magento\Store\Model\StoreManagerInterface;

$attributes = $this->_attributeCollectionFactory
    ->create()
    ->addHasOptionsFilter()
    ->addDisplayInAdvancedSearchFilter()
    ->addStoreLabel($this->_storeManager->getStore()->getId())
    ->setOrder('main_table.attribute_id', 'asc')
    ->load();
Обновить заначение атрибута у атрибута продукта
(не значение атрибута продукта, а значение атрибуту атрибута)
use Magento\Eav\Setup\EavSetup;

$this->eavSetup->updateAttribute(Product::ENTITY, 'barcode', 'used_in_product_listing', 1);
Взять атрибут у объекта любой сущности
(в данном случае кастомер)
$customerModel = $this->customerFactory->create();
$this->customerResourceModel->load($customerModel, $customerId);

return $customerModel->getAdditionalPhone(); // в случае если код атрибута additional_phone
Добавить продуктовый атрибут во все атрибут-сеты (Attribute Set) продуктов
use Magento\Eav\Api\AttributeManagementInterface;
use Magento\Eav\Setup\EavSetup;
use Magento\Catalog\Model\Config;

public const ATTRIBUTE_GROUP = 'General';
public const ATTRIBUTE_CODE = 'manufacturer';

$entityTypeId = $this->eavSetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY);
$attributeSetIds = $this->eavSetup->getAllAttributeSetIds($entityTypeId); // Взять айдишники всех атрибутсетов (только для ENTITY = 'catalog_product') 
foreach ($attributeSetIds as $attributeSetId) {
    if ($attributeSetId) {
        $group_id = $this->config->getAttributeGroupId($attributeSetId, self::ATTRIBUTE_GROUP);
        $this->attributeManagement->assign(
            Product::ENTITY,
            $attributeSetId,
            $group_id,
            self::ATTRIBUTE_CODE,
            999
        );
    }
}

Magento 2