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?

gars simple
la source
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.

Ronak Chauhan
la source
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.

Khoa TruongDinh
la source