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", він працює чудово у своєму блоковому файлі, але я зіткнувся з певною проблемою, мені потрібна допомога, що я не в змозі фільтрувати атрибути відповідно до їх видимості, тобто мені потрібні атрибути, статус яких встановлено "видимо = > так "в адміністраторі ... Будь-яка допомога буде оцінена ... Ось мій код для отримання колекційного класу колекції атрибутів продукту ProductList extents \ Magento \ Framework \ View \ Element \ Template {protected $ _attributeFactory; публічна функція __construct (\ Magento \ Каталог \ Модель \ ResourceModel \ Eav \ Attribute $ attributeFactory) {parent :: __ build ($ контекст); $ this -> _ attrib
Gurjeet Singh

Відповіді:


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

Перевірити оновлену відповідь
Ronak Chauhan

getAttributeName print blank
простий хлопець

1
echo "<pre>"; print_r($attributes);exit;використовувати це для передбачення та перевірки
Ронак Чаухан

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.