Magento 2'deki list.phtml'deki her bir ürünün stok miktarını nasıl alabilirim?
Magento 2'deki list.phtml'deki her bir ürünün stok miktarını nasıl alabilirim?
Yanıtlar:
list.phtml
Dosyanıza feryat kodu ekleyin
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
VEYA
<?php
$stockItem = $product->getExtensionAttributes()->getStockItem();
print_r($stockItem->getQty());
?>
Bahsettiğiniz bazı yorumlar gibi, bağımlılık enjeksiyonunu kullanmak istiyorsunuz. Nesne yöneticisini kullanmayın; Başka bir deyişle, diğer cevaplardan herhangi birinin ifade ettiği şeyi yapmayın. Aşağıdaki teknik herhangi bir yere uygulanabilir. Blocks için, sınıfı, orijinali genişleten düzeni XML olarak sınıfınıza ayarlayın ve doğru bilgileri enjekte edin.
Erişmeniz gereken StockRegistryInterface
arayüzü enjekte edin :
/**
* @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;
}
Bir yerde kullanmak için:
/** @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();
Referans olarak, Magento2 ürün stok bilgisini almaya gelince, kataloğun tamamında bu tam arayüzü kullanır.
Köşeli parantez içindeki herhangi bir şeyin değiştirilmesi gerektiğini unutmayın.
Magento 2'deki her ürünün stok miktarını nasıl alabilirim
denetleyici veya blok enjekte etmek için \ Magento \ CatalogueInventory \ Api \ StockStateInterface
public function __construct(
\Magento\CatalogInventory\Api\StockStateInterface $stockItem
)
{
$this->stockItem = $stockItem;
}
ve sonra qty almak için getStockQty işlevini kullanın
$this->stockItem->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
Eğer .phtml dosyasında miktar almak istiyorsanız kullanın
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>
Aşağıdaki komut dosyası, magento2'deki ürün stok miktarı, minimum miktar ve stok detaylarını elde etmek için yardımcı olacaktır.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productStockObj = $objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface')->getStockItem($productId);
print_r($productStockObj->getData());
$productobj
Ürünü arka uçtan kaydettikten sonra istiyorsanız, bu yüzden catalog_product_save_after
etkinliği kolayca kullanabilirsiniz .
Nasıl modül oluşturulacağını zaten bildiğinizi varsayıyorum M2
.
Şu anda M2 için yeni bir modül geliştirmeniz gerekiyor
Sonra bu events.xml
dosyayı aşağıdaki yoldan oluşturun.
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>
Ve gözlemci dosyanızı Productsaveafter.php
aşağıdaki yoldan oluşturun
Uygulamanın \ kod \ YOUR_NAMESPACE \ YOURMODULE \ Gözlemci \
<?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();
}
}