Magento 2 obtient tous les attributs de produit sans identifiant de produit


12

Je souhaite récupérer tous les attributs de produit disponibles, puis les convertir en nom et valeur pour mon champ d'options de sélection. Dans Magento 1, je peux y arriver comme ceci:

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

Existe-t-il un moyen dans magento 2 de faire la même chose?


J'ai utilisé du code selon "RonakChauhan", cela fonctionne bien dans mon fichier de blocage Mais je suis confronté à un problème, j'ai besoin d'aide car je ne peux pas filtrer les attributs en fonction de leur visibilité, c'est-à-dire que j'ai besoin des attributs dont le statut est défini "visible = > oui "dans Admin ... Toute aide sera appréciée ... Voici mon code pour obtenir la classe de collection Product Attribute ProductList étend \ Magento \ Framework \ View \ Element \ Template {protected $ _attributeFactory; fonction publique __construct (\ Magento \ Catalog \ Model \ ResourceModel \ Eav \ Attribute $ attributeFactory) {parent :: __ construct ($ context); $ this -> _ attrib
Gurjeet Singh

Réponses:


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

Ici, vous pouvez avoir toute une collection d'attributs, vous pouvez le filtrer selon vos besoins.


comment obtenir le nom et l'identifiant de l'attribut?
mec simple

en utilisant foreachvous pouvez obtenir getAttributeId()ainsigetAttributeName()
Ronak Chauhan

Vérifier la réponse mise à jour
Ronak Chauhan

getAttributeName print blank
simple guy

1
echo "<pre>"; print_r($attributes);exit;utiliser ceci dans foreach et vérifier
Ronak Chauhan

8

Une autre idée est que nous devrions essayer avec la couche de contrats de service .

Utilisez Magento\Eav\Api\AttributeRepositoryInterfacepour obtenir l'attribut eav.

J'ai déjà une réponse ici: /magento//a/161426/33057

Par exemple:

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

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

REMARQUE: Pour le code de type d'entité dans la getListméthode, nous pouvons trouver dans le eav_entity_typetableau.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.