Как получить параметры атрибутов продукта по коду атрибута в Magento 2.0

Я пытаюсь получить список раскрывающихся атрибутов и проверить, существует ли значение (если оно мне нужно, чтобы получить значение и назначить его для продукта), и если это не так, мне придется создать его и получить его значение, чтобы назначить его к продукту.

$attribute = $this->objectManager->create('Magento\Eav\Model\Entity\Attribute');
$attributeId = $attribute->getIdByCode('catalog_product','manufacturer');
$model = $this->objectManager->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
$model->load($attributeId);
print_r($model->getFrontendLabel());

5

Решение

Следуя рекомендациям Magento 2, вы не должен использовать ObjectManager самостоятельно. Вместо этого вы должны использовать внедрение зависимостей. Больше информации здесь

В вашем блоке / контроллере / помощнике … создайте конструктор и введите \Magento\Catalog\Model\Product\Attribute\Repository учебный класс. Например :

/**
* @var \Magento\Catalog\Model\Product\Attribute\Repository $_productAttributeRepository
*/
protected $_productAttributeRepository;

/**
* @param \Magento\Catalog\Model\Product\Attribute\Repository $productAttributeRepository
*/
public function __construct(\Magento\Catalog\Model\Product\Attribute\Repository $productAttributeRepository)
{
$this->_productAttributeRepository = $productAttributeRepository;
}

Затем, в вашем выделенном методе, вы хотите вызвать (PHPDoc добавлен для ясности) :

/** @var \Magento\Eav\Api\Data\AttributeOptionInterface[] $manufacturerOptions */
$manufacturerOptions = $this->_productAttributeRepository->get('manufacturer')->getOptions();

Теперь вы можете получить значения параметров и метки следующим образом:

foreach ($manufacturerOptions as $manufacturerOption) {
$manufacturerOption->getValue();  // Value
$manufacturerOption->getLabel();  // Label
}
16

Другие решения

<?php echo $_product->getResource()->getAttribute('movement')->getFrontend()->getValue($_product);?>

$ _product является объектом продукта
Приведенный выше код возвращает значение атрибута имени атрибута «движение».

2

Внедрить экземпляр \Magento\Catalog\Model\Product\Attribute\Repository в вашем конструкторе (в блоке, вспомогательном классе или где-либо еще):

/**
* @var \Magento\Catalog\Model\Product\Attribute\Repository $_productAttributeRepository
*/
protected $_productAttributeRepository;

/**
* ...
* @param \Magento\Catalog\Model\Product\Attribute\Repository $productAttributeRepository
* ...
*/
public function __construct(
...
\Magento\Catalog\Model\Product\Attribute\Repository $productAttributeRepository,
...
) {
...
$this->_productAttributeRepository = $productAttributeRepository;
...
}

Затем создайте метод в своем классе, чтобы получить атрибут по коду:

/**
* Get single product attribute data
*
* @return Magento\Catalog\Api\Data\ProductAttributeInterface
*/
public function getProductAttributeByCode($code)
{
$attribute = $this->_productAttributeRepository->get($code);
return $attribute;
}

Затем вы можете вызвать этот метод так, например, внутри файла .phtml

$attrTest = $block->getProductAttributeByCode('test');

Затем вы можете делать вызовы на объекте атрибута, например,

  1. Получить варианты: $attrTest->getOptions()
  2. Получить ярлык внешнего интерфейса для каждого магазина: $attrTest->getFrontendLabels()
  3. Отладка массива данных: echo '> ' . print_r($attrTest->debug(), true);

отладка: массив (
[attribute_id] => 274
[entity_type_id] => 4
[attribute_code] => product_manual_download_label
[backend_type] => varchar
[frontend_input] => текст
[frontend_label] => Руководство по продукту Загрузить ярлык
[is_required] => 0
[is_user_defined] => 1
[default_value] => Загрузка руководства по продукту
[is_unique] => 0
[is_global] => 0
[is_visible] => 1
[is_searchable] => 0
[is_filterable] => 0
[is_comparable] => 0
[is_visible_on_front] => 0
[is_html_allowed_on_front] => 1
[is_used_for_price_rules] => 0
[is_filterable_in_search] => 0
[used_in_product_listing] => 0
[used_for_sort_by] => 0
[is_visible_in_advanced_search] => 0
[position] => 0
[is_wysiwyg_enabled] => 0
[is_used_for_promo_rules] => 0
[is_required_in_admin_store] => 0
[is_used_in_grid] => 1
[is_visible_in_grid] => 1
[is_filterable_in_grid] => 1
[search_weight] => 1)

0

Ниже приведен код, помогающий найти конкретные значения атрибута. Как здесь, цвет находится в моем атрибуте, с кодом ниже мы можем получить то, что и все цвета отображаются с этим атрибутом.

$attributeId = Mage::getResourceModel(‘eav/entity_attribute’)>getIdByCode(‘catalog_product’,’color’);
$collection =Mage::getResourceModel(‘eav/entity_attribute_option_collection’)>setPositionOrder(‘asc’)->setAttributeFilter($attributeId)->setStoreFilter(0)->load();
print_r($collection->getData());
-7
По вопросам рекламы [email protected]