Magento 2 - Cómo recuperar información del producto


18

Quiero usar funciones como getName(), getPrice()etc. del producto para recuperar información del producto en Magento 2.

¿Alguien puede mostrarme cómo puedo lograr eso?


@John, ¿Funciona debajo de las respuestas? En caso afirmativo, aceptarlo será útil para otros usuarios. Si no, hágamelo saber para que podamos brindarle una solución.
Bojjaiah

Respuestas:


22

En Magento 2 propuso utilizar la capa de servicio para esto. Intente usar el \Magento\Catalog\Model\ProductRepository::getByIdmétodo para obtener el producto por ID


1
En su lugar, debe usar \ Magento \ Catalog \ Api \ ProductRepositoryInterface :: getById.
Thiago Lima

no se recomienda usar ProductRepository en Magneto 2
Waqar Ali

12

Magento 2 recomienda usar Factoriespara cargar todos los modelos. Así es como debes hacerlo:

  1. Por encima de su clase agregue esta línea:

    use Magento\Catalog\Model\ProductFactory;
  2. Ahora cree la propiedad de clase:

    protected $productFactory;
  3. En su constructor, agregue dependencia:

    public function __construct(
       ProductFactory $productFactory
    ) {
       $this->productFactory = $productFactory;
    }
  4. Ahora cargue el producto de la siguiente manera:

    $_product = $this->productFactory->create()->load(<product_id>);

no hay clase \ Magento \ Catálogo \ Modelo \ ProductFactory en Magento 2.1.7
shahir hajir

2
La mayoría de las clases de fábrica no existen en el módulo. Se generan en var / generation para instanciar clases usando el administrador de objetos. No debe usar fábricas para cargar productos de todos modos. Utilice \ Magento \ Catalog \ Api \ ProductRepositoryInterface como lo sugieren otros. O al menos use Magento \ Catalog \ Model \ ProductRepository :: getById ($ id)
Frank

El uso de ProductRepository no crea nuevos objetos, como lo hace el uso de una fábrica
Raul Sanchez


6

La forma más efectiva de Magento de lograr esto, aunque es difícil de determinar, ya que la mayoría de los lugares en el código central lo hacen de manera diferente es usar el repositorio del producto.

use Magento\Catalog\Model\ProductRepository;

protected $productRepository;

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

public function getMyProduct($productId)
{
    return $this->productRepository->getById($productId);
}

Respuesta correcta, mejor y correcta
Matthias Kleine

hay un problema de Marketplace con el uso de productRepository en Magento 2
Waqar Ali

0

para esto debes usar a continuación

utilizar \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

He obtenido detalles del producto usando la función en la página de vista del producto como se muestra a continuación.

Aquí Sm / Sawyer es mi tema.

$_config = $this->helper('Sm\Sawyer\Helper\Data');
$productId = $this->getProduct()->getId();
$name = $this->getProduct()->getName();
$stock1 = $this->getProduct()->getQty();
$price = $this->getProduct()->getPrice();

muy mala respuesta
LucScu

No es útil, solo confuso
Matthias Kleine
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.