Magento 2 obtiene todos los atributos del producto sin identificación del producto

12

Quiero recuperar todos los atributos del producto que están disponibles, luego convertirlo a nombre y valor para mi campo de opciones de selección. En Magento 1 puedo lograrlo así:

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

¿Hay alguna manera en magento 2 para hacer lo mismo?

chico sencillo
fuente
He usado el código de acuerdo con "RonakChauhan", funciona bien en mi archivo de bloque. Pero estoy enfrentando algún problema, necesito ayuda porque no puedo filtrar los atributos de acuerdo con su visibilidad, es decir, necesito los atributos cuyo estado está configurado "visible = > yes "en Admin ... Cualquier ayuda será apreciada ... Aquí está mi código para obtener la clase de colección de Product Attribute ProductList extend \ Magento \ Framework \ View \ Element \ Template {protected $ _attributeFactory; función pública __construct (\ Magento \ Catalog \ Model \ ResourceModel \ Eav \ Attribute $ attributeFactory) {parent :: __ construct ($ context); $ this -> _ attrib
Gurjeet Singh

Respuestas:

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

Aquí puede tener una colección completa de atributos, puede filtrarla según sus necesidades.

Ronak Chauhan
fuente
¿Cómo obtener el nombre y la identificación del atributo?
chico simple
usando foreachpuede obtener getAttributeId()tan bien comogetAttributeName()
Ronak Chauhan
Verificar respuesta actualizada
Ronak Chauhan
getAttributeName print blank
simple guy
1
echo "<pre>"; print_r($attributes);exit;use esto en foreach y verifique
Ronak Chauhan
8

Otra idea es que deberíamos probar con la capa de contratos de servicio .

Use Magento\Eav\Api\AttributeRepositoryInterfacepara obtener el atributo eav.

Ya tengo una respuesta aquí: /magento//a/161426/33057

Por ejemplo:

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

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

NOTA: Para el código de tipo de entidad en el getListmétodo, podemos encontrarlo en la eav_entity_typetabla.

Khoa TruongDinh
fuente