Magento 2-非美国区域设置的产品详细信息页面中的产品价格更改为0.00


14

安装Magento 2.0.4之后,我面临一个非常奇怪的问题。我创建了一个价格为12美元的产品,并从后端的Magento配置更改了语言环境。

以下是列表页面的屏幕截图。

在此处输入图片说明

还可以在详细页面上找到以下屏幕截图。

在此处输入图片说明

您可能已经注意到两个屏幕截图之间的区别。是的,产品详细信息页面显示的价格为0.00美元,而列表页面保留了我添加的价格。

一秒钟或两秒钟后,“产品详情”页面会自动将正确价格更新为$ 0(Java更新)。

查找以下代码

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

我在代码中进行了进一步调试,并找到了另一个将参数传递给Magento 2 pricebox小部件的JavaScript代码。

<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(伊朗))会出现此问题。


应用reindeix,清理缓存,部署静态内容。
Suresh Chikani

感谢@SHPatel,它不是重新索引或缓存问题。我做了一切可能。
Codrain Technolabs Pvt Ltd 2016年

这是一个错误,以前已报告给magento小组。检查此以获取更多详细信息 -github.com/magento/magento2/issues/4077
Reena Parekh,

感谢@ReenaParekh,该错误由我报告。但是我想要解决这个问题,因为magento人将花一些时间在他们的下一个版本中对其进行更新。
Codrain Technolabs Pvt Ltd 2016年

Answers:


0

这个问题已经解决,请将您的Magento2更新到最新的稳定版本

如果您已从GIT&Composer安装,请执行以下步骤:

  • 比您必须改变的地方
  • GIT PULL最新稳定版,即2.1
  • 作曲家更新
  • 升级Magento(bin/magento setup:upgrade

否则,如果您使用zip文件夹下载进行安装,而不是从magento网站下载最新文件,并使用新zip覆盖所有文件,则需要清除缓存并运行

bin/magento setup:upgrade

0

通过以下命令升级magento。

bin / magento设置:升级

bin / magento设置:db-schema:升级

php -d memory_limit = -1 bin / magento设置:di:编译

php -d memory_limit = -1 bin / magento设置:静态内容:部署


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) {

希望它对你有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.