Magento 2 - Como recuperar informações do produto

18

Quero usar funções como getName(), getPrice()etc. do produto para recuperar informações do produto no Magento 2.

Alguém pode me mostrar como posso conseguir isso?

J. John
fonte
@ John, está trabalhando abaixo das respostas. Se Sim aceitar, será útil para outros usuários. Se não, deixe-me saber, para que possamos fornecer solução.
Bojjaiah

Respostas:

22

No Magento 2 propôs usar a camada de serviço para isso. Tente usar o \Magento\Catalog\Model\ProductRepository::getByIdmétodo para obter o produto por ID

KAndy
fonte
11
Você deve usar \ Magento \ Catalog \ Api \ ProductRepositoryInterface :: getById.
Thiago Lima
não é recomendado usar o ProductRepository no Magneto 2
Waqar Ali
12

O Magento 2 recomenda usar Factoriespara carregar todos os modelos. Aqui está como você deve fazê-lo:

  1. Acima da sua turma, adicione esta linha:

    use Magento\Catalog\Model\ProductFactory;
  2. Agora crie a propriedade da classe:

    protected $productFactory;
  3. No seu construtor, adicione dependência:

    public function __construct(
       ProductFactory $productFactory
    ) {
       $this->productFactory = $productFactory;
    }
  4. Agora carregue o produto como abaixo:

    $_product = $this->productFactory->create()->load(<product_id>);
Arvind07
fonte
não há nenhuma classe \ Magento \ Catalog \ Modelo \ ProductFactory em Magento 2.1.7
Shahir Hajir
2
A maioria das classes de fábrica não existe no módulo. Eles são gerados em var / generation para instanciar classes usando o gerenciador de objetos. Você não deve usar fábricas para carregar produtos de qualquer maneira. Use \ Magento \ Catalog \ Api \ ProductRepositoryInterface conforme sugerido por outros. Ou pelo menos o uso Magento \ Catalog \ Modelo \ ProductRepository :: getById ($ id)
Frank
Usando ProductRepository não cria novos objetos, como o uso de uma fábrica faz
Raul Sanchez
10

Além de outras respostas, sugiro usar os seguintes métodos de contratos de serviço:

  • \Magento\Catalog\Api\ProductRepositoryInterface::getById : para carregar um produto por ID
  • \Magento\Catalog\Api\ProductRepositoryInterface::get : para carregar um produto por sku
Raphael na Digital Pianism
fonte
11
Esta é a resposta correta, segue a diretiva magento devdocs.magento.com/guides/v2.1/extension-dev-guide/…
LucScu
6

A maneira mais Magento de conseguir isso, embora seja difícil dizer, já que a maioria dos lugares no código principal o faz de maneira diferente é usar o repositório do produto.

use Magento\Catalog\Model\ProductRepository;

protected $productRepository;

public function __construct(
   ProductRepository $productRepository
) {
   $this->productRepository = $productRepository;
}

public function getMyProduct($productId)
{
    return $this->productRepository->getById($productId);
}
Frank
fonte
Resposta correta, melhor e correta
Matthias Kleine
há um problema do Marketplace com o uso de productRepository no Magento 2
Waqar Ali
0

para isso você deve usar abaixo

usar \Magento\Catalog\Model\Resource\Product\CollectionFactory

$prod_id = "Your product id goes here";
$om         =   \Magento\Framework\App\ObjectManager::getInstance();
$pdata =   $om->create('Magento\Catalog\Model\Product')->load($prod_id);
Rushvi
fonte
-1

Eu tenho buscar detalhes do produto usando a função na página de visualização do produto como abaixo.

Aqui Sm / Sawyer é o meu tema.

$_config = $this->helper('Sm\Sawyer\Helper\Data');
$productId = $this->getProduct()->getId();
$name = $this->getProduct()->getName();
$stock1 = $this->getProduct()->getQty();
$price = $this->getProduct()->getPrice();
Ravi Thanki
fonte
resposta muito ruim
LucScu
Não ajuda - apenas confunde #
Matthias Kleine