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?

J. John
fuente
@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

Kandy
fuente
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>);
Arvind07
fuente
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
10

Además de otras respuestas, sugiero utilizar los siguientes métodos de contratos de servicio:

  • \Magento\Catalog\Api\ProductRepositoryInterface::getById : cargar un producto por id
  • \Magento\Catalog\Api\ProductRepositoryInterface::get : cargar un producto por sku
Raphael en Digital Pianism
fuente
1
Esta es la respuesta correcta, sigue la directiva de magento devdocs.magento.com/guides/v2.1/extension-dev-guide/…
LucScu
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);
}
Franco
fuente
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);
Rushvi
fuente
-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();
Ravi Thanki
fuente
muy mala respuesta
LucScu
No es útil, solo confuso
Matthias Kleine