Estou tentando recuperar os atributos do produto atual em um bloco no Magento 2. Posso obter um produto, como o id 1:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->create('\Magento\Catalog\Model\ProductRepository')->getById(1);
Não sei como obter o ID do produto atual. Como faço isso?
getProduct()
emMagento\Catalog\Block\Product\View
Respostas:
Para obter o produto atual, uma das maneiras recomendadas é:
Magento\Catalog\Block\Product\View\AbstractView
.$block->getProduct()
no seu arquivo phtml.fonte
Embora outras respostas estejam corretas, elas também não são a solução recomendada / adequada.
O uso do ObjectManager é absolutamente proibido no Magento 2. Portanto, não confie nesta solução, mas use o DI adequado para isso. Para aprender como usar o DI no Magento 2, consulte este recurso: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html
Não é necessário estender o AbstractView. Se você observar a função original no AbstractView, poderá ver que o Magento usou o registro para buscar o produto. Você não precisa estender uma classe específica para fazer isso, basta injetar o Magento \ Framework \ Registry em seu construtor e solicitar o item de registro "produto".
Exemplo de código completo:
fonte
Se você estiver usando o Magento 2.1 ou maior, poderá usá-lo
helper
porque o método antigo foi preterido.fonte
A solução @Wesley Vestjens também funcionou para mim. Apenas preste atenção ao modificador de acesso, pois o privado pode não ser o que você deseja se estiver usando
getProduct()
no seu modelo. No exemplo acima, ele funciona comogetProductName()
é o método público a ser usado.fonte
getProduct()
é privado egetProductName()
público. Nas versões mais recentes do Magento (2.2 / 2.3 e posteriores), esses métodos também são considerados obsoletos e o View Models deve ser usado.