Cursos Magento

Obtendo uma coleção de produtos no Magento 2

,

Publicado em 22 de agosto de 2022

Neste artigo veremos algumas formas de se obter uma coleção de produtos (collection) no Magento. Também vamos ver como filtrar estes produtos por atributo ou categoria.

Use Injeção de Dependência 🫣

Nos exemplos abaixo usarei o $objectManager como referência a \Magento\Framework\App\ObjectManager::getInstance(). Fiz isto desta forma apenas para simplificar a quantidade de código e ir direto ao ponto.

No entanto, ao desenvolver seus módulos e componentes, utilize injeção de dependência. Ou seja, injete as classes e factories que usamos aqui em seus métodos construtores.

Para mais informações, assista o Magento 2: O Curso, e a aula gratuita sobre injeção de dependência.

Obtendo uma coleção de produtos

$productCollectionFactory = $objectManager->get('\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
$collection = $productCollectionFactory->create();
$collection->setPage(1, 20); //define paginação (página 1, 20 produtos por vez)
foreach ($collection as $product) {
    print_r($product->getData());
}

Coleção de produtos com todos os atributos

$productCollectionFactory = $objectManager->get('\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
$collection = $productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->setPage(1, 20);
 
foreach ($collection as $product) {
    print_r($product->getData());
}

Produtos de uma categoria

$productCollectionFactory = $objectManager->get('\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
$categoryCollectionFactory = $objectManager->get('\Magento\Catalog\Model\CategoryFactory');
$categoryId = '3'; // ID da Categoria
$category = $categoryCollectionFactory->create()->load($categoryId);
 
$collection = $productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->addCategoryFilter($category);
$collection->addAttributeToFilter('visibility', \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH); //se o produto é visível individualmente
$collection->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED); //somente produtos habilitados
 
foreach ($collection as $product) {
    print_r($product->getData());
}

Dica do Clube Magenteiro 🤘

Para testar os exemplos acima com mais facilidade e sem precisar criar um módulo pra isso, você pode usar o dev:console 🔒. Depois basta substituir a variável $objectManager por $di.

Usando APIs (Alternativa)

Se você precisa da lista de produtos (com o sem filtros) para usar em uma integração externa, também pode usar as APIs do Magento. Você pode conferir uma série de exemplos gratuitos aqui do blog.

Se preferir, confira o curso completo de APIs, com mais de 650 exemplos de uso.


Fonte: Inspirado no Artigo da Webcreta

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/colecao-de-produtos-como-pegar/"]