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ąć?


@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


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

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


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

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

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

bardzo zła odpowiedź
LucScu,

Nie pomocne - po prostu mylące
Matthias Kleine
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.