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?


@ 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


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>);

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


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);
}

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);

-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();

resposta muito ruim
LucScu

Não ajuda - apenas confunde #
Matthias Kleine
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.