Magento 2 - Cara mengambil informasi produk


18

Saya ingin menggunakan fungsi seperti getName(), getPrice(), dll produk untuk mengambil informasi produk di Magento 2.

Adakah yang bisa menunjukkan kepada saya bagaimana saya bisa mencapai itu?


@ John, Apakah ini berfungsi di bawah jawaban. Jika Ya, menerimanya akan berguna bagi pengguna lain. Jika tidak, beri tahu saya, sehingga kami dapat memberikan solusi.
Bojjaiah

Jawaban:


22

Dalam Magento 2 diusulkan untuk menggunakan lapisan layanan untuk ini. Coba gunakan \Magento\Catalog\Model\ProductRepository::getByIdmetode untuk mendapatkan produk melalui id


1
Anda harus menggunakan \ Magento \ Catalog \ Api \ ProductRepositoryInterface :: getById sebagai gantinya.
Thiago Lima

itu tidak dianjurkan untuk menggunakan ProductRepository di Magneto 2
Waqar Ali

12

Magento 2 merekomendasikan untuk digunakan Factoriesuntuk memuat semua Model. Inilah cara Anda harus melakukannya:

  1. Di atas kelas Anda tambahkan baris ini:

    use Magento\Catalog\Model\ProductFactory;
  2. Sekarang buat properti kelas:

    protected $productFactory;
  3. Di konstruktor Anda, tambahkan ketergantungan:

    public function __construct(
       ProductFactory $productFactory
    ) {
       $this->productFactory = $productFactory;
    }
  4. Sekarang muat produk seperti di bawah ini:

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

tidak ada kelas \ Magento \ Catalog \ Model \ ProductFactory di Magento 2.1.7
shahir hajir

2
Sebagian besar kelas pabrik tidak ada dalam modul. Mereka dihasilkan dalam var / generation untuk membuat instance kelas menggunakan manajer objek. Anda seharusnya tidak menggunakan pabrik untuk memuat produk. Gunakan \ Magento \ Catalog \ Api \ ProductRepositoryInterface seperti yang disarankan oleh orang lain. Atau paling tidak gunakan Magento \ Catalog \ Model \ ProductRepository :: getById ($ id)
Frank

Menggunakan ProductRepository tidak membuat objek baru, seperti menggunakan pabrik tidak
Raul Sanchez

10

Di atas jawaban orang lain, saya sangat menyarankan menggunakan metode kontrak layanan berikut:

  • \Magento\Catalog\Api\ProductRepositoryInterface::getById : untuk memuat produk dengan id
  • \Magento\Catalog\Api\ProductRepositoryInterface::get : untuk memuat produk dengan sku

1
Ini adalah jawaban yang benar, mengikuti magento
LucScu

6

Cara Magento yang lebih banyak untuk mencapai hal ini, meskipun sulit untuk diketahui karena kebanyakan tempat di seluruh kode inti melakukannya secara berbeda adalah dengan menggunakan penyimpanan produk.

use Magento\Catalog\Model\ProductRepository;

protected $productRepository;

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

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

Jawaban yang benar, terbaik, dan benar
Matthias Kleine

ada masalah Marketplace dengan menggunakan productRepository di Magento 2
Waqar Ali

0

untuk ini Anda harus menggunakan di bawah ini

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

Saya telah mengambil detail produk menggunakan fungsi di halaman tampilan produk seperti di bawah ini.

Di sini Sm / Sawyer adalah temanku.

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

jawaban yang sangat buruk
LucScu

Tidak membantu - hanya membingungkan
Matthias Kleine
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.