Magento 2 obtém todos os atributos do produto sem o ID do produto


12

Desejo recuperar todos os atributos do produto disponíveis e convertê-los em nome e valor para o meu campo de opções selecionadas. No Magento 1, posso consegui-lo assim:

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 uma maneira no magento 2 de fazer a mesma coisa?


Eu usei o código de acordo com o "RonakChauhan". Ele está funcionando bem no meu arquivo de bloco. Mas estou enfrentando um problema. Preciso de ajuda, pois não consigo filtrar os atributos de acordo com a visibilidade deles, ou seja, preciso dos atributos cujo status está definido "visible = > yes "em Admin ... Qualquer ajuda será apreciada ... Aqui está o meu código para obter a classe de coleção do Product Attribute ProductList estende \ Magento \ Framework \ View \ Element \ Template {protected $ _attributeFactory; função pública __construct (\ Magento \ Catalog \ Model \ ResourceModel \ Eav \ Attribute $ attributeFactory) {parent :: __ construct ($ context); $ this -> _ attrib
Gurjeet Singh

Respostas:


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

Aqui você pode ter uma coleção inteira de atributos, filtrá-lo conforme sua necessidade.


como obter o nome e o ID do atributo?
cara simples

usando foreachvocê pode obter getAttributeId(), bem comogetAttributeName()
Ronak Chauhan 10/17/17

Verificar resposta atualizada
Ronak Chauhan 10/17/17

getAttributeName print blank
simple guy

1
echo "<pre>"; print_r($attributes);exit;usar isso em foreach e verificar
Ronak Chauhan

8

Outra idéia é que devemos tentar com a camada de contratos de serviço .

Use Magento\Eav\Api\AttributeRepositoryInterfacepara obter o atributo eav.

Já tenho uma resposta aqui: /magento//a/161426/33057

Por exemplo:

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

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

NOTA: Para o código do tipo de entidade no getListmétodo, podemos encontrar na eav_entity_typetabela.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.