วิธีรับปริมาณสต็อคของแต่ละผลิตภัณฑ์ใน list.phtml ใน Magento 2
วิธีรับปริมาณสต็อคของแต่ละผลิตภัณฑ์ใน list.phtml ใน Magento 2
คำตอบ:
เพิ่มรหัสตะโกนในlist.phtmlไฟล์ของคุณ
<?php 
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
    echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
หรือ
<?php
   $stockItem = $product->getExtensionAttributes()->getStockItem();
   print_r($stockItem->getQty()); 
?>
              เช่นเดียวกับความคิดเห็นที่กล่าวถึงคุณต้องการใช้การฉีดพึ่งพา ห้ามใช้ตัวจัดการวัตถุ ในคำอื่น ๆ อย่าทำในสิ่งที่ตอบสนองอื่น ๆ ของรัฐ เทคนิคต่อไปนี้สามารถใช้ได้ทุกที่ สำหรับบล็อกให้ตั้งค่าคลาสเป็นคลาส XML ของคุณซึ่งจะขยายแบบดั้งเดิมและแทรกข้อมูลที่ถูกต้อง
ฉีดStockRegistryInterfaceอินเทอร์เฟซที่คุณต้องการเข้าถึง:
/**
 * @var \Magento\CatalogInventory\Api\StockRegistryInterface
 */
private $stockRegistry;
/**
 * Constructor for DI.
 *
 * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
 */
public function __construct(
    \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
) {
    $this->stockRegistry = $stockRegistry;
}
/**
 * Get the product stock data and methods.
 *
 * @return \Magento\CatalogInventory\Api\StockRegistryInterface
 */
public function getStockRegistry()
{
    return $this->stockRegistry;
}
วิธีใช้งานที่ไหนสักแห่ง:
/** @var \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry */
$stockRegistry = [$this|$block]->getStockRegistry();
/** @var \Magento\Catalog\Model\Product $product */
$product = [Grab Product instance however you want. This is up to you.]
// Get stock data for given product.
$productStock = $stockRegistry->getStockItem($product->getId());
// Get quantity of product.
$productQty = $productStock->getQty();
สำหรับการอ้างอิง Magento2 ใช้อินเทอร์เฟซที่แน่นอนนี้ไปทั่วแคตตาล็อกเมื่อมันมาถึงการดึงข้อมูลสต็อกสินค้า
โปรดทราบว่าจำเป็นต้องแก้ไขสิ่งใดภายในวงเล็บเหลี่ยม
วิธีรับปริมาณสต็อกของแต่ละผลิตภัณฑ์ใน Magento 2
สำหรับตัวควบคุมหรือบล็อกการฉีด \ Magento \ แคตตาล็อกสินค้าคงคลัง \ Api \ StockStateInterface
 public function __construct(
    \Magento\CatalogInventory\Api\StockStateInterface $stockItem
   )
  {
    $this->stockItem = $stockItem;
  }
จากนั้นใช้ฟังก์ชัน getStockQty เพื่อรับจำนวน
 $this->stockItem->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
หากคุณต้องการรับปริมาณเป็นไฟล์. php ให้ใช้
 <?php 
 $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 $StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
 echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
              สคริปต์ด้านล่างจะมีประโยชน์ในการรับจำนวนสินค้าจำนวนขั้นต่ำและรายละเอียดสินค้าใน magento2
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productStockObj = $objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface')->getStockItem($productId);
print_r($productStockObj->getData());
              ถ้าคุณต้องการ$productobjหลังจากบันทึกผลิตภัณฑ์จากด้านหลังเพื่อให้คุณสามารถใช้catalog_product_save_afterเหตุการณ์ได้อย่างง่ายดาย
ฉันสมมติว่าคุณรู้วิธีสร้างโมดูลM2แล้ว
ตอนนี้คุณต้องพัฒนาโมดูลใหม่สำหรับ M2
จากนั้นสร้างevents.xmlไฟล์นี้ในเส้นทางด้านล่าง
app\code\YOUR_NAMESPACE\YOURMODULE\etc\adminhtml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="catalog_product_save_after">
        <observer name="test_name" instance="YOUR_NAMESPACE\YOUR_MODULENAME\Observer\Productsaveafter" />
    </event>
</config>
และสร้างไฟล์ผู้สังเกตการณ์ของคุณProductsaveafter.phpในเส้นทางด้านล่าง
แอปพลิเค \ รหัส \ YOUR_NAMESPACE \ YOURMODULE \ สังเกตการณ์ \
<?php
namespace YOURNAMESPACE\YOURMODULENAME\Observer;
use Magento\Framework\Event\ObserverInterface;
class Productsaveafter implements ObserverInterface
{    
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $product = $observer->getEvent()->getProduct();
        $id = $product->getId(); //Get Product Id
        //Get Quantity
        $stockItem = $product->getExtensionAttributes()->getStockItem();
        $stockData = $stockItem->getQty();
        // Get new Qty
        $_vendor_qty = $product->getVendorQty();
        $_on_hand_qty = $product->getOnHandQty();
        $totalQty = $_vendor_qty+$_on_hand_qty; //Add New Qty
        $stockItem->setQty($totalQty); //Set New Qty to Main Qty
        $stockItem->save();
    }   
}