Bagaimana cara mendapatkan jumlah stok setiap produk di list.phtml di Magento 2?
Bagaimana cara mendapatkan jumlah stok setiap produk di list.phtml di Magento 2?
Jawaban:
Tambahkan kode di bawah ini di list.phtml
file
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
ATAU
<?php
$stockItem = $product->getExtensionAttributes()->getStockItem();
print_r($stockItem->getQty());
?>
Seperti beberapa komentar yang telah disebutkan, Anda ingin menggunakan injeksi ketergantungan. Jangan gunakan manajer objek; dengan kata lain, jangan lakukan apa yang dinyatakan oleh tanggapan lainnya. Teknik berikut dapat diterapkan di mana saja. Untuk Blok, atur kelas ke kelas Anda dalam tata letak XML, yang memperluas yang asli, dan menyuntikkan informasi yang benar.
Suntikkan StockRegistryInterface
antarmuka tempat Anda memerlukan akses:
/**
* @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;
}
Untuk menggunakannya di suatu tempat:
/** @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();
Sebagai referensi, Magento2 menggunakan antarmuka persis ini di seluruh katalog ketika datang untuk mengambil informasi stok produk.
Perhatikan bahwa apa pun di dalam tanda kurung perlu diubah.
Cara mendapatkan jumlah stok setiap produk di Magento 2
untuk controller atau blok inject \ Magento \ CatalogInventory \ Api \ StockStateInterface
public function __construct(
\Magento\CatalogInventory\Api\StockStateInterface $stockItem
)
{
$this->stockItem = $stockItem;
}
dan kemudian gunakan fungsi getStockQty untuk mendapatkan qty
$this->stockItem->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
jika Anda ingin mendapatkan kuantitas dalam file .phtml kemudian gunakan
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
Skrip di bawah ini akan membantu untuk mendapatkan stok produk qty, min qty dan detail stok di magento2.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productStockObj = $objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface')->getStockItem($productId);
print_r($productStockObj->getData());
Jika Anda ingin $productobj
setelah menyimpan produk dari sisi backend sehingga Anda dapat dengan mudah menggunakan catalog_product_save_after
acara.
Saya berasumsi bahwa Anda sudah tahu cara membuat modul M2
.
Saat ini Anda harus mengembangkan modul baru untuk M2
Kemudian Buat events.xml
file ini di jalur di bawah ini
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>
Dan Buat file pengamat Anda Productsaveafter.php
di jalur di bawah ini
app \ code \ YOUR_NAMESPACE \ YOURMODULE \ Observer \
<?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();
}
}