Magento 2 - So rufen Sie Produktinformationen ab


18

Ich möchte Funktionen wie getName(), getPrice()usw. des Produkts verwenden, um Produktinformationen in Magento 2 abzurufen.

Kann mir jemand zeigen, wie ich das erreichen kann?


@JJohn, Funktioniert es unter Antworten. Wenn Ja, wird es für andere Benutzer nützlich sein. Wenn nein, lassen Sie es mich wissen, damit wir Ihnen eine Lösung anbieten können.
Bojjaiah

Antworten:


22

In Magento 2 wurde vorgeschlagen, hierfür Service Layer zu verwenden. Verwenden Sie die \Magento\Catalog\Model\ProductRepository::getByIdMethode, um das Produkt anhand der ID abzurufen


1
Verwenden Sie stattdessen \ Magento \ Catalog \ Api \ ProductRepositoryInterface :: getById.
Thiago Lima

Es wird nicht empfohlen, ProductRepository in Magneto 2
Waqar Ali,

12

Magento 2 empfiehlt, Factorieszum Laden aller Modelle zu verwenden. So solltest du es machen:

  1. Fügen Sie über Ihrer Klasse die folgende Zeile ein:

    use Magento\Catalog\Model\ProductFactory;
  2. Erstellen Sie nun eine Klasseneigenschaft:

    protected $productFactory;
  3. Fügen Sie in Ihrem Konstruktor Abhängigkeit hinzu:

    public function __construct(
       ProductFactory $productFactory
    ) {
       $this->productFactory = $productFactory;
    }
  4. Laden Sie nun das Produkt wie folgt:

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

Es gibt keine class \ Magento \ Catalog \ Model \ ProductFactory in Magento 2.1.7
shahir hajir

2
Die meisten Factory-Klassen existieren nicht im Modul. Sie werden in var / generation generiert, um Klassen mithilfe des Objektmanagers zu instanziieren. Sie sollten ohnehin keine Fabriken verwenden, um Produkte zu laden. Verwenden Sie \ Magento \ Catalog \ Api \ ProductRepositoryInterface, wie von anderen empfohlen. Oder verwenden Sie zumindest Magento \ Catalog \ Model \ ProductRepository :: getById ($ id)
Frank

Durch die Verwendung von ProductRepository werden keine neuen Objekte erstellt, wie dies bei der Verwendung einer Factory der Fall ist
Raul Sanchez,


6

Der einfachere Weg, dies mit Magento zu erreichen, obwohl es schwer zu sagen ist, da die meisten Stellen im Kerncode anders vorgehen, ist die Verwendung des Produkt-Repositorys.

use Magento\Catalog\Model\ProductRepository;

protected $productRepository;

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

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

Richtige, beste und richtige Antwort
Matthias Kleine

Es gibt ein Problem mit der Verwendung von productRepository in Magento 2
Waqar Ali,

0

Dafür müssen Sie unten verwenden

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

Ich habe Produktdetails mit der Funktion auf der Produktansichtsseite wie unten abgerufen.

Hier ist Sm / Sawyer mein Thema.

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

sehr schlechte Antwort
LucScu

Nicht hilfreich - nur verwirrend
Matthias Kleine
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.