¿Cómo obtener la cantidad de stock de cada producto en list.phtml en Magento 2?
¿Cómo obtener la cantidad de stock de cada producto en list.phtml en Magento 2?
Respuestas:
Agregue el siguiente código en su list.phtml
archivo
<?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());
?>
Como algunos comentarios han mencionado, desea utilizar la inyección de dependencia. No use el administrador de objetos; en otras palabras, no haga lo que dice ninguna de las otras respuestas. La siguiente técnica se puede aplicar en cualquier lugar. Para los bloques, configure la clase a su clase en el diseño XML, que extiende el original, e inyecte la información correcta.
Inyecte la StockRegistryInterface
interfaz donde necesita acceso:
/**
* @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;
}
Para usarlo en alguna 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();
Como referencia, Magento2 utiliza esta interfaz exacta en todo el catálogo cuando se trata de recuperar información de stock del producto.
Tenga en cuenta que cualquier cosa entre corchetes debe modificarse.
Cómo obtener la cantidad de stock de cada producto en Magento 2
para controlador o inyección de bloque \ Magento \ CatalogInventory \ Api \ StockStateInterface
public function __construct(
\Magento\CatalogInventory\Api\StockStateInterface $stockItem
)
{
$this->stockItem = $stockItem;
}
y luego use la función getStockQty para obtener qty
$this->stockItem->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
si desea obtener la cantidad en el archivo .phtml, use
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
El siguiente script será útil para obtener la cantidad de stock del producto, la cantidad mínima y los detalles de stock en magento2.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productStockObj = $objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface')->getStockItem($productId);
print_r($productStockObj->getData());
Si lo desea $productobj
después de guardar el producto desde el lado del backend para que pueda usar fácilmente el catalog_product_save_after
evento.
Supongo que ya sabes cómo crear un módulo M2
.
En este momento debe desarrollar un nuevo módulo para M2
Luego cree este events.xml
archivo en la ruta a continuación
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>
Y cree su archivo de observador Productsaveafter.php
en la siguiente ruta
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();
}
}