ম্যাজেন্টো 2 এ প্রতিটি পণ্যের স্টক পরিমাণ কীভাবে পাবেন


উত্তর:


46

আপনার 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()); 
?>

1
কোনও কারণে ক্রোন
জবটিতে এটি

8
সরাসরি অবজেক্টম্যানেজারের পরিবর্তে ডিআই ব্যবহার করুন!
ম্যাথিয়াস ক্লাইন

6
সরাসরি এই জাতীয় কোড ব্যবহার করবেন না। পরিবর্তে কনস্ট্রাক্টর ডিআই ব্যবহার করুন।
জিস রিটসমা

2
@ ওয়াকগেট ডেভডকস.মাইজেন্টো. com / guides/ v2.3 / existance- dev - guide/ - "ম্যাজেন্টো আপনার কোডে অবজেক্টম্যানেজারের সরাসরি ব্যবহার নিষিদ্ধ করেছে কারণ এটি কোনও শ্রেণীর আসল নির্ভরতা লুকায়। ব্যবহারের বিধিগুলি দেখুন" " স্ট্যান্ডার্ডগুলির একটি কারণ আছে, বিকাশকারীদের এটি সম্মান করা উচিত।
তিশাচ

1
@ টিশচ এখানে প্রচুর পরিমাণে মামলা রয়েছে যেখানে অবজেক্টম্যানেজার সরাসরি ব্যবহার করা ভাল। স্বতন্ত্র স্ক্রিপ্ট, পণ্য ফিড, ক্রোন জব ইত্যাদি; সব ঠিক. আপনার নিজের লিঙ্ক থেকে, ম্যাগেন্টো জানিয়েছে: "বিশ্বব্যাপী সুযোগে যেমন ইন্টিগ্রেশন টেস্টের ফিক্সচারগুলির মতো, আপনি অবজেক্ট ম্যানেজারটি ব্যবহার করতে পারেন।" বাস্তবতা যখন আরও বেশি উপদ্রবিত হয় তখন কেবল তোতাদের জিনিসগুলিকে অন্ধ করবেন না।
WackGet

14

কিছু মন্তব্য যেমন উল্লেখ করেছে, আপনি নির্ভরতা ইনজেকশন ব্যবহার করতে চান। অবজেক্ট ম্যানেজার ব্যবহার করবেন না; অন্য কথায়, অন্যান্য প্রতিক্রিয়াগুলির কোনও কী বলে না। নিম্নলিখিত কৌশলটি যে কোনও জায়গায় প্রয়োগ করা যেতে পারে। ব্লকগুলির জন্য, লেআউট এক্সএমএলে আপনার ক্লাসে শ্রেণি সেট করুন যা মূল প্রসারিত করে এবং সঠিক তথ্য ইনজেকশন করে।

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();

রেফারেন্সের জন্য, পণ্য স্টকের তথ্য পুনরুদ্ধার করার ক্ষেত্রে ম্যাজেন্টো 2 সমস্ত ক্যাটালগ জুড়ে এই সঠিক ইন্টারফেসটি ব্যবহার করে।

নোট করুন যে বর্গাকার বন্ধনীগুলির মধ্যে যে কোনও কিছু সংশোধন করা দরকার।


3
এটি সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত। যদিও আমি এটি পরীক্ষা করেছি না (এখনও) এটি সম্মেলন অনুসরণ করে।
দান ভ্যান ডেন বার্গ

3
আমি এটি পরীক্ষা করেছি এবং এটি করার সঠিক উপায় এটি। অবজেক্ট ম্যানেজারটি ব্যবহার করা হ'ল নো
حلقি

2
সেরা অনুশীলনের জন্য অ্যালওয়ে +1!
আকিফ

2
এটি স্টকরেজিস্ট্রিআইন্টারফেস স্টকস্টেটইন্টারফেসে নয়, প্রতিটি ক্ষেত্রে কাজ করে বলে এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
অমৃত পাল সিং

1
সম্মত, এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
টিচ

12

ম্যাজেন্টো 2 এ প্রতিটি পণ্যের স্টক পরিমাণ কীভাবে পাবেন

কন্ট্রোলার বা ব্লক ইনজেকশনের জন্য \ ম্যাজেন্টো \ ক্যাটালগ তালিকাভুক্তি \ এপি \ স্টকস্টেটআইন্টারফেস

 public function __construct(
    \Magento\CatalogInventory\Api\StockStateInterface $stockItem
   )
  {
    $this->stockItem = $stockItem;
  }

এবং তারপরে কিটিটি পেতে getStockQty ফাংশনটি ব্যবহার করুন

 $this->stockItem->getStockQty($product->getId(), $product->getStore()->getWebsiteId());

আপনি যদি .phtml ফাইলে পরিমাণ পেতে চান তবে ব্যবহার করুন use

 <?php 
 $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 $StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
 echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
?>

আমার কাছে
কিটি

@ জাফরপিনজার আজ এটির স্থিতির কারণও জানতে পেরেছেন - প্রতিবন্ধী যদি 0 প্রদান করে - তবে আমি সিদ্ধান্ত নিতে পারি না যে এটি ভাল জিনিস কিনা না ...
ডমিনিক জিগেন

4

স্ক্রিপ্টের নীচে ম্যাজেন্টো 2 তে পণ্য স্টক পরিমাণ, ন্যূনতম পরিমাণ এবং স্টক বিশদ পেতে সহায়তা করবে।

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productStockObj = $objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface')->getStockItem($productId);
print_r($productStockObj->getData());

1

আপনি যদি $productobjব্যাকএন্ড দিক থেকে পণ্য সংরক্ষণের পরে চান তবে আপনি সহজেই catalog_product_save_afterইভেন্টটি ব্যবহার করতে পারেন ।

আমি ধরে নিচ্ছি যে আপনি কীভাবে একটি মডিউল তৈরি করবেন তা ইতিমধ্যে আপনি জানেন M2

এই মুহূর্তে আপনার এম 2 এর জন্য নতুন মডিউল বিকাশ করতে হবে

তারপরে 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();

    }   
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.