Come ottenere la quantità di magazzino di ciascun prodotto in list.phtml in Magento 2?
Come ottenere la quantità di magazzino di ciascun prodotto in list.phtml in Magento 2?
Risposte:
Aggiungi il codice qui sotto nel tuo 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());
?>
O
<?php
$stockItem = $product->getExtensionAttributes()->getStockItem();
print_r($stockItem->getQty());
?>
Come alcuni commenti hanno già detto, si desidera utilizzare l'iniezione di dipendenza. Non utilizzare il gestore oggetti; in altre parole, non fare ciò che afferma una delle altre risposte. La seguente tecnica può essere applicata ovunque. Per Blocks, imposta la classe sulla tua classe nel layout XML, che estende l'originale e inietta le informazioni giuste.
Iniettare l' StockRegistryInterface
interfaccia a cui è necessario accedere:
/**
* @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;
}
Per usarlo da qualche parte:
/** @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();
Per riferimento, Magento2 utilizza questa interfaccia esatta in tutto il catalogo quando si tratta di recuperare informazioni sullo stock del prodotto.
Si noti che qualsiasi cosa tra parentesi quadre deve essere modificata.
Come ottenere la quantità di magazzino di ciascun prodotto in Magento 2
per controller o blocco iniettare \ Magento \ CatalogInventory \ Api \ StockStateInterface
public function __construct(
\Magento\CatalogInventory\Api\StockStateInterface $stockItem
)
{
$this->stockItem = $stockItem;
}
e quindi usa la funzione getStockQty per ottenere qty
$this->stockItem->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
se si desidera ottenere quantità nel file .phtml, utilizzare
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
Lo script seguente sarà utile per ottenere quantità di prodotto, quantità minima e dettagli di magazzino in magento2.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productStockObj = $objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface')->getStockItem($productId);
print_r($productStockObj->getData());
Se lo desideri $productobj
dopo aver salvato il prodotto dal lato back-end in modo da poter utilizzare facilmente l' catalog_product_save_after
evento.
Presumo che tu sappia già come creare un modulo M2
.
In questo momento devi sviluppare un nuovo modulo per M2
Quindi creare questo events.xml
file nel percorso seguente
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>
E crea il tuo file osservatore Productsaveafter.php
nel percorso seguente
App \ code \ YOUR_NAMESPACE \ nomemodulo \ 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();
}
}