Wie bekomme ich die Lagermenge jedes Produkts in der Datei list.phtml in Magento 2?
Wie bekomme ich die Lagermenge jedes Produkts in der Datei list.phtml in Magento 2?
Antworten:
Fügen Sie folgenden Code in Ihre list.phtml
Datei ein
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
ODER
<?php
$stockItem = $product->getExtensionAttributes()->getStockItem();
print_r($stockItem->getQty());
?>
Wie in einigen Kommentaren bereits erwähnt, möchten Sie die Abhängigkeitsinjektion verwenden. Verwenden Sie nicht den Objektmanager. Mit anderen Worten, tun Sie nicht, was in den anderen Antworten angegeben ist. Die folgende Technik kann überall angewendet werden. Setzen Sie für Blöcke die Klasse in Layout-XML auf Ihre Klasse, wodurch das Original erweitert wird, und fügen Sie die richtigen Informationen ein.
Fügen Sie die StockRegistryInterface
Schnittstelle ein, auf die Sie Zugriff benötigen:
/**
* @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;
}
Um es irgendwo zu benutzen:
/** @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();
Als Referenz verwendet Magento2 genau diese Schnittstelle im gesamten Katalog, um Produktinformationen abzurufen.
Beachten Sie, dass alles in eckigen Klammern geändert werden muss.
So erhalten Sie die Lagerbestandsmenge der einzelnen Produkte in Magento 2
Für Controller oder Block Inject \ Magento \ CatalogInventory \ Api \ StockStateInterface
public function __construct(
\Magento\CatalogInventory\Api\StockStateInterface $stockItem
)
{
$this->stockItem = $stockItem;
}
Verwenden Sie dann die Funktion getStockQty, um die Menge abzurufen
$this->stockItem->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
Wenn Sie die Menge in einer .phtml-Datei erhalten möchten, verwenden Sie
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
Das folgende Skript hilft Ihnen dabei, die Lagermenge, die Mindestmenge und die Lagerdetails in magento2 zu ermitteln.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productStockObj = $objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface')->getStockItem($productId);
print_r($productStockObj->getData());
Wenn Sie $productobj
das Produkt nach dem Speichern von der Back-End-Seite, so können Sie einfach catalog_product_save_after
Event verwenden.
Ich gehe davon aus, dass Sie bereits wissen, wie man ein Modul erstellt M2
.
Im Moment müssen Sie ein neues Modul für M2 entwickeln
Dann erstellen Sie diese events.xml
Datei im folgenden Pfad
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>
Und erstellen Sie Ihre Beobachterdatei Productsaveafter.php
unter folgendem Pfad
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();
}
}