Magento 2 - Comment récupérer les informations produit

18

Je veux utiliser des fonctions telles que getName(), getPrice(), etc. du produit pour récupérer des informations produit dans Magento 2.

Quelqu'un peut-il me montrer comment y parvenir?

J. John
la source
@JJohn, Est-ce que cela fonctionne sous les réponses. Si oui, il sera utile pour les autres utilisateurs. Si non, faites-le moi savoir, afin que nous puissions apporter une solution.
Bojjaiah

Réponses:

22

Dans Magento 2 a proposé d'utiliser la couche de service pour cela. Essayez d'utiliser la \Magento\Catalog\Model\ProductRepository::getByIdméthode pour obtenir le produit par identifiant

KAndy
la source
1
Vous devez utiliser \ Magento \ Catalog \ Api \ ProductRepositoryInterface :: getById à la place.
Thiago Lima
il n'est pas recommandé d'utiliser ProductRepository dans Magneto 2
Waqar Ali
12

Magento 2 recommande d'utiliser Factoriespour charger tous les modèles. Voici comment procéder:

  1. Au-dessus de votre classe, ajoutez cette ligne:

    use Magento\Catalog\Model\ProductFactory;
  2. Créez maintenant la propriété de classe:

    protected $productFactory;
  3. Dans votre constructeur, ajoutez la dépendance:

    public function __construct(
       ProductFactory $productFactory
    ) {
       $this->productFactory = $productFactory;
    }
  4. Maintenant, chargez le produit comme ci-dessous:

    $_product = $this->productFactory->create()->load(<product_id>);
Arvind07
la source
il n'y a pas de classe \ Magento \ Catalog \ Model \ ProductFactory dans Magento 2.1.7
shahir hajir
2
La plupart des classes d'usine n'existent pas dans le module. Ils sont générés dans var / generation pour instancier des classes à l'aide du gestionnaire d'objets. Vous ne devez pas utiliser les usines pour charger des produits de toute façon. Utilisez \ Magento \ Catalog \ Api \ ProductRepositoryInterface comme suggéré par d'autres. Ou à tout le moins utiliser Magento \ Catalog \ Model \ ProductRepository :: getById ($ id)
Frank
L'utilisation de ProductRepository ne crée pas de nouveaux objets, comme l'utilisation d'une fabrique
Raul Sanchez
10

En plus des autres réponses, je suggère fortement d'utiliser les méthodes de contrats de service suivantes:

  • \Magento\Catalog\Api\ProductRepositoryInterface::getById : pour charger un produit par id
  • \Magento\Catalog\Api\ProductRepositoryInterface::get : charger un produit par sku
Raphael chez Digital Pianism
la source
1
Ceci est la bonne réponse, elle suit la directive magento devdocs.magento.com/guides/v2.1/extension-dev-guide/…
LucScu
6

Le moyen le plus Magento d'y parvenir, bien qu'il soit difficile de le dire car la plupart des emplacements dans le code principal le font différemment, est d'utiliser le référentiel du produit.

use Magento\Catalog\Model\ProductRepository;

protected $productRepository;

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

public function getMyProduct($productId)
{
    return $this->productRepository->getById($productId);
}
Franc
la source
Réponse correcte, meilleure et correcte
Matthias Kleine
il y a un problème de Marketplace avec l'utilisation de productRepository dans Magento 2
Waqar Ali
0

pour cela, vous devez utiliser ci-dessous

utilisation \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
la source
-1

J'ai récupéré les détails du produit en utilisant la fonction dans la page d'affichage du produit comme ci-dessous.

Ici Sm / Sawyer est mon thème.

$_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
la source
très mauvaise réponse
LucScu
Inutile - juste déroutant
Matthias Kleine