Magento 2 получить все атрибуты продукта без идентификатора продукта


12

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

public function getMagentoAttributes()
{
    $values[] = array(
        'value' => '',
        'label' => 'Pick Product Attribute'
    );

    $categories = Mage::getResourceModel('catalog/product_attribute_collection')->getItems();

    foreach ($categories as $category) {
        if ($category->getFrontendLabel() != '') {
            $label = $category->getFrontendLabel();
        } else {
            $label = $category->getAttributecode();
        }

        $values[] = array(
            'value' => $category->getAttributecode(),
            'label' => $label
        );
    }
    return $values;
}

Есть ли способ в magento 2 сделать то же самое?


Я использовал код в соответствии с "RonakChauhan", он отлично работает в моем файле блока. Но я столкнулся с некоторой проблемой, мне нужна помощь в том, что я не могу отфильтровать атрибуты по их видимости, т.е. мне нужны атрибуты, статус которых установлен "visible = > да "в Admin ... Любая справка будет оценена ... Вот мой код для получения класса коллекции Атрибут продукта ProductList extends \ Magento \ Framework \ View \ Element \ Template {protected $ _attributeFactory; публичная функция __construct (\ Magento \ Catalogue \ Model \ ResourceModel \ Eav \ Attribute $ attributeFactory) {parent :: __ construct ($ context); $ this -> _ attrib
Гурджит Сингх

Ответы:


10
protected $_attributeFactory;

 public function __construct(
    ....
    \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attributeFactory,
    ....
) {
    ....
    $this->_attributeFactory = $attributeFactory;
    ....
}

public function <func_name>()
{
    $attributeInfo = $this->_attributeFactory->getCollection();

   foreach($attributeInfo as $attributes)
   {
        $attributeId = $attributes->getAttributeId();
        // You can get all fields of attribute here
   }
}

Здесь вы можете иметь целую коллекцию атрибутов, вы можете отфильтровать ее в соответствии с вашими потребностями.


как получить имя атрибута и идентификатор?
простой парень

используя foreachвы можете получить, getAttributeId()а такжеgetAttributeName()
Ронак Чаухан

Проверьте обновленный ответ
Ronak Chauhan

getAttributeName напечатать пустой
простой парень

1
echo "<pre>"; print_r($attributes);exit;используйте это в foreach и проверьте
Ронак Чаухан

8

Другая идея заключается в том, что мы должны попробовать использовать слой контрактов на обслуживание .

Используйте Magento\Eav\Api\AttributeRepositoryInterfaceдля получения атрибута eav.

У меня есть ответ уже здесь: /magento//a/161426/33057

Например:

    $searchCriteria = $this->searchCriteriaBuilder->create();
    $attributeRepository = $this->attributeRepository->getList(
        'catalog_product',
        $searchCriteria
    );

    foreach ($attributeRepository->getItems() as $items) {
        $items->getAttributeCode();
        $items->getFrontendLabel();
    }

ПРИМЕЧАНИЕ. Для кода типа сущности в getListметоде мы можем найти в eav_entity_typeтаблице.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.