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?


@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


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

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


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

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

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

très mauvaise réponse
LucScu

Inutile - juste déroutant
Matthias Kleine
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.