Magento 2 Как отобразить простой товарный запас на настраиваемом продукте? - PullRequest
0 голосов
/ 27 мая 2020

Это не вопрос, а возможное решение это ответ о том, как показать простой товарный запас на настраиваемом продукте

Я искал это решение и заметил, что много люди задавали этот аналогичный вопрос, и большинство ответов были расплывчатыми или решения были для magento 1, но так было до тех пор, пока я не наткнулся на это [решение] [1], которое не было для моей конкретной проблемы, но оно делало то, что я хочу, просто не для складских запасов, но для артикулов, поэтому я внес несколько изменений и предложил решение, приведенное ниже, для акций

1 Ответ

0 голосов
/ 27 мая 2020

Раскрывающийся список - это атрибут, используемый в настраиваемом продукте.

Создать плагин

namespace Vendor\Module\Plugin;


class Configurable
{

    public function aftergetJsonConfig(
        \Magento\ConfigurableProduct\Block\Product\View\Type\Configurable $subject,
        $result
    ) {

        $jsonResult = json_decode($result, true);
        $jsonResult['stockqtys']=[];

        foreach ($subject->getAllowProducts() as $simpleProduct) {
            $jsonResult['stockqtys'][$simpleProduct->getId()] = $this->getProductStock($simpleProduct->getId());
        }

        $result = json_encode($jsonResult);

        return $result;
    }

   public function getProductStock($productId)
    {   
        $objectManager =  \Magento\Framework\App\ObjectManager::getInstance(); 
        $stockRegistry = $objectManager->get('\Magento\CatalogInventory\Api\StockRegistryInterface');
        return $stockRegistry->getStockItem($productId)->getQty();        

    }
}

Создать и т.д. \ di. xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

<type name="Magento\ConfigurableProduct\Block\Product\View\Type\Configurable">
        <plugin  disabled="false"  name="Vendor_Module_Plugin" sortOrder="10" type="Vendor\Module\Plugin\Configurable"/>
    </type>

</config>

web \ js \ stockswitch. js

define([
    'jquery',
    'mage/utils/wrapper'
], function ($, wrapper) {
    'use strict';

    return function(targetModule){

        var reloadPrice = targetModule.prototype._reloadPrice;
        var reloadPriceWrapper = wrapper.wrap(reloadPrice, function(original){

            var result = original();
            var productStock = this.options.spConfig.stockqtys[this.simpleProduct];

            $('div.product-info-main .stock .value').html("");

            if(productStock != '') {
                $('div.product-info-main .stock .value').html(productStock);
            }   

            return result;
        });

        targetModule.prototype._reloadPrice = reloadPriceWrapper;
        return targetModule;
    };
});

web \ require js -config. js

var config = {
    config: {
        mixins: {
            'Magento_ConfigurableProduct/js/configurable': {
                'Vendor_Module/js/stockswitch': true
            }
        }
    }
};

Заменить шаблон default.p html и добавьте строки ниже в том месте, где вы хотите, чтобы ваши акции отображались Vendor / Module / Magento_Catalog / templates / product / view / type / default.p html

<div class="stock actual-qty"> <span class="value" > </span> </div> 

Пожалуйста дайте мне знать о любых улучшениях в комментариях

...