Magento 2 otrzymuje wszystkie atrybuty produktu bez identyfikatora produktu

12

Chcę pobrać wszystkie atrybuty produktu, które są dostępne, a następnie przekonwertować je na nazwę i wartość dla mojego pola wyboru opcji. W Magento 1 mogę to osiągnąć w następujący sposób:

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;
}

Czy w Magento 2 można zrobić to samo?

prosty chłopak
źródło
Użyłem kodu zgodnie z „RonakChauhan”, działa dobrze w moim pliku bloku, ale mam do czynienia z pewnym problemem, potrzebuję pomocy, ponieważ nie jestem w stanie filtrować atrybutów według ich widoczności, tj. Potrzebuję atrybutów, których status jest ustawiony ”visible = > tak "w Administratorze ... Każda pomoc będzie doceniona ... Oto mój Kod do pobierania klasy kolekcji Product Attribute ProductList rozszerza \ Magento \ Framework \ View \ Element \ Template {chroniony $ _attributeFactory; funkcja publiczna __construct (\ Magento \ Catalog \ Model \ ResourceModel \ Eav \ Attribute $ attributeFactory) {parent :: __ construct ($ context); $ this -> _ attrib
Gurjeet Singh

Odpowiedzi:

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
   }
}

Tutaj możesz mieć całą kolekcję atrybutów, możesz je filtrować według własnych potrzeb.

Ronak Chauhan
źródło
jak uzyskać nazwę atrybutu i identyfikator?
prosty facet
za pomocą foreachmożna uzyskać getAttributeId()tak dobrze, jakgetAttributeName()
Ronak Chauhan
Sprawdź zaktualizowaną odpowiedź
Ronak Chauhan
getAttributeName print blank
prosty facet
1
echo "<pre>"; print_r($attributes);exit;użyj tego w foreach i sprawdź
Ronak Chauhan
8

Innym pomysłem jest to, że powinniśmy wypróbować warstwę kontraktów serwisowych .

Użyj, Magento\Eav\Api\AttributeRepositoryInterfaceaby uzyskać atrybut eav.

Mam już odpowiedź tutaj: /magento//a/161426/33057

Na przykład:

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

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

UWAGA: W przypadku kodu typu jednostki w getListmetodzie możemy znaleźć w eav_entity_typetabeli.

Khoa TruongDinh
źródło