1

I want to display stock quantity only for simple products. For that, I added some code and it's working fine for simple products. But the thing is it's also showing quantity for other types of products like configurable.

here is the code I added app/code/Smartwave/Porto/Helper/Data.php

<?php
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Smartwave\Porto\Helper;

use Magento\Framework\Registry;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
{

    protected $_objectManager;
    private $_registry;
    protected $_filterProvider;
    private $_checkedPurchaseCode;
    private $_messageManager;
    protected $_configFactory;



    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
        Registry $registry
    ) {
        $this->stockRegistry = $stockRegistry;
        parent::__construct($context);
    }


     public function getStockQty($product)
    {
        return $this->stockRegistry->getStockStatus($product->getId(), $product->getStore()->getWebsiteId())->getQty();
    }
}

app/design/frontend/Smartwave/porto/Magento_Catalog/templates/product/view/type/default.phtml

<?php
/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

// @codingStandardsIgnoreFile

?>
<?php /* @var $block \Magento\Catalog\Block\Product\View\AbstractView */?>
<?php $_product = $block->getProduct() ?>

<?php if ($block->displayProductStockStatus()): ?>

    <?php if ($_product->isAvailable()): ?>
        <div class="stock available" title="<?php /* @escapeNotVerified */ echo __('Availability') ?>">
            <span class="label"><?php /* @escapeNotVerified */ echo __('Availability:') ?></span>
            <span><?php echo $this->helper('Smartwave\Porto\Helper\Data')->getStockQty($_product);?></span>
        </div>
    <?php else: ?>
        <div class="stock unavailable" title="<?php /* @escapeNotVerified */ echo __('Availability') ?>">
            <span class="label"><?php /* @escapeNotVerified */ echo __('Availability:') ?></span>
            <span><?php /* @escapeNotVerified */ echo __('Out of stock') ?></span>
        </div>
    <?php endif; ?>
<?php endif; ?>
1

Replace this below code in your if else condition :

<?php if ($_product->isAvailable()): ?>
        <?php if($_product->getTypeId() == 'simple') : ?>
            <div class="stock available" title="<?php /* @escapeNotVerified */ echo __('Availability') ?>">
                <span class="label"><?php /* @escapeNotVerified */ echo __('Availability:') ?></span>
                <span><?php echo $this->helper('Smartwave\Porto\Helper\Data')->getStockQty($_product);?></span>
            </div>
        <?php endif; ?>
<?php else: ?>
    <div class="stock unavailable" title="<?php /* @escapeNotVerified */ echo __('Availability') ?>">
        <span class="label"><?php /* @escapeNotVerified */ echo __('Availability:') ?></span>
        <span><?php /* @escapeNotVerified */ echo __('Out of stock') ?></span>
    </div>
<?php endif; ?>
2

You can try below condition to display stock quantity if its simple product only

if($_product->getTypeId() == 'simple'){
//your code
}

It will return configurable or simple

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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