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.