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?

cara simples
fonte
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.

Ronak Chauhan
fonte
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.

Khoa TruongDinh
fonte