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?

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

KAndy
quelle
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>);
Arvind07
quelle
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,
10

Zusätzlich zu anderen Antworten empfehle ich die Verwendung der folgenden Methoden für Serviceverträge:

  • \Magento\Catalog\Api\ProductRepositoryInterface::getById : um ein Produkt nach ID zu laden
  • \Magento\Catalog\Api\ProductRepositoryInterface::get : um ein Produkt von SKU zu laden
Raphael bei Digital Pianism
quelle
1
Dies ist die richtige Antwort, sie folgt der Magento-Direktive devdocs.magento.com/guides/v2.1/extension-dev-guide/…
LucScu
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);
}
Frank
quelle
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);
Rushvi
quelle
-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();
Ravi Thanki
quelle
sehr schlechte Antwort
LucScu
Nicht hilfreich - nur verwirrend
Matthias Kleine