답변:
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 \ CatalogInventory \ Api \ StockStateInterface
public function __construct(
\Magento\CatalogInventory\Api\StockStateInterface $stockItem
)
{
$this->stockItem = $stockItem;
}
getStockQty 함수를 사용하여 수량을 얻습니다.
$this->stockItem->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
.phtml 파일에서 수량을 얻으려면
<?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 \ 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();
}
}