Magento 2-非米国ロケールの製品詳細ページでの製品価格の0.00への変更


14

Magento 2.0.4のインストール後、非常に奇妙な問題に直面しています。12ドルの価格で製品を作成し、バックエンドでMagento構成からロケールを変更しました。

以下は、リストページのスクリーンショットです。

ここに画像の説明を入力してください

詳細ページのスクリーンショットもご覧ください。

ここに画像の説明を入力してください

2つのスクリーンショットの違いに気づいたかもしれません。はい、商品詳細ページには0.00ドルの価格が表示されますが、リストページには追加した価格が保持されます。

製品の詳細ページでは、1〜2秒後に正しい価格が自動的に0ドルに更新されます(Javascriptの更新)。

以下のコードを見つけてください

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

さらにコードをデバッグして、Magento 2価格ボックスウィジェットにパラメーターを渡す別の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を適用し、キャッシュを消去し、静的コンテンツを展開します。
スレシュChikani

@SHPatelに感謝します。再インデックスやキャッシュの問題ではありません。できる限りのことをしました。
Codrain Technolabs Pvt Ltd

これはバグであり、以前にmagentoチームに報告されています。詳細についてはこちらをご覧ください -github.com/magento/magento2/issues/4077
Reena Parekh

@ReenaParekhに感謝します。そのバグは私から報告されました。しかし、Magentoの人々は次のリリースなどで更新するのに時間がかかるので、この問題の解決策が欲しいです。
Codrain Technolabs Pvt Ltd

回答:


0

この問題は解決されました。Magento2を最新の安定バージョンにアップデートしてください。

GIT&Composerからインストールした場合は、次の手順に従います。

  • あなたがあなたの変更を止めなければならないより
  • GIT PULL最新の安定版ブランチ2.1
  • 作曲者の更新
  • Magentoのアップグレード(bin/magento setup:upgrade

それ以外の場合は、Magento Webサイトから最新のzipフォルダーをダウンロードするよりもzipフォルダーのダウンロードを使用してインストールし、新しいzipを使用してすべてのファイルを上書きする場合は、キャッシュをクリアして実行する必要があります

bin/magento setup:upgrade

0

次のコマンドでmagentoをアップグレードします。

bin / magentoのセットアップ:アップグレード

bin / magento setup:db-schema:upgrade

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

あなたのためにその仕事を願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.