Як отримати кількість запасів кожного товару в list.phtml у Magento 2?
Як отримати кількість запасів кожного товару в list.phtml у Magento 2?
Відповіді:
Додайте наступний код у свій 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());
?>
Як згадували деякі коментарі, ви хочете використовувати ін'єкцію залежності. Не використовувати диспетчер об'єктів; Іншими словами, не робіть того, про що говорить жодна з інших відповідей. Наступна техніка може застосовуватися в будь-якому місці. Для Blocks встановіть клас для свого класу в макеті 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, щоб отримати qty
$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 \ спостерігач \
<?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();
}
}