Magento 2 - изменение цены продукта на 0,00 на странице сведений о продукте для неамериканского региона


14

Я сталкиваюсь с очень странной проблемой после установки Magento 2.0.4. Я создал продукт с ценой $ 12 и изменил локаль из конфигурации Magento в бэкэнде.

Ниже приведен скриншот страницы со списком.

введите описание изображения здесь

Также найдите скриншот ниже для подробной информации.

введите описание изображения здесь

Вы могли заметить разницу между двумя скриншотами. Да, на странице сведений о товаре отображается цена в 0,00 долл. США, в то время как на странице со списком сохраняется цена, которую я добавил.

Страница сведений о продукте автоматически обновляет правильную цену до $ 0,00 Через одну или две секунды (Обновления Javascript).

Найдите ниже код для этого

$('[data-price-type="' + priceCode + '"]', this.element).html(priceTemplate({data: price}));

Далее я отлаживаю код и нахожу другой код javascript, который передает параметр в виджет ценника Magento 2.

<script>
    require([
        'jquery',
        'Magento_Catalog/js/price-box'
    ], function($){
        var priceBoxes = $('[data-role=priceBox]');

        priceBoxes = priceBoxes.filter(function(index, elem){
            return !$(elem).find('.price-from').length;
        });

        priceBoxes.priceBox({'priceConfig': <?php /* @escapeNotVerified */ echo $block->getJsonConfig() ?>});
    });
</script>

Теперь я проверил метод getJsonConfig (),

  $product = $this->getProduct();

        if (!$this->hasOptions()) {
            $config = [
                'productId' => $product->getId(),
                'priceFormat' => $this->_localeFormat->getPriceFormat()
                ];
            return $this->_jsonEncoder->encode($config);
        }

        $tierPrices = [];
        $tierPricesList = $product->getPriceInfo()->getPrice('tier_price')->getTierPriceList();
        foreach ($tierPricesList as $tierPrice) {
            $tierPrices[] = $this->priceCurrency->convert($tierPrice['price']->getValue());
        }
        $config = [
            'productId' => $product->getId(),
            'priceFormat' => $this->_localeFormat->getPriceFormat(),
            'prices' => [
                'oldPrice' => [
                    'amount' => $this->priceCurrency->convert(
                        $product->getPriceInfo()->getPrice('regular_price')->getAmount()->getValue()
                    ),
                    'adjustments' => []
                ],
                'basePrice' => [
                    'amount' => $this->priceCurrency->convert(
                        $product->getPriceInfo()->getPrice('final_price')->getAmount()->getBaseAmount()
                    ),
                    'adjustments' => []
                ],
                'finalPrice' => [
                    'amount' => $this->priceCurrency->convert(
                        $product->getPriceInfo()->getPrice('final_price')->getAmount()->getValue()
                    ),
                    'adjustments' => []
                ]
            ],
            'idSuffix' => '_clone',
            'tierPrices' => $tierPrices
        ];

Я сделал много отладок в коде и пришел к выводу, что они используют ICUDATA для поддержки локали.

Я застрял с этим всем, кажется, это проблема PriceFormat.

Пожалуйста, убедитесь, что эта проблема возникает только для определенных вариантов локали, таких как Persion (Иран).


Применить переиндексацию, очистить кеш, развернуть статическое содержимое.
Суреш Чикани

Спасибо @SHPatel, это не проблема переиндексации или кеша. я сделал все возможное.
Codrain Technolabs Pvt Ltd

Это ошибка, о которой ранее сообщалось команде magento. Проверьте это для более подробной информации - github.com/magento/magento2/issues/4077
Рина Парех

Спасибо @ReenaParekh, та ошибка сообщена мной. Но я хочу решить эту проблему, потому что magento люди займут время, чтобы обновить его в следующем выпуске или около того.
Codrain Technolabs Pvt Ltd

Ответы:


0

эта проблема была решена, пожалуйста, обновите ваш Magento2 до последней стабильной версии

если вы установили из GIT & Composer, выполните следующие действия:

  • Чем вы должны сохранить ваши изменения
  • GIT PULL Последняя стабильная ветка т.е. 2.1
  • Обновление Composer
  • Обновление Magento ( bin/magento setup:upgrade)

иначе, если вы установили с помощью zip-папки, загрузите последнюю версию с веб-сайта magento и переопределите все файлы с помощью нового zip-файла, чем вам нужно очистить кеш и запустить

bin/magento setup:upgrade

0

Обновите magento, выполнив следующие команды.

Настройка bin / magento: обновление

Настройка bin / magento: db-схема: обновление

php -d memory_limit = -1 bin / magento setup: di: compile

php -d memory_limit = -1 bin / magento setup: static-content: deploy


0

Пожалуйста, попробуйте обновить код ниже:

Путь - lib/internal/Magento/Framework/Locale/Format.php

class Format implements \Magento\Framework\Locale\FormatInterface
{
    const DEFAULT_NUMBER_SET = 'latn';
    /**
     * @var \Magento\Framework\App\ScopeResolverInterface
     */
@@ -104,12 +105,18 @@ public function getPriceFormat($localeCode = null, $currencyCode = null)
            $currency = $this->_scopeResolver->getScope()->getCurrentCurrency();
        }
        $localeData = (new DataBundle())->get($localeCode);
        /* $format = $localeData['NumberElements']['latn']['patterns']['currencyFormat']
            ?: explode(';', $localeData['NumberPatterns'][1])[0];
        $decimalSymbol = $localeData['NumberElements']['latn']['symbols']['decimal']
            ?: $localeData['NumberElements'][0];
        $groupSymbol = $localeData['NumberElements']['latn']['symbols']['group']
            ?: $localeData['NumberElements'][1]; */
 //start updated code
        $defaultSet = $localeData['NumberElements']['default'] ?: self::DEFAULT_NUMBER_SET;
        $format = $localeData['NumberElements'][$defaultSet]['patterns']['currencyFormat']
            ?: ($localeData['NumberElements'][self::DEFAULT_NUMBER_SET]['patterns']['currencyFormat']
                ?: explode(';', $localeData['NumberPatterns'][1])[0]);
        $decimalSymbol = $localeData['NumberElements'][$defaultSet]['symbols']['decimal']
            ?: ($localeData['NumberElements'][self::DEFAULT_NUMBER_SET]['symbols']['decimal']
                ?: $localeData['NumberElements'][0]);
        $groupSymbol = $localeData['NumberElements'][$defaultSet]['symbols']['group']
            ?: ($localeData['NumberElements'][self::DEFAULT_NUMBER_SET]['symbols']['group']
                ?: $localeData['NumberElements'][1]);

  // end updated code

        $pos = strpos($format, ';');
        if ($pos !== false) {

надеюсь, что его работа для вас.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.