Comment obtenir la quantité de stock de chaque produit dans list.phtml dans Magento 2?
Comment obtenir la quantité de stock de chaque produit dans list.phtml dans Magento 2?
Réponses:
Ajoutez le code ci-dessous dans votre list.phtml
fichier
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
OU
<?php
$stockItem = $product->getExtensionAttributes()->getStockItem();
print_r($stockItem->getQty());
?>
Comme certains commentaires l'ont mentionné, vous souhaitez utiliser l'injection de dépendance. N'utilisez pas le gestionnaire d'objets; en d'autres termes, ne faites pas ce que disent les autres réponses. La technique suivante peut être appliquée n'importe où. Pour les blocs, définissez la classe sur votre classe dans le format XML de mise en page, qui étend l'original et injectez les bonnes informations.
Injectez l' StockRegistryInterface
interface où vous avez besoin d'accéder:
/**
* @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;
}
Pour l'utiliser quelque part:
/** @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();
Pour référence, Magento2 utilise cette interface exacte dans tout le catalogue lorsqu'il s'agit de récupérer des informations sur les stocks de produits.
Notez que tout ce qui est entre crochets doit être modifié.
Comment obtenir la quantité de stock de chaque produit dans Magento 2
pour contrôleur ou injection de bloc \ Magento \ CatalogInventory \ Api \ StockStateInterface
public function __construct(
\Magento\CatalogInventory\Api\StockStateInterface $stockItem
)
{
$this->stockItem = $stockItem;
}
puis utilisez la fonction getStockQty pour obtenir la quantité
$this->stockItem->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
si vous voulez obtenir la quantité dans le fichier .phtml, utilisez
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
Le script ci-dessous sera utile pour obtenir la quantité de stock du produit, la quantité minimale et les détails du stock dans magento2.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productStockObj = $objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface')->getStockItem($productId);
print_r($productStockObj->getData());
Si vous voulez après $productobj
avoir enregistré le produit du côté backend afin que vous puissiez facilement utiliser l' catalog_product_save_after
événement.
Je suppose que vous savez déjà comment créer un module dans M2
.
Pour le moment, vous devez développer un nouveau module pour M2
Ensuite, créez ce events.xml
fichier dans le chemin ci-dessous
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>
Et créez votre fichier d'observateur Productsaveafter.php
dans le chemin ci-dessous
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();
}
}