0

I'd like to display the childProduct saleable stock quantity within a grouped or configurable product page on magento 2, I can put in various blocks that supposedly call the stockQty but it's always the stock of the config or grouped (i.e., 0).

edit: this solution: Display Stock Quantity on grouped product

doesn't work, just shows a no such entity exception for an entiry_id that does exist.

0

This will get you there of what you've wants, add the below code in the block file

<?php namespace Vendor\Module\Block;
use Magento\Catalog\Api\ProductRepositoryInterface;                 
use Magento\ConfigurableProduct\Api\LinkManagementInterface;        
use Magento\Framework\Api\SearchCriteriaBuilder;                    
use Magento\Framework\Registry;                                   
class Product extends \Magento\Framework\View\Element\Template{
public $registry;
public $stockProduct;
protected $productRepository;
protected $linkManagement;

public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Framework\Registry $registry,
\Magento\CatalogInventory\Api\StockStateInterface $stockProduct,
LinkManagementInterface $linkManagement,
ProductRepositoryInterface $productRepository,
SearchCriteriaBuilder $searchCriteriaBuilder,
array $data = []
) {
    $this->registry      = $registry;
    $this->stockProduct  = $stockProduct;
    $this->linkManagement = $linkManagement;
    $this->productRepository = $productRepository;
    $this->searchCriteriaBuilder = $searchCriteriaBuilder;
    parent::__construct($context, $data);
}

public function getCurrentProduct()
{
    return $this->registry->registry('current_product')->getId();
}
public function getStock()
{
    $searchCriteria = $this->searchCriteriaBuilder
        ->addFilter('type_id', 'configurable')
        ->addFilter('entity_id', $this->getCurrentProduct())
        ->create();

    $configurableProducts = $this->productRepository
        ->getList($searchCriteria);
    $simpleStock      = array();
    foreach ($configurableProducts->getItems() as $configurableProduct) {
        $childProducts = $this->linkManagement
        ->getChildren($configurableProduct->getSku());
        foreach ($childProducts as $items) {
            $simpleStock[] = $this->stockProduct->getStockQty($items->getId(), $items->getStore()->getWebsiteId());
        }
    }
    return $simpleStock;
}

}

Then add the

catalog_product_view.xml add the below to there in layout from you module

<?xml version="1.0"?>                                             
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
   <referenceContainer name="content">
        <block class="Vendor\Module\Block\Product"  name="customer_section" template="Vendor_Module::product.phtml">
        </block>
    </referenceContainer>
</body>

Add the below to the product.phtml

<?php                                                         
$blockobj = $block->getStock();
print_r($blockobj);

That's all hope it helps you. Have a nice day :)

  • Hi, yes i've seen these objectmanager options everywhere, but they are all immediately followed by "don't use this it's not the right way to do it" so what would be the point of trying it out? – Ian Richens Feb 11 at 13:21
  • @IanRichens the purpose of using object manager to achieve the task. Anyway updated. – G Prathap Feb 11 at 13:39
  • so if i put this in a product.php in my new module, i would call this with <?php $blockObj= $block->getLayout()->createBlock('Vendor\module\Block\Product'); echo $blockObj->getStock(); ?> – Ian Richens Feb 11 at 14:34
  • @IanRichens Updated for you needs, if you find this useful add a credit – G Prathap Feb 12 at 4:51
  • if you find this useful add a credit – G Prathap 2 days ago

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.