Magento 2 - วิธีการดึงข้อมูลผลิตภัณฑ์


18

ฉันต้องการใช้ฟังก์ชั่นเช่นgetName(), getPrice()ฯลฯ ของผลิตภัณฑ์เพื่อดึงข้อมูลผลิตภัณฑ์ใน Magento 2

ทุกคนสามารถแสดงให้ฉันเห็นว่าฉันจะประสบความสำเร็จได้อย่างไร


@JJohn มันทำงานด้านล่างคำตอบ ถ้าใช่ยอมรับมันจะเป็นประโยชน์สำหรับผู้ใช้รายอื่น ถ้าไม่แจ้งให้เราทราบเพื่อให้เราสามารถให้บริการโซลูชั่น
Bojjaiah

คำตอบ:


22

ใน Magento 2 เสนอให้ใช้เลเยอร์บริการสำหรับสิ่งนี้ ลองใช้\Magento\Catalog\Model\ProductRepository::getByIdวิธีการรับผลิตภัณฑ์โดยใช้รหัส


1
คุณควรใช้ \ Magento \ Catalog \ Api \ ProductRepositoryInterface :: getById แทน
Thiago Lima

ไม่แนะนำให้ใช้ ProductRepository ใน Magneto 2
Waqar Ali

12

Magento 2 แนะนำให้ใช้Factoriesสำหรับการโหลดทุกรุ่น นี่คือวิธีที่คุณควรทำ:

  1. เหนือชั้นเรียนของคุณเพิ่มบรรทัดนี้:

    use Magento\Catalog\Model\ProductFactory;
  2. ตอนนี้สร้างคุณสมบัติคลาส:

    protected $productFactory;
  3. ในตัวสร้างของคุณเพิ่มการพึ่งพา:

    public function __construct(
       ProductFactory $productFactory
    ) {
       $this->productFactory = $productFactory;
    }
  4. ตอนนี้โหลดผลิตภัณฑ์ดังนี้:

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

ไม่มีคลาส \ Magento \ Catalog \ Model \ ProductFactory in Magento 2.1.7
shahir hajir

2
คลาสโรงงานส่วนใหญ่ไม่มีอยู่ในโมดูล พวกมันถูกสร้างขึ้นใน var / generation เพื่อสร้างอินสแตนซ์ของคลาสโดยใช้ object manager คุณไม่ควรใช้โรงงานในการโหลดผลิตภัณฑ์อยู่ดี ใช้ \ Magento \ Catalog \ Api \ ProductRepositoryInterface ตามที่ผู้อื่นแนะนำ หรืออย่างการใช้วีโอไอพี \ แคตตาล็อกอย่างน้อยที่สุด \ รุ่น \ ProductRepository :: getById ($ ID)
แฟรงก์

การใช้ ProductRepository ไม่ได้สร้างวัตถุใหม่เช่นการใช้โรงงานทำ
Raul Sanchez

10

นอกเหนือจากคำตอบอื่น ๆ ฉันขอแนะนำให้ใช้วิธีสัญญาบริการต่อไปนี้:

  • \Magento\Catalog\Api\ProductRepositoryInterface::getById : เพื่อโหลดผลิตภัณฑ์ตามรหัส
  • \Magento\Catalog\Api\ProductRepositoryInterface::get : เพื่อโหลดผลิตภัณฑ์โดย sku

1
นี่คือคำตอบที่ถูกต้องมันเป็นไปตามคำสั่ง magento devdocs.magento.com/guides/v2.1/extension-dev-guide/…
LucScu

6

วิธีวีโอไอพีที่มากขึ้นในการบรรลุเป้าหมายนี้ถึงแม้ว่ามันจะยากที่จะบอกเนื่องจากสถานที่ส่วนใหญ่ในรหัสหลักทำแตกต่างกันคือการใช้ที่เก็บผลิตภัณฑ์

use Magento\Catalog\Model\ProductRepository;

protected $productRepository;

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

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

คำตอบที่ถูกต้องดีที่สุดและถูกต้อง
Matthias Kleine

มีปัญหา Marketplace เมื่อใช้ productRepository ใน Magento 2
Waqar Ali

0

สำหรับสิ่งนี้คุณต้องใช้ด้านล่าง

ใช้ \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

ฉันดึงรายละเอียดผลิตภัณฑ์โดยใช้ฟังก์ชั่นในหน้ามุมมองผลิตภัณฑ์เช่นด้านล่าง

Sm / Sawyer นี่เป็นธีมของฉัน

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

คำตอบที่แย่มาก
LucScu

ไม่เป็นประโยชน์ - ทำให้สับสน
Matthias Kleine
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.