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?

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

KAndy
sumber
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>);
Arvind07
sumber
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
Raphael di Digital Pianism
sumber
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);
}
jujur
sumber
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);
Rushvi
sumber
-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();
Ravi Thanki
sumber
jawaban yang sangat buruk
LucScu
Tidak membantu - hanya membingungkan
Matthias Kleine