Post ensinando a como listar os produtos no Magento 2 criando uma Collection, adicionando filtros para exibir apenas os produtos em estoque, ativos e presentes em determinadas categorias.
Exemplo:
namespace [YourClassNameSpace]; class [YourClassName] { protected $_productCollectionFactory; public function __construct( .... \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory, ..... ) { ..... $this->_productCollectionFactory = $productCollectionFactory; ..... } public function getProductCollection(){ $collection = $this->_productCollectionFactory->create(); $collection ->addMinimalPrice() ->addFinalPrice() ->addTaxPercents() ->addAttributeToSelect('*') ->addUrlRewrite(); return $collection; } }
Para criar um módulo clique neste link: Como criar um Módulo no Magento 2
Você deve criar o arquivo HelloWord.php no diretório: Rogertakemiya/Test/Block
Conteúdo:
<?php namespace Rogertakemiya\Test\Block; class HelloWorld extends \Magento\Framework\View\Element\Template { protected $_productCollectionFactory; public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory, array $data = [] ) { $this->_productCollectionFactory = $productCollectionFactory; parent::__construct($context, $data); } public function getProductCollection() { $collection = $this->_productCollectionFactory->create(); $collection->addAttributeToSelect('*'); $collection->setPageSize(3); // fetching only 3 products return $collection; } } ?>
Para listar os produtos em um arquivo phtml, utilize:
$productCollection = $block->getProductCollection(); foreach ($productCollection as $product) { print_r($product->getData()); echo "<br>"; }
Utilizar o Object Manager não é considera uma das melhores praticas para esse tipo de tarefa.
Por que?
A forma correta seria:
Filtrando apenas os produtos ativos “habilitados” e com estoque.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory'); $collection = $productCollection->create() ->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED) ->joinField('qty', 'cataloginventory_stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left') ->addAttributeToSelect('*') ->load(); foreach ($collection as $product){ echo 'Name = '.$product->getName().'<br>'; }
$productcollection = $this->_objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection') ->addAttributeToSelect(['name', 'price', 'image']) ->addAttributeToFilter('name', array('like' => '%Iphone%')) ->setPageSize(10,1);
$productCollection = $this->productCollectionFactory->create(); $productCollection->addAttributeToSelect('*'); $productCollection->addCategoriesFilter(array('in' => $catalog_ids)); /* $catalog_ids, array com os ID das categorias */
Listar os produtos no Magento 2 pode ser considerado uma tarefa complexa devido a necessidade de se criar um módulo para isso.
Evite utilizar o objectManager, qualquer dúvida por favor, fique a vontade para fazer um comentário.
Segurança: Atualizações frequentes geralmente incluem patches de segurança para corrigir vulnerabilidades identificadas. Ao manter o Magento atualizado, você reduz significativamente…
Como adicionar uma mensagem de Alerta ou Aviso do Admin do Magento 2 Injete o Magento\Framework\Message\ManagerInterface no construtor da sua…
Para exibir as mensagens adicionadas na classe Magento\Framework\Message\ManagerInterface em um arquivo .phtml, você pode usar o seguinte código: <?php $objectManager…
Para criar um script no Magento 2 que exporte as categorias para um arquivo XML com o nome da categoria,…
Para definir um vídeo MP4 como plano de fundo em um <div> usando HTML e CSS, você pode seguir estas…
Como desativar o "lastname" no Magento 2 e Adobe Commerce Desativando a obrigatoriedade do campo Execute a SQL abaixo diretamente…