Magento 2 - Jak uzyskać informacje o produkcie

18

Chcę użyć funkcji takich jak getName(), getPrice()itp. Produktu, aby pobrać informacje o produkcie w Magento 2.

Czy ktoś może mi pokazać, jak to osiągnąć?

J. John
źródło
@JJohn, czy to działa poniżej odpowiedzi. Jeśli tak, zaakceptuje to będzie przydatne dla innych użytkowników. Jeśli nie, daj mi znać, abyśmy mogli zapewnić rozwiązanie.
Bojjaiah

Odpowiedzi:

22

W Magento 2 zaproponowano użycie do tego warstwy usług. Spróbuj użyć \Magento\Catalog\Model\ProductRepository::getByIdmetody, aby uzyskać produkt według identyfikatora

KAndy
źródło
1
Zamiast tego należy użyć \ Magento \ Catalog \ Api \ ProductRepositoryInterface :: getById.
Thiago Lima,
nie zaleca się używania ProductRepository w Magneto 2
Waqar Ali
12

Magento 2 zaleca używanie Factoriesdo ładowania wszystkich modeli. Oto jak powinieneś to zrobić:

  1. Nad klasą dodaj tę linię:

    use Magento\Catalog\Model\ProductFactory;
  2. Teraz utwórz właściwość klasy:

    protected $productFactory;
  3. W swoim konstruktorze dodaj zależność:

    public function __construct(
       ProductFactory $productFactory
    ) {
       $this->productFactory = $productFactory;
    }
  4. Teraz załaduj produkt jak poniżej:

    $_product = $this->productFactory->create()->load(<product_id>);
Arvind07
źródło
nie ma klasy \ Magento \ Katalog \ Model \ ProductFactory w Magento 2.1.7
shahir hajir 10.09.17
2
Większość klas fabrycznych nie istnieje w module. Są generowane w var / generacja do tworzenia instancji klas za pomocą menedżera obiektów. I tak nie należy używać fabryk do ładowania produktów. Użyj \ Magento \ Catalog \ Api \ ProductRepositoryInterface zgodnie z sugestiami innych. Lub przynajmniej użyj Magento \ Catalog \ Model \ ProductRepository :: getById ($ id)
Frank
Korzystanie z ProductRepository nie tworzy nowych obiektów, tak jak w przypadku korzystania z fabryki
Raul Sanchez
10

Oprócz innych odpowiedzi, zdecydowanie zalecam stosowanie następujących metod umów o świadczenie usług:

  • \Magento\Catalog\Api\ProductRepositoryInterface::getById : aby załadować produkt według identyfikatora
  • \Magento\Catalog\Api\ProductRepositoryInterface::get : aby załadować produkt przez sku
Raphael at Digital Pianism
źródło
1
To jest poprawna odpowiedź, wynika z dyrektywy magento devdocs.magento.com/guides/v2.1/extension-dev-guide/…
LucScu
6

Bardziej Magento sposobem na osiągnięcie tego, choć trudno powiedzieć, ponieważ większość miejsc w kodzie podstawowym robi to inaczej, jest korzystanie z repozytorium produktów.

use Magento\Catalog\Model\ProductRepository;

protected $productRepository;

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

public function getMyProduct($productId)
{
    return $this->productRepository->getById($productId);
}
Szczery
źródło
Prawidłowa, najlepsza i poprawna odpowiedź
Matthias Kleine
występuje problem z Marketplace przy użyciu productRepository w Magento 2
Waqar Ali
0

do tego musisz użyć poniżej

posługiwać się \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
źródło
-1

Mam szczegółowe informacje o produkcie za pomocą funkcji na stronie widoku produktu, jak poniżej.

Tutaj Sm / Sawyer to mój motyw.

$_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
źródło
bardzo zła odpowiedź
LucScu,
Nie pomocne - po prostu mylące
Matthias Kleine