Làm cách nào để lấy số lượng tồn kho của từng sản phẩm trong list.phtml trong Magento 2?
Làm cách nào để lấy số lượng tồn kho của từng sản phẩm trong list.phtml trong Magento 2?
Câu trả lời:
Thêm mã dưới đây vào list.phtml
tập tin của bạn
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
HOẶC LÀ
<?php
$stockItem = $product->getExtensionAttributes()->getStockItem();
print_r($stockItem->getQty());
?>
Giống như một số ý kiến đã đề cập, bạn muốn sử dụng tiêm phụ thuộc. Không sử dụng trình quản lý đối tượng; nói cách khác, không làm bất cứ điều gì trong các câu trả lời khác. Các kỹ thuật sau đây có thể được áp dụng bất cứ nơi nào. Đối với Khối, đặt lớp thành lớp của bạn theo bố cục XML, mở rộng bản gốc và đưa thông tin đúng.
Tiêm StockRegistryInterface
giao diện nơi bạn cần truy cập:
/**
* @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;
}
Để sử dụng nó ở đâu đó:
/** @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();
Để tham khảo, Magento2 sử dụng giao diện chính xác này trên tất cả các danh mục khi lấy thông tin chứng khoán sản phẩm.
Lưu ý rằng bất cứ điều gì trong dấu ngoặc vuông cần phải được sửa đổi.
Cách lấy số lượng tồn kho của từng sản phẩm trong Magento 2
cho bộ điều khiển hoặc khối tiêm \ Magento \ CatalogInventory \ Api \ StockStateInterface
public function __construct(
\Magento\CatalogInventory\Api\StockStateInterface $stockItem
)
{
$this->stockItem = $stockItem;
}
và sau đó sử dụng hàm getStockQty để lấy qty
$this->stockItem->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
Nếu bạn muốn lấy số lượng trong tệp .phtml thì hãy sử dụng
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
Kịch bản dưới đây sẽ hữu ích để có được các sản phẩm chứng khoán qty, min qty và chi tiết chứng khoán trong magento2.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productStockObj = $objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface')->getStockItem($productId);
print_r($productStockObj->getData());
Nếu bạn muốn $productobj
sau khi lưu sản phẩm từ phía phụ trợ để bạn có thể dễ dàng sử dụng catalog_product_save_after
sự kiện.
Tôi giả sử rằng bạn đã biết cách tạo một mô-đun M2
.
Ngay bây giờ bạn cần phát triển mô-đun mới cho M2
Sau đó, tạo events.xml
tập tin này trong đường dẫn dưới đây
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>
Và tạo tập tin quan sát của bạn Productsaveafter.php
trong đường dẫn dưới đây
ứng dụng \ 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();
}
}